OSDN Git Service

gfs2: Update rl_unlinked before releasing rgrp lock
authorBob Peterson <rpeterso@redhat.com>
Thu, 4 May 2023 18:27:42 +0000 (14:27 -0400)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 6 Jun 2023 16:35:06 +0000 (18:35 +0200)
Function gfs2_free_di was changing the rgrp lvb count of unlinked
dinodes after the lock was released. This patch moves it inside the
lock.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/rgrp.c

index 3b9b76e..9308190 100644 (file)
@@ -2584,8 +2584,8 @@ void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip)
 
        gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh);
        gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data);
-       rgrp_unlock_local(rgd);
        be32_add_cpu(&rgd->rd_rgl->rl_unlinked, -1);
+       rgrp_unlock_local(rgd);
 
        gfs2_statfs_change(sdp, 0, +1, -1);
        trace_gfs2_block_alloc(ip, rgd, ip->i_no_addr, 1, GFS2_BLKST_FREE);