Re: maximum block size in buffer_head

Andrew Morton (akpm@zip.com.au)
Thu, 09 May 2002 22:38:13 -0700


David Mosberger wrote:
>
> The current Linux kernel (both 2.4.xx and 2.5.xx) declare the b_size
> member in struct buffer_head as an "unsigned short". This obviously
> limits the maximum block size to something less than 65536. This is
> bad because on some platforms (e.g., ia64), the page size can be up to
> 64KB large.
>
> Two questions:
>
> - does anyone object to widening b_size to "unsigned int"?

Sounds OK to me for 2.5.

I do have vague plans to remove b_data and to replace all instances
with buffer_data(), which would kmap the page and calculate the address.
Not that I've really thought this through...

This may lead to the introduction of a `b_offset'. Which would be 16
bits, which would snuggle in with the 16-bit b_size. But I would
scale both these values by 256 or 512, for the reasons which you
identify.

For 2.4, a 32-bit b_size would push sizeof(buffer_head) from 96 up
to 100 bytes, which does not pack as well into the slab. This would
be an intensely unpopular move. So you'd have to ifdef it. Which
makes it an ia64-only problem, which greatly improves your merge
chances ;)

> - does anyone know of any other code paths where the block
> size is assumed to fit into 16 bits?

Not off the top, but they're probably there.

-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/