[Ocfs2-tools-devel] [PATCH 1/1] O2image: A potential bug in o2image.

Srinivas Eeda srinivas.eeda at oracle.com
Thu May 20 11:05:45 PDT 2010


Yes, your understanding is correct and the fix looks good to me.

Signed-off-by: Srinivas Eeda <srinivas.eeda at oracle.com>

Tristan Ye wrote:
> Currently, we're using a scaling-down strategy to alloc memory chunk
> for o2image's bitmap blocks, the unerdyling alloc function which we
> were using(ocfs2_malloc_blocks) treat channel_io_blksz as basic unit.
> which may be smaller than our OCFS2_IMAGE_BITMAP_BLOCKSIZE(512 vs 4096).
>
> As a result, the problem is we're probably going to miss some blocks to allocate
> if the actual allocsize is not a multiple of OCFS2_IMAGE_BITMAP_BLOCKSIZE.
>
> Say we have 4096 * 17(bitmap blocks) to allocate, and failed at the first attemp,
> while did succeed after trying 'allocsize >>1', actually '2048 * 17' only fills up
> 8 image bitmap blocks, therefore, we get 16 image bitmap blocks allocated eventually.
> Now one block was missed.
>
> I guess it's very likely to hit if the number of bitmap blocks is odd, am I understanding
> incorrectly?
>
> Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
> ---
>  libocfs2/image.c |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/libocfs2/image.c b/libocfs2/image.c
> index 0a1eeb8..05716c5 100644
> --- a/libocfs2/image.c
> +++ b/libocfs2/image.c
> @@ -122,6 +122,10 @@ errcode_t ocfs2_image_alloc_bitmap(ocfs2_filesys *ofs)
>  			if (allocsize == OCFS2_IMAGE_BITMAP_BLOCKSIZE)
>  				goto out;
>  			allocsize >>= 1;
> +			if (allocsize % OCFS2_IMAGE_BITMAP_BLOCKSIZE) {
> +				allocsize /= OCFS2_IMAGE_BITMAP_BLOCKSIZE;
> +				allocsize *= OCFS2_IMAGE_BITMAP_BLOCKSIZE
> +			}
>  			continue;
>  		}
>  
> @@ -138,6 +142,8 @@ errcode_t ocfs2_image_alloc_bitmap(ocfs2_filesys *ofs)
>  			indx++;
>  		}
>  		leftsize -= allocsize;
> +		if (leftsize <= allocsize);
> +			allocsize = leftsize;
>  	}
>  out:
>  	/* If allocation failed free and return error */
>   




More information about the Ocfs2-tools-devel mailing list