Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Kirill Smelkov
wendelin.core
Commits
38ea1ad3
Commit
38ea1ad3
authored
Jun 27, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
926c30b4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
12 additions
and
5 deletions
+12
-5
wcfs/notes.txt
wcfs/notes.txt
+3
-0
wcfs/wcfs.go
wcfs/wcfs.go
+6
-5
wcfs/wcfs_test.py
wcfs/wcfs_test.py
+3
-0
No files found.
wcfs/notes.txt
View file @
38ea1ad3
...
...
@@ -141,6 +141,9 @@ Starting from Linux 5.1 mmap_sem should be generally released while doing any IO
but before that the analysis remains FUSE-specific.
The property that changing mmapping while under pagefault is possible is
verified by wcfs testsuite in `test_wcfs_remmap_on_pin` test.
Client cannot be ptraced while under pagefault
==============================================
...
...
wcfs/wcfs.go
View file @
38ea1ad3
...
...
@@ -359,18 +359,18 @@ package main
// using just cheap revmax estimate can frequently result in all watches
// being skipped.
//
// 7.2) for all registered client@at watche
r
s of head/bigfile/file:
// 7.2) for all registered client@at watches of head/bigfile/file:
//
// - rev'(blk) ≤ at: -> do nothing
// - rev'(blk) > at:
// - if blk ∈ watch
er
.pinned -> do nothing
// - if blk ∈ watch.pinned -> do nothing
// - rev = max(δtail.by(#blk) : _ ≤ at) || min(rev ∈ δtail : rev ≤ at) || at
// - watch
er
.pin(file, #blk, @rev)
// - watch
er
.pinned += blk
// - watch.pin(file, #blk, @rev)
// - watch.pinned += blk
//
// where
//
// watch
er
.pin(file, #blk, @rev)
// watch.pin(file, #blk, @rev)
//
// sends pin message according to "Invalidation protocol", and is assumed
// to cause
...
...
@@ -1004,6 +1004,7 @@ func (f *BigFile) invalidateBlk(ctx context.Context, blk int64) (err error) {
delete
(
f
.
loading
,
blk
)
}
// XXX skip retrieve/store if len(f.watches) == 0
// try to retrieve cache of current head/data[blk], if we got nothing from f.loading
if
blkdata
==
nil
{
blkdata
=
make
([]
byte
,
blksize
)
...
...
wcfs/wcfs_test.py
View file @
38ea1ad3
...
...
@@ -1682,6 +1682,9 @@ def test_wcfs_watch_vs_access():
# verify that on pin message, while under pagefault, we can mmap @at/f[blk]
# into where head/f[blk] was mmaped; the result of original pagefaulting read
# must be from newly insterted mapping.
#
# TODO same with two mappings to the same file, but only one changing blk mmap
# -> one read gets changed data, one read gets data from @head.
@
func
def
test_wcfs_remmap_on_pin
():
t
=
tDB
();
zf
=
t
.
zfile
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment