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

Christoph Hellwig
2011-10-09T23:51:28Z

> 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?

Otherwise looks fine.