fs/9p: Revert "fs/9p: fix dups even in uncached mode"
authorEric Van Hensbergen <ericvh@kernel.org>
Thu, 11 Apr 2024 23:36:33 +0000 (23:36 +0000)
committerEric Van Hensbergen <ericvh@kernel.org>
Thu, 11 Apr 2024 23:36:33 +0000 (23:36 +0000)
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>
fs/9p/vfs_super.c

index 4236058c7bbd18b726925e808e73bcb6c08edfeb..eeac06c2a84cf9e51cd9e629a6cf9ccb5070b915 100644 (file)
@@ -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,