aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/bmap.c
diff options
context:
space:
mode:
authorBob Peterson <rpeterso@redhat.com>2013-06-27 12:47:51 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2013-06-27 13:16:27 -0400
commita01aedfe21637c965a7046271fedfdd681eba646 (patch)
tree68e2113fc6457a7ff467ab84f5968f863dddd864 /fs/gfs2/bmap.c
parent6a98c333edd0ada67e96a5dbd0445808147833f7 (diff)
GFS2: Reserve journal space for quota change in do_grow
If a GFS2 file system is mounted with quotas and a file is grown in such a way that its free blocks for the allocation are represented in a secondary bitmap, GFS2 ran out of blocks in the transaction. That resulted in "fatal: assertion "tr->tr_num_buf <= tr->tr_blocks". This patch reserves extra blocks for the quota change so the transaction has enough space. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/bmap.c')
-rw-r--r--fs/gfs2/bmap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 93b5809c20bb..5e2f56fccf6b 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -1232,7 +1232,9 @@ static int do_grow(struct inode *inode, u64 size)
1232 unstuff = 1; 1232 unstuff = 1;
1233 } 1233 }
1234 1234
1235 error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT, 0); 1235 error = gfs2_trans_begin(sdp, RES_DINODE + RES_STATFS + RES_RG_BIT +
1236 (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF ?
1237 0 : RES_QUOTA), 0);
1236 if (error) 1238 if (error)
1237 goto do_grow_release; 1239 goto do_grow_release;
1238 1240