[Ocfs2-devel] [PATCH 13/15] ocfs2: ocfs2_group_bitmap_size has to handle old volume.
Joel Becker
Joel.Becker at oracle.com
Thu Apr 1 00:37:18 PDT 2010
On Thu, Apr 01, 2010 at 12:22:56PM +0800, Tao Ma wrote:
> Joel Becker wrote:
> >On Thu, Apr 01, 2010 at 10:59:10AM +0800, Tao Ma wrote:
> >>ocfs2_group_bitmap_size has to handle the case when the
> >>volume don't have discontiguous block group support.
> >
> > NAK. We specify 256 in all cases. This doesn't hurt old code
> >because we've never used more bits. Even though our old bg_size values
> >were much larger, we never used that space because bg_bits was set to
> >the smaller value.
> No, it hurts.
> So with an old ocfs2-tools and a new kernel, the new kernel will set
> it to 256 while the old ocfs2-tools refused to work by checking
> bg_size(see
> chainalloc_process_group in libocfs2).
*facepalm*
Well, we shot ourselves in the foot. The entire point of having
the size stored is so that we can vary it and the code still works.
Consider that "validation" of bg_size a bug. The correct validation is
((bg_bits + 7) / 8) <= bg_size.
So we do need the kernel to store the old-style bg_size in order
to keep compatibility. But we can do better. First, you don't need the
supports_discontig_bg argument. You already have the superblock, just
check ocfs2_supports_discontig_bg(OCFS2_SB(sb)).
Secondly, that function needs a big fat comment.
static inline int ocfs2_group_bitmap_size(struct super_block *sb,
int suballocator)
{
int size = sb->s_blocksize -
offsetof(struct ocfs2_group_desc, bg_bitmap);
/*
* The cluster allocator uses the entire block. Suballocators have
* never used more than OCFS2_MAX_BG_BITMAP_SIZE. Unfortunately, older
* code expects bg_size set to the maximum. Thus we must keep
* bg_size as-is unless discontig_bg is enabled.
*/
if (suballocator && ocfs2_supports_discontig_bg(OCFS2_SB(sb)))
size = OCFS2_MAX_BG_BITMAP_SIZE;
return size;
}
Joel
--
Life's Little Instruction Book #450
"Don't be afraid to say, 'I need help.'"
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-devel
mailing list