gfs2: Add extra error check in alloc_dinode
authorAndreas Gruenbacher <agruenba@redhat.com>
Wed, 2 Nov 2022 22:57:50 +0000 (23:57 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Fri, 2 Dec 2022 14:58:00 +0000 (15:58 +0100)
We have reserved the number of blocks we want to allocate, so the actual
allocation isn't expected to fail.  Nevertheless, make the code behave
correctly even when things go wrong.

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

index 04a2015..41fa69c 100644 (file)
@@ -403,12 +403,15 @@ static int alloc_dinode(struct gfs2_inode *ip, u32 flags, unsigned *dblocks)
                goto out_ipreserv;
 
        error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1, &ip->i_generation);
+       if (error)
+               goto out_trans_end;
+
        ip->i_no_formal_ino = ip->i_generation;
        ip->i_inode.i_ino = ip->i_no_addr;
        ip->i_goal = ip->i_no_addr;
 
+out_trans_end:
        gfs2_trans_end(sdp);
-
 out_ipreserv:
        gfs2_inplace_release(ip);
 out_quota: