Re: [PATCH v3 2/2] ext4: remove unused locked_ei parameter from __es_shrink()
From: Jan Kara
Date: Wed Sep 30 2026 - 13:46:31 EST
On Wed 30-09-26 15:11:38, Qiliang Yuan wrote:
> __es_shrink()'s locked_ei parameter exists to let a caller pass in an
> inode it already holds i_es_lock on, so the shrinker walk can skip
> that inode instead of deadlocking on write_trylock(), and fall back
> to reclaiming from it directly if nothing else could be freed. Its
> only caller, ext4_es_scan(), always passes NULL.
>
> Drop the parameter along with the two code paths that exist solely to
> support it: the ei == locked_ei skip check, and the trailing
> es_reclaim_extents(locked_ei, ...) fallback, neither of which can ever
> run while locked_ei is always NULL.
>
> Signed-off-by: Qiliang Yuan <odys.yuan@xxxxxxxxx>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
> fs/ext4/extents_status.c | 13 ++++---------
> 1 file changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c
> index d88af807d36e7..efbccb29d5fd1 100644
> --- a/fs/ext4/extents_status.c
> +++ b/fs/ext4/extents_status.c
> @@ -183,8 +183,7 @@ static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
> int *reserved, struct extent_status *res,
> struct extent_status *prealloc);
> static int es_reclaim_extents(struct ext4_inode_info *ei, int *nr_to_scan);
> -static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
> - struct ext4_inode_info *locked_ei);
> +static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan);
> static int __revise_pending(struct inode *inode, ext4_lblk_t lblk,
> ext4_lblk_t len,
> struct pending_reservation **prealloc);
> @@ -1669,8 +1668,7 @@ void ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
> ext4_da_release_space(inode, reserved);
> }
>
> -static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
> - struct ext4_inode_info *locked_ei)
> +static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan)
> {
> struct ext4_inode_info *ei;
> struct ext4_es_stats *es_stats;
> @@ -1706,7 +1704,7 @@ static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
> continue;
> }
>
> - if (ei == locked_ei || !write_trylock(&ei->i_es_lock)) {
> + if (!write_trylock(&ei->i_es_lock)) {
> nr_skipped++;
> continue;
> }
> @@ -1734,9 +1732,6 @@ static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan,
> goto retry;
> }
>
> - if (locked_ei && nr_shrunk == 0)
> - nr_shrunk = es_reclaim_extents(locked_ei, &nr_to_scan);
> -
> out:
> scan_time = ktime_to_ns(ktime_sub(ktime_get(), start_time));
> if (likely(es_stats->es_stats_scan_time))
> @@ -1779,7 +1774,7 @@ static unsigned long ext4_es_scan(struct shrinker *shrink,
> ret = percpu_counter_read_positive(&sbi->s_es_stats.es_stats_shk_cnt);
> trace_ext4_es_shrink_scan_enter(sbi->s_sb, nr_to_scan, ret);
>
> - nr_shrunk = __es_shrink(sbi, nr_to_scan, NULL);
> + nr_shrunk = __es_shrink(sbi, nr_to_scan);
>
> ret = percpu_counter_read_positive(&sbi->s_es_stats.es_stats_shk_cnt);
> trace_ext4_es_shrink_scan_exit(sbi->s_sb, nr_shrunk, ret);
>
> --
> 2.43.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR