__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 Reviewed-by: Jan Kara --- fs/ext4/extents_status.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c index b8821b93693a9..77786111ce59c 100644 --- a/fs/ext4/extents_status.c +++ b/fs/ext4/extents_status.c @@ -184,7 +184,7 @@ static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk, 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, int *nr_scanned); + int *nr_scanned); static int __revise_pending(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len, struct pending_reservation **prealloc); @@ -1670,7 +1670,7 @@ void ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk, } static int __es_shrink(struct ext4_sb_info *sbi, int nr_to_scan, - struct ext4_inode_info *locked_ei, int *nr_scanned) + int *nr_scanned) { struct ext4_inode_info *ei; struct ext4_es_stats *es_stats; @@ -1707,7 +1707,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; } @@ -1735,9 +1735,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: *nr_scanned = orig_nr_to_scan - nr_to_scan; @@ -1782,7 +1779,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_scanned); + nr_shrunk = __es_shrink(sbi, nr_to_scan, &nr_scanned); sc->nr_scanned = nr_scanned; ret = percpu_counter_read_positive(&sbi->s_es_stats.es_stats_shk_cnt); -- 2.43.0