|
Luís Henriques |
cfbffb |
From: Jiachen Zhang <zhangjiachen.jaycee@bytedance.com>
|
|
Luís Henriques |
cfbffb |
Date: Wed, 28 Sep 2022 20:19:34 +0800
|
|
Luís Henriques |
cfbffb |
Subject: fuse: always revalidate rename target dentry
|
|
Luís Henriques |
cfbffb |
Git-commit: ccc031e26afe60d2a5a3d93dabd9c978210825fb
|
|
Luís Henriques |
cfbffb |
Patch-mainline: v6.2-rc1
|
|
Luís Henriques |
cfbffb |
References: bsc#1211808
|
|
Luís Henriques |
cfbffb |
|
|
Luís Henriques |
cfbffb |
The previous commit df8629af2934 ("fuse: always revalidate if exclusive
|
|
Luís Henriques |
cfbffb |
create") ensures that the dentries are revalidated on O_EXCL creates. This
|
|
Luís Henriques |
cfbffb |
commit complements it by also performing revalidation for rename target
|
|
Luís Henriques |
cfbffb |
dentries. Otherwise, a rename target file that only exists in kernel
|
|
Luís Henriques |
cfbffb |
dentry cache but not in the filesystem will result in EEXIST if
|
|
Luís Henriques |
cfbffb |
RENAME_NOREPLACE flag is used.
|
|
Luís Henriques |
cfbffb |
|
|
Luís Henriques |
cfbffb |
Signed-off-by: Jiachen Zhang <zhangjiachen.jaycee@bytedance.com>
|
|
Luís Henriques |
cfbffb |
Signed-off-by: Zhang Tianci <zhangtianci.1997@bytedance.com>
|
|
Luís Henriques |
cfbffb |
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
|
Luís Henriques |
cfbffb |
Acked-by: Luís Henriques <lhenriques@suse.de>
|
|
Luís Henriques |
cfbffb |
|
|
Luís Henriques |
cfbffb |
---
|
|
Luís Henriques |
cfbffb |
fs/fuse/dir.c | 2 +-
|
|
Luís Henriques |
cfbffb |
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
Luís Henriques |
cfbffb |
|
|
Luís Henriques |
cfbffb |
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
|
|
Luís Henriques |
cfbffb |
index d092c7d75929..2c4b08a6ec81 100644
|
|
Luís Henriques |
cfbffb |
--- a/fs/fuse/dir.c
|
|
Luís Henriques |
cfbffb |
+++ b/fs/fuse/dir.c
|
|
Luís Henriques |
cfbffb |
@@ -214,7 +214,7 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)
|
|
Luís Henriques |
cfbffb |
if (inode && fuse_is_bad(inode))
|
|
Luís Henriques |
cfbffb |
goto invalid;
|
|
Luís Henriques |
cfbffb |
else if (time_before64(fuse_dentry_time(entry), get_jiffies_64()) ||
|
|
Luís Henriques |
cfbffb |
- (flags & (LOOKUP_EXCL | LOOKUP_REVAL))) {
|
|
Luís Henriques |
cfbffb |
+ (flags & (LOOKUP_EXCL | LOOKUP_REVAL | LOOKUP_RENAME_TARGET))) {
|
|
Luís Henriques |
cfbffb |
struct fuse_entry_out outarg;
|
|
Luís Henriques |
cfbffb |
FUSE_ARGS(args);
|
|
Luís Henriques |
cfbffb |
struct fuse_forget_link *forget;
|
|
Luís Henriques |
cfbffb |
|