From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Thu, 27 Jun 2013 18:43:50 +0100 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Reserve journal space for quota change in do_grow In-Reply-To: <340920540.95675196.1372351671118.JavaMail.root@redhat.com> References: <340920540.95675196.1372351671118.JavaMail.root@redhat.com> Message-ID: <1372355030.2774.12.camel@menhir> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Thanks - now in the -nmw git tree, Steve. On Thu, 2013-06-27 at 12:47 -0400, Bob Peterson wrote: > 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 > > Signed-off-by: Bob Peterson > --- > fs/gfs2/bmap.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c > index 93b5809..5e2f56f 100644 > --- a/fs/gfs2/bmap.c > +++ b/fs/gfs2/bmap.c > @@ -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; > >