mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
virtiofsd: passthrough_ll: add fallback for racy ops
We have two operations that cannot be done race-free on a symlink in certain cases: utimes and link. Add racy fallback for these if the race-free method doesn't work. We do our best to avoid races even in this case: - get absolute path by reading /proc/self/fd/NN symlink - lookup parent directory: after this we are safe against renames in ancestors - lookup name in parent directory, and verify that we got to the original inode, if not retry the whole thing Both utimes(2) and link(2) hold i_lock on the inode across the operation, so a racing rename/delete by this fuse instance is not possible, only from other entities changing the filesystem. If the "norace" option is given, then disable the racy fallbacks. Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
73b4d19dfc
commit
5fe319a7b1
2 changed files with 145 additions and 17 deletions
|
@ -142,7 +142,10 @@ void fuse_cmdline_help(void)
|
|||
" --daemonize run in background\n"
|
||||
" -o max_idle_threads the maximum number of idle worker "
|
||||
"threads\n"
|
||||
" allowed (default: 10)\n");
|
||||
" allowed (default: 10)\n"
|
||||
" -o norace disable racy fallback\n"
|
||||
" default: false\n"
|
||||
);
|
||||
}
|
||||
|
||||
static int fuse_helper_opt_proc(void *data, const char *arg, int key,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue