From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 12 Aug 2011 09:53:26 +0100 Subject: [Cluster-devel] [PATCH] gfs2_grow: Fix gfs2_grow when only one RG is present In-Reply-To: <1313091445-7627-1-git-send-email-cmaiolino@redhat.com> References: <1313091445-7627-1-git-send-email-cmaiolino@redhat.com> Message-ID: <1313139206.2704.13.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, On Thu, 2011-08-11 at 16:37 -0300, Carlos Maiolino wrote: > If there is only one RG in the filesystem > gfs2_grow will make a subtraction using a > null pointer to check the RG size returning > a invalide RG size value. > This patch avoid this substraction if there is > only one RG in the filesystem. > --- > gfs2/mkfs/main_grow.c | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletions(-) > > diff --git a/gfs2/mkfs/main_grow.c b/gfs2/mkfs/main_grow.c > index 0eca396..d7a81a3 100644 > --- a/gfs2/mkfs/main_grow.c > +++ b/gfs2/mkfs/main_grow.c > @@ -133,7 +133,11 @@ static void figure_out_rgsize(struct gfs2_sbd *sdp, unsigned int *orgsize) > r1 = osi_list_entry(head->next->next, struct rgrp_list, list); > r2 = osi_list_entry(head->next->next->next, struct rgrp_list, list); > > - *orgsize = r2->ri.ri_addr - r1->ri.ri_addr; > + if(r2->ri.ri_addr){ > + *orgsize = r2->ri.ri_addr - r1->ri.ri_addr; > + }else{ > + *orgsize = r1->ri.ri_addr; > + } > } > > /** If this is trying to figure out the length of the rgrp, then it doesn't look quite right to me... ri_addr is the location of the rgrp header on disk, which is fair enough. However when you have only a single rgrp, the size should be something like ri_length + ri_data since ri_length is the size of the rgrp header itself and ri_data is the number of data blocks. The result may have to be suitably aligned in order to match what mkfs would do. Also, the advantage of computing it like that is that only a single rgrp is needed, so that the case of using two and subtracting the two starting addresses can go away then making the code rather simpler, Steve.