]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gfs2: Revert "introduce qd_bh_get_or_undo"
authorAndreas Gruenbacher <agruenba@redhat.com>
Fri, 7 Jun 2024 00:11:12 +0000 (02:11 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Sat, 8 Jun 2024 00:34:40 +0000 (02:34 +0200)
The qd_bh_get_or_undo() helper introduced by that commit doesn't improve
the code much, so revert it and clean things up in a more useful way in
the next commit.

This reverts commit 7dbc6ae60dd7089d8ed42892b6a66c138f0aa7a0.

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

index 2984eaafdf6ffa5985164b34b7ae3f0e5c99daa8..e0840b412d284c37e52acad831bdd9e76d4bca8a 100644 (file)
@@ -491,20 +491,6 @@ static int qd_check_sync(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd,
        return 1;
 }
 
-static int qd_bh_get_or_undo(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd)
-{
-       int error;
-
-       error = bh_get(qd);
-       if (!error)
-               return 0;
-
-       clear_bit(QDF_LOCKED, &qd->qd_flags);
-       slot_put(qd);
-       qd_put(qd);
-       return error;
-}
-
 static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
 {
        struct gfs2_quota_data *qd = NULL, *iter;
@@ -527,12 +513,17 @@ static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
        spin_unlock(&qd_lock);
 
        if (qd) {
-               error = qd_bh_get_or_undo(sdp, qd);
-               if (error)
+               error = bh_get(qd);
+               if (error) {
+                       clear_bit(QDF_LOCKED, &qd->qd_flags);
+                       slot_put(qd);
+                       qd_put(qd);
                        return error;
-               *qdp = qd;
+               }
        }
 
+       *qdp = qd;
+
        return 0;
 }
 
@@ -1189,8 +1180,15 @@ void gfs2_quota_unlock(struct gfs2_inode *ip)
                if (!found)
                        continue;
 
-               if (!qd_bh_get_or_undo(sdp, qd))
-                       qda[count++] = qd;
+               gfs2_assert_warn(sdp, qd->qd_change_sync);
+               if (bh_get(qd)) {
+                       clear_bit(QDF_LOCKED, &qd->qd_flags);
+                       slot_put(qd);
+                       qd_put(qd);
+                       continue;
+               }
+
+               qda[count++] = qd;
        }
 
        if (count) {