[Ocfs2-devel] [PATCH] ocfs2: Limit default local alloc size within bitmap range.
tristan
tristan.ye at oracle.com
Wed Jun 9 01:52:34 PDT 2010
Tested-by: Tristan Ye <tristan.ye at oracle.com>
Tao Ma wrote:
> In commit 6b82021b9e91cd689fdffadbcdb9a42597bbe764, we increase
> our local alloc size and calculate how much megabytes we can
> get according to group size and volume size.
> But we also need to check the maximum bits a local alloc block
> bitmap can have. With a bs=512, cs=32K, local volume with 160G,
> it calculate 96MB while the maximum local alloc size is only
> 76M. So the bitmap will overflow and corrupt the system truncate
> log file. See bug
> http://oss.oracle.com/bugzilla/show_bug.cgi?id=1262
>
> Cc: Mark Fasheh <mfasheh at suse.com>
> Signed-off-by: Tao Ma <tao.ma at oracle.com>
> ---
> fs/ocfs2/localalloc.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
> index 3d74196..ec6adbf 100644
> --- a/fs/ocfs2/localalloc.c
> +++ b/fs/ocfs2/localalloc.c
> @@ -118,6 +118,7 @@ unsigned int ocfs2_la_default_mb(struct ocfs2_super *osb)
> {
> unsigned int la_mb;
> unsigned int gd_mb;
> + unsigned int la_max_mb;
> unsigned int megs_per_slot;
> struct super_block *sb = osb->sb;
>
> @@ -182,6 +183,12 @@ unsigned int ocfs2_la_default_mb(struct ocfs2_super *osb)
> if (megs_per_slot < la_mb)
> la_mb = megs_per_slot;
>
> + /* We can't store more bits than we can in a block. */
> + la_max_mb = ocfs2_clusters_to_megabytes(osb->sb,
> + ocfs2_local_alloc_size(sb) * 8);
> + if (la_mb > la_max_mb)
> + la_mb = la_max_mb;
> +
> return la_mb;
> }
>
More information about the Ocfs2-devel
mailing list