]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
gfs2: switch to lockref_init(..., 1)
authorAndreas Gruenbacher <agruenba@redhat.com>
Thu, 30 Jan 2025 13:56:22 +0000 (14:56 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 7 Feb 2025 09:27:25 +0000 (10:27 +0100)
In qd_alloc(), initialize the lockref count to 1 to cover the common
case.  Compensate for that in gfs2_quota_init() by adjusting the count
back down to 0; this only occurs when mounting the filesystem rw.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Link: https://lore.kernel.org/r/20250130135624.1899988-3-agruenba@redhat.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/gfs2/quota.c

index 58bc5013ca49ccbffd8a120eb1a1b5918ec55275..6ae529a5388bc8ee271cad23ee85a00595ff87e5 100644 (file)
@@ -236,7 +236,7 @@ static struct gfs2_quota_data *qd_alloc(unsigned hash, struct gfs2_sbd *sdp, str
                return NULL;
 
        qd->qd_sbd = sdp;
-       lockref_init(&qd->qd_lockref, 0);
+       lockref_init(&qd->qd_lockref, 1);
        qd->qd_id = qid;
        qd->qd_slot = -1;
        INIT_LIST_HEAD(&qd->qd_lru);
@@ -297,7 +297,6 @@ static int qd_get(struct gfs2_sbd *sdp, struct kqid qid,
        spin_lock_bucket(hash);
        *qdp = qd = gfs2_qd_search_bucket(hash, sdp, qid);
        if (qd == NULL) {
-               new_qd->qd_lockref.count++;
                *qdp = new_qd;
                list_add(&new_qd->qd_list, &sdp->sd_quota_list);
                hlist_bl_add_head_rcu(&new_qd->qd_hlist, &qd_hash_table[hash]);
@@ -1450,6 +1449,7 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
                        if (qd == NULL)
                                goto fail_brelse;
 
+                       qd->qd_lockref.count = 0;
                        set_bit(QDF_CHANGE, &qd->qd_flags);
                        qd->qd_change = qc_change;
                        qd->qd_slot = slot;