From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 21 Dec 2012 09:40:29 +0000 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Reset rd_last_alloc when it reaches the end of the rgrp In-Reply-To: <1960816442.67279605.1356027784357.JavaMail.root@redhat.com> References: <1960816442.67279605.1356027784357.JavaMail.root@redhat.com> Message-ID: <1356082829.2724.0.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, Both patches are now queued for the -nmw tree. Thanks, Steve. On Thu, 2012-12-20 at 13:23 -0500, Bob Peterson wrote: > Hi, > > In function rg_mblk_search, it's searching for multiple blocks in > a given state (e.g. "free"). If there's an active block reservation > its goal is the next free block of that. If the resource group > contains the dinode's goal block, that's used for the search. But > if neither is the case, it uses the rgrp's last allocated block. > That way, consecutive allocations appear after one another on media. > The problem comes in when you hit the end of the rgrp; it would never > start over and search from the beginning. This became a problem, > since if you deleted all the files and data from the rgrp, it would > never start over and find free blocks. So it had to keep searching > further out on the media to allocate blocks. This patch resets the > rd_last_alloc after it does an unsuccessful search at the end of > the rgrp. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson > --- > fs/gfs2/rgrp.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index db2c423..7e668e0 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -1428,6 +1428,9 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, > rs->rs_free = extlen; > rs->rs_inum = ip->i_no_addr; > rs_insert(ip); > + } else { > + if (goal == rgd->rd_last_alloc + rgd->rd_data0) > + rgd->rd_last_alloc = 0; > } > } > >