On Thu, Jan 21, 2010 at 10:30:20PM +0000, Michael van Elst wrote:
 > IMHO there need to be three different ways to specify block
 > offsets and block counts:
 > 
 > 1. in units of blocks of the physical device
 > 2. in units of blocks of DEV_BSIZE bytes
 > 3. in bytes

Don't forget: 4. in units of the filesystem block size...

 > and we need to establish what units are used where.

IM (fairly strong) O everything should be kept in byte counts, and
never block counts because if you have more than one unit in use it is
far too easy to accidentally mix them or provide the wrong one, and
because they're all the same language-level type there's little hope
of detecting such problems automatically.

Furthermore, Murphy's Law dictates that in any particular place the
count you are given is frequently not in the units you need to give
something else, and then you end up converting back and forth all over
everywhere. This serves no purpose and tends to obfuscate the code
base.

Since in practice nothing can be larger than the maximum value of
off_t anyway, and all counts should be getting carried around as
64-bit values, using byte counts instead of block counts does not
change the maximum addressable size of anything and therefore has no
particular downside.

Things should only be converted to block counts right when talking to
hardware, in which case the correct size to use is immediately
available, or right when reporting to userlevel using interfaces
standardized that way, in which case ditto.

 > The necessary changes are rather small. In particular, dkwedge_info needs
 > to be extended to keep track of the physical sector size so that the dk
 > driver can do the transformations.

The physical sector size should be available to callers (just not part
of the API/ABI) so this ought to be done regardless.

-- 
David A. Holland
dholl...@netbsd.org

Reply via email to