summaryrefslogtreecommitdiff
path: root/fs/9p
diff options
context:
space:
mode:
authorEric Van Hensbergen <ericvh@kernel.org>2024-04-11 23:36:33 +0000
committerEric Van Hensbergen <ericvh@kernel.org>2024-04-11 23:36:33 +0000
commit824f06ff81464f823cd6259ff2ec8fbeceb2afa5 (patch)
treec666778b6ef1c7ae32a4a53665b36fc6baee3c27 /fs/9p
parent6e45a30fe5e7cf5d42ac07262a3d97644f23dc68 (diff)
fs/9p: Revert "fs/9p: fix dups even in uncached mode"
This reverts commit be57855f505003c5cafff40338d5d0f23b00ba4d. It caused a regression involving duplicate inode numbers in some tester trees. The bad behavior seems to be dependent on inode reuse policy in underlying file system, so it did not trigger in my test setup. Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
Diffstat (limited to 'fs/9p')
-rw-r--r--fs/9p/vfs_super.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/9p/vfs_super.c b/fs/9p/vfs_super.c
index 4236058c7bbd..eeac06c2a84c 100644
--- a/fs/9p/vfs_super.c
+++ b/fs/9p/vfs_super.c
@@ -244,6 +244,21 @@ done:
return res;
}
+static int v9fs_drop_inode(struct inode *inode)
+{
+ struct v9fs_session_info *v9ses;
+
+ v9ses = v9fs_inode2v9ses(inode);
+ if (v9ses->cache & (CACHE_META|CACHE_LOOSE))
+ return generic_drop_inode(inode);
+ /*
+ * in case of non cached mode always drop the
+ * inode because we want the inode attribute
+ * to always match that on the server.
+ */
+ return 1;
+}
+
static int v9fs_write_inode(struct inode *inode,
struct writeback_control *wbc)
{
@@ -278,6 +293,7 @@ static const struct super_operations v9fs_super_ops_dotl = {
.alloc_inode = v9fs_alloc_inode,
.free_inode = v9fs_free_inode,
.statfs = v9fs_statfs,
+ .drop_inode = v9fs_drop_inode,
.evict_inode = v9fs_evict_inode,
.show_options = v9fs_show_options,
.umount_begin = v9fs_umount_begin,