Subject: Re: Disks with 128 or 256 bytes per sector
To: Bill Studenmund <wrstuden@zembu.com>
From: Chuck Silvers <chuq@chuq.com>
List: tech-kern
Date: 06/03/2001 16:36:19
actually, the BSD design does not prohibit devices with 512-byte sectors
and 1024-byte sectors from co-existing, but there are bugs due to people
misunderstanding how things are supposed to work.

the way it's supposed to work is that the b_blkno field of a struct buf
is always in units of DEV_BSIZE, regardless of the sector size of the device.
this works just fine for devices with a sector size of eg. (2 * DEV_BSIZE),
but somewhere along the way various bits of code were written assuming
that b_blkno is in units of the device's sector size, and it's this mismatch
in assumptions that causes problems.

the only drawbacks that I see with the existing interface are:

 (1) doesn't work so well for devices with a sector size < DEV_BSIZE.
     if someone wants to address sectors which don't fall on DEV_BSIZE
     boundaries they have to do extra buffering in the layer above the
     device driver (most likely a filesystem).
 (2) DEV_BSIZE == 512 with a signed 32-bit b_blkno gives a maximum device
     size of 1 TB, which is getting smaller every day.

the first one I can live with since devices with less than 512-byte sectors
are basically toys at this point, but the second we'll need to do something
about eventually.

-Chuck


On Fri, Jun 01, 2001 at 10:42:45AM -0700, Bill Studenmund wrote:
> It's not ffs or lfs's fault. The problem is that the BSD kernel was
> designed to only support one size of disk blocks, DEV_BSIZE. You can use
> 1k-sector disks with NetBSD, jsut right now ALL your disks have to be
> 1k-sectors. ;-)
> 
> What you can't do now is mix & match. Say have 2k scsi disks and 512 byte
> ide's.
> 
> Take care,
> 
> Bill