Date: Tue, 13 May 1997 15:37:32 +0100 (BST) From: Doug Rabson <dfr@nlsystems.com> To: Joerg Wunsch <joerg_wunsch@interface-business.de> Cc: FreeBSD-current users <freebsd-current@freebsd.org>, jmz@cabri.obs-besancon.fr Subject: Re: Big problem with b_blkno Message-ID: <Pine.BSF.3.95q.970513153548.464A-100000@herring.nlsystems.com> In-Reply-To: <19970513135901.QU53254@ida.interface-business.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 13 May 1997, J Wunsch wrote:
> Extract from physio():
>
> bp->b_blkno = btodb(uio->uio_offset);
>
> This block number is being passed down to the strategy routine of the
> block device drivers. No uio_offset itself is being passed down
> whatsoever. This is nonsense.
>
> The only acceptable definition of btodb() could be
>
> #define btodb(x) (x)
>
> The actual definition is in /sys/i386/include/param.h, and looks much
> more complicated. In particular, it employs a shift operation, and
> thus loses potential information from uio_offset, in the (wrong)
> assumption that all device drivers operate in DEV_BSIZE units. While
> there's no actual loss of information for device drivers that operate
> with (2^n) * DEV_BSIZE {n >= 0} as their physical block size, this
> loss of information is fatal when it comes to `odd' physical block
> sizes, e.g. with CD-ROMs. CD-ROMs can take a number of different
> block sizes, depending on the data format. The two most popular block
> sizes are 2048 (CD-ROM, not much of a problem), and 2352 (CD-DA, CD
> `raw' blocks, big problem).
>
> How to solve this problem? Define btodb() as shown above, and fix up
> all block device drivers? This looks like the cleanest way to me.
> Are there any other enlightening solutions?
>
> (Jean-Marc, this means the bogus division in wormstart() needs to stay
> until the above problem is fixed. Sigh.)
I don't know about any solutions but I think changing btodb would break
NFS since it plays silly games with the block numbers to support caching
of NFS files.
--
Doug Rabson Mail: dfr@nlsystems.com
Nonlinear Systems Ltd. Phone: +44 181 951 1891
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.95q.970513153548.464A-100000>
