]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gfs2: Revert "ignore negated quota changes"
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 3 Jun 2024 17:04:09 +0000 (19:04 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Sat, 8 Jun 2024 00:34:57 +0000 (02:34 +0200)
Commit 4c6a08125f22 ("gfs2: ignore negated quota changes") skips quota
changes with qd_change == 0 instead of writing them back, which leaves
behind non-zero qd_change values in the affected slots.  The kernel then
assumes that those slots are unused, while the qd_change values on disk
indicate that they are indeed still in use.  The next time the
filesystem is mounted, those invalid slots are read in from disk, which
will cause inconsistencies.

Revert that commit to avoid filesystem corruption.

This reverts commit 4c6a08125f2249531ec01783a5f4317d7342add5.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/quota.c

index bbd66adaec3d4993e27e740b64f0ca6f54433a5a..f0aaae07a5980d84c49e01fc8ed0334df7044c1d 100644 (file)
@@ -470,17 +470,6 @@ static bool qd_grab_sync(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd,
            qd->qd_sync_gen >= sync_gen)
                return false;
 
-       /*
-        * If qd_change is 0 it means a pending quota change was negated.
-        * We should not sync it, but we still have a qd reference and slot
-        * reference taken by gfs2_quota_change -> do_qc that need to be put.
-        */
-       if (!qd->qd_change && test_and_clear_bit(QDF_CHANGE, &qd->qd_flags)) {
-               slot_put(qd);
-               qd_put(qd);
-               return false;
-       }
-
        if (!lockref_get_not_dead(&qd->qd_lockref))
                return false;