Messages in this thread Patch in this message | | | From | Stephen Brennan <> | Subject | [PATCH 3/4] dcache: add action D_WALK_SKIP_SIBLINGS to d_walk() | Date | Mon, 13 Dec 2021 16:53:36 -0800 |
| |
From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
This lets skip remaining siblings at seeing d_is_tail_negative().
Co-authored-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Co-authored-by: Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com> Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com> --- fs/dcache.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/fs/dcache.c b/fs/dcache.c index 685b91866e59..9083436f5dcb 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -1366,12 +1366,14 @@ EXPORT_SYMBOL(shrink_dcache_sb); * @D_WALK_QUIT: quit walk * @D_WALK_NORETRY: quit when retry is needed * @D_WALK_SKIP: skip this dentry and its children + * @D_WALK_SKIP_SIBLINGS: skip siblings and their children */ enum d_walk_ret { D_WALK_CONTINUE, D_WALK_QUIT, D_WALK_NORETRY, D_WALK_SKIP, + D_WALK_SKIP_SIBLINGS, }; /** @@ -1402,6 +1404,7 @@ static void d_walk(struct dentry *parent, void *data, break; case D_WALK_QUIT: case D_WALK_SKIP: + case D_WALK_SKIP_SIBLINGS: goto out_unlock; case D_WALK_NORETRY: retry = false; @@ -1433,6 +1436,9 @@ static void d_walk(struct dentry *parent, void *data, case D_WALK_SKIP: spin_unlock(&dentry->d_lock); continue; + case D_WALK_SKIP_SIBLINGS: + spin_unlock(&dentry->d_lock); + goto skip_siblings; } if (!list_empty(&dentry->d_subdirs)) { @@ -1444,6 +1450,7 @@ static void d_walk(struct dentry *parent, void *data, } spin_unlock(&dentry->d_lock); } +skip_siblings: /* * All done at this level ... ascend and resume the search. */ -- 2.30.2
| |