On Tue, Sep 21, 2010 at 04:36:19PM +0100, Steven Whitehouse wrote:
> Hi,
>
> On Tue, 2010-09-21 at 09:58 -0500, Benjamin Marzinski wrote:
> > Some of the functions in GFS2 were not reserving space in the transaction for
> > the resource group header and the resource groups bitblocks that get added
> > when you do allocation. GFS2 now makes sure to reserve space for the
> > resource group header and either all the bitblocks in the resource group, or
> > one for each block that it may allocate, whichever is smaller.
> >
> > Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
> > ---
> > fs/gfs2/aops.c | 3 +++
> > fs/gfs2/bmap.c | 2 +-
> > fs/gfs2/file.c | 5 ++++-
> > fs/gfs2/quota.c | 2 ++
> > 4 files changed, 10 insertions(+), 2 deletions(-)
> >
> > Index: gfs2-2.6-nmw/fs/gfs2/aops.c
> > ================================================== =================
> > --- gfs2-2.6-nmw.orig/fs/gfs2/aops.c
> > +++ gfs2-2.6-nmw/fs/gfs2/aops.c
> > @@ -663,6 +663,9 @@ static int gfs2_write_begin(struct file
> > rblocks += RES_STATFS + RES_QUOTA;
> > if (&ip->i_inode == sdp->sd_rindex)
> > rblocks += 2 * RES_STATFS;
> > + if (alloc_required)
> > + rblocks += (al->al_requested < al->al_rgd->rd_length)?
> > + al->al_requested + 1 : al->al_rgd->rd_length;
> Since this bit seems to occur multiple times, perhaps you could turn it
> into an inline function with a suitably explanatory name? That should
> make it a bit easier to understand what it is doing,