Tested-by: Tristan Ye <[email protected]> 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 <[email protected]> > Signed-off-by: Tao Ma <[email protected]> > --- > 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; > } >
_______________________________________________ Ocfs2-devel mailing list [email protected] http://oss.oracle.com/mailman/listinfo/ocfs2-devel
