Messages in this thread Patch in this message | | | From | Gautham Ananthakrishna <> | Subject | [PATCH RFC 3/6] dcache: add action D_WALK_SKIP_SIBLINGS to d_walk() | Date | Thu, 21 Jan 2021 18:49:42 +0530 |
| |
From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
This lets skip remaining siblings at seeing d_is_tail_negative().
Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Signed-off-by: Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com> --- fs/dcache.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/fs/dcache.c b/fs/dcache.c index a506169..894e6da 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -1320,12 +1320,14 @@ void shrink_dcache_sb(struct super_block *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, }; /** @@ -1356,6 +1358,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; @@ -1387,6 +1390,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)) { @@ -1398,6 +1404,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. */ -- 1.8.3.1
| |