diff options
author | Andreas Gruenbacher <agruenba@redhat.com> | 2023-08-22 22:59:27 +0200 |
---|---|---|
committer | Andreas Gruenbacher <agruenba@redhat.com> | 2023-09-05 15:58:16 +0200 |
commit | 6b0e9a5f1e6d7f2719856b601d5639902fc0ee4f (patch) | |
tree | 240a70fbc42de169593f760fd47f163ee920b85a /fs/gfs2 | |
parent | gfs2: Rename SDF_DEACTIVATING to SDF_KILL (diff) | |
download | linux-6b0e9a5f1e6d7f2719856b601d5639902fc0ee4f.tar.xz linux-6b0e9a5f1e6d7f2719856b601d5639902fc0ee4f.zip |
gfs2: Fix wrong quota shrinker return value
Function gfs2_qd_isolate must only return LRU_REMOVED when removing the
item from the lru list; otherwise, the number of items on the list will
go wrong.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/quota.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index 48b9fbffe260..f58072efafc9 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -149,18 +149,22 @@ static enum lru_status gfs2_qd_isolate(struct list_head *item, struct list_lru_one *lru, spinlock_t *lru_lock, void *arg) { struct list_head *dispose = arg; - struct gfs2_quota_data *qd = list_entry(item, struct gfs2_quota_data, qd_lru); + struct gfs2_quota_data *qd = + list_entry(item, struct gfs2_quota_data, qd_lru); + enum lru_status status; if (!spin_trylock(&qd->qd_lockref.lock)) return LRU_SKIP; + status = LRU_SKIP; if (qd->qd_lockref.count == 0) { lockref_mark_dead(&qd->qd_lockref); list_lru_isolate_move(lru, &qd->qd_lru, dispose); + status = LRU_REMOVED; } spin_unlock(&qd->qd_lockref.lock); - return LRU_REMOVED; + return status; } static unsigned long gfs2_qd_shrink_scan(struct shrinker *shrink, |