GFS2: Reserve journal space for quota change in do_grow
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 GFS2: Reserve journal space for quota change in do_grow
Hi,
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.
Regards,
Bob Peterson
Red Hat File Systems
--- fs/gfs2/bmap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/gfs2/bmap.c +3 -1
@@ -1232,7 +1232,9 @@ static int do_grow(struct inode *inode, u64 size) unstuff =1 ; } - error =gfs2_trans_begin (sdp,RES_DINODE +RES_STATFS +RES_RG_BIT ,0 ); + error =gfs2_trans_begin (sdp,RES_DINODE +RES_STATFS +RES_RG_BIT + + (sdp->sd_args.ar_quota ==GFS2_QUOTA_OFF ? +0 :RES_QUOTA ),0 );if (error) goto do_grow_release;
PATCH 1/1 GFS2: Reserve journal space for quota change in do_grow
Hi,
Thanks - now in the -nmw git tree,
Steve.
Quoted 35 lines · Bob Peterson
Hi,
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.Regards,
Bob Peterson
Red Hat File SystemsSigned-off-by Bob Peterson <[email protected]>--- fs/gfs2/bmap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)fs/gfs2/bmap.c +3
-1@@ -1232,7 +1232,9 @@ static int do_grow(struct inode *inode, u64 size) unstuff =1 ; } - error =gfs2_trans_begin (sdp,RES_DINODE +RES_STATFS +RES_RG_BIT ,0 ); + error =gfs2_trans_begin (sdp,RES_DINODE +RES_STATFS +RES_RG_BIT + + (sdp->sd_args.ar_quota ==GFS2_QUOTA_OFF ? +0 :RES_QUOTA ),0 );if (error) goto do_grow_release;