diff options
author | Amir Goldstein <amir73il@gmail.com> | 2021-04-11 12:22:23 +0300 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2021-04-12 12:00:37 +0200 |
commit | 65cd913ec9d9d71529665924c81015b7ab7d9381 (patch) | |
tree | 31f5e916ea5ab8203f4a2450c3b6976e1dad5212 /fs/overlayfs/readdir.c | |
parent | 708fa01597fa002599756bf56a96d0de1677375c (diff) | |
download | lwn-65cd913ec9d9d71529665924c81015b7ab7d9381.tar.gz lwn-65cd913ec9d9d71529665924c81015b7ab7d9381.zip |
ovl: invalidate readdir cache on changes to dir with origin
The test in ovl_dentry_version_inc() was out-dated and did not include
the case where readdir cache is used on a non-merge dir that has origin
xattr, indicating that it may contain leftover whiteouts.
To make the code more robust, use the same helper ovl_dir_is_real()
to determine if readdir cache should be used and if readdir cache should
be invalidated.
Fixes: b79e05aaa166 ("ovl: no direct iteration for dir with origin xattr")
Link: https://lore.kernel.org/linux-unionfs/CAOQ4uxht70nODhNHNwGFMSqDyOKLXOKrY0H6g849os4BQ7cokA@mail.gmail.com/
Cc: Chris Murphy <lists@colorremedies.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs/overlayfs/readdir.c')
-rw-r--r-- | fs/overlayfs/readdir.c | 12 |
1 files changed, 0 insertions, 12 deletions
diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c index f404a78e6b60..cc1e80257064 100644 --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -319,18 +319,6 @@ static inline int ovl_dir_read(struct path *realpath, return err; } -/* - * Can we iterate real dir directly? - * - * Non-merge dir may contain whiteouts from a time it was a merge upper, before - * lower dir was removed under it and possibly before it was rotated from upper - * to lower layer. - */ -static bool ovl_dir_is_real(struct dentry *dir) -{ - return !ovl_test_flag(OVL_WHITEOUTS, d_inode(dir)); -} - static void ovl_dir_reset(struct file *file) { struct ovl_dir_file *od = file->private_data; |