On Mon, 11 Jul 2022 at 22:11, Paul Moore <paul@xxxxxxxxxxxxxx> wrote: > > On Fri, Jul 1, 2022 at 10:15 AM Paul Moore <paul@xxxxxxxxxxxxxx> wrote: > > On Fri, Jul 1, 2022 at 10:11 AM Paul Moore <paul@xxxxxxxxxxxxxx> wrote: > > > > > > If an old readdir cache entry is found during lookup we need to > > > ensure that we drop a reference to the old cache entry before > > > we remove it from the cache. > > > > > > Signed-off-by: Paul Moore <paul@xxxxxxxxxxxxxx> > > > --- > > > fs/overlayfs/readdir.c | 21 +++++++++++---------- > > > 1 file changed, 11 insertions(+), 10 deletions(-) > > > > I ran across this a few months ago while working on something related > > in overlayfs' readdir cache, unfortunately that work has been shelved > > for now, but it seems like this bugfix might still have merit, > > although I'll leave that decision up to the overlayfs experts; it's > > very possible I've missed an important detail and this isn't actually > > a bug. > > > > I've done some basic manual testing (kernel boots, > > mounting/traversal/accesses are all okay), but nothing exhaustive. > > Based on the lack of a response, should I assume this is not a bug and > this patch is not needed? Hi Paul, Sorry for the late response. Yes, the code is okay, though could be better documented. The logic is that only open directories contain counted references to the cache, not the directory inode. The uncounted reference from the inode is used to allow sharing the cache in case there are mulitple directory readers. Thus the ref from the inode can be dropped without decrementing the count, and this reference is reset to NULL when the count hits zero. Locking is provided by i_rwsem. Thanks, Miklos