fscrypt dentries are always valid once the key is available.  Since the
key cannot be removed without evicting the dentry, we don't need to keep
retrying to revalidate it.

Signed-off-by: Gabriel Krisman Bertazi <kris...@suse.de>
---
 fs/crypto/fname.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c
index 7b3fc189593a..0457ba2d7d76 100644
--- a/fs/crypto/fname.c
+++ b/fs/crypto/fname.c
@@ -591,8 +591,15 @@ int fscrypt_d_revalidate(struct dentry *dentry, unsigned 
int flags)
         * reverting to no-key names without evicting the directory's inode
         * -- which implies eviction of the dentries in the directory.
         */
-       if (!(dentry->d_flags & DCACHE_NOKEY_NAME))
+       if (!(dentry->d_flags & DCACHE_NOKEY_NAME)) {
+               /*
+                * If fscrypt is the only feature requiring
+                * revalidation for this dentry, we can just disable it.
+                */
+               if (dentry->d_op->d_revalidate == &fscrypt_d_revalidate)
+                       d_set_always_valid(dentry);
                return 1;
+       }
 
        /*
         * No-key name; valid if the directory's key is still unavailable.
-- 
2.43.0



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to