Re: [PATCH 3/5] repair: handle memory allocation failure from blkmap_grow

Dave Chinner
2011-10-10T00:11:01Z

On Sun, Oct 09, 2011 at 07:51:26PM -0400, Christoph Hellwig wrote:
> > static blkmap_t *
> > blkmap_grow(
> > - blkmap_t **blkmapp)
> > + blkmap_t *blkmap)
> > {
> > pthread_key_t key = dblkmap_key;
> > - blkmap_t *blkmap = *blkmapp;
> > + blkmap_t *new_blkmap;
> > + int new_naexts = blkmap->naexts + 4;
> >
> > if (pthread_getspecific(key) != blkmap) {
> > key = ablkmap_key;
> > ASSERT(pthread_getspecific(key) == blkmap);
> > }
> >
> > - blkmap->naexts += 4;
> > - blkmap = realloc(blkmap, BLKMAP_SIZE(blkmap->naexts));
> > - if (blkmap == NULL)
> > - do_error(_("realloc failed in blkmap_grow\n"));
> > - *blkmapp = blkmap;
> > - pthread_setspecific(key, blkmap);
> > - return blkmap;
> > + new_blkmap = realloc(blkmap, BLKMAP_SIZE(new_naexts));
> > + if (!new_blkmap) {
> > + do_error(_("realloc failed in blkmap_grow\n"));
> > + return NULL;
> > + }
> > + blkmap->naexts = new_naexts;
>
> Why would we modify naexts in the old blkmap?

Ooops. Will fix.

--
Dave Chinner
david@fromorbit.com