tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: blocksizes

> >To translate file system block size (i.e. unit of fragment size)
> >into raw I/O size, we can ignore fsbtodb.
> I have now committed changes to msdofs, ext2fs and ffs to support
> disks with non-512-byte sectors.
> Part of that change is a common function to query disk and sector
> sizes that replaces individual ioctl queries. Unlike the latter
> this will fail if the ioctls fail. The old code just assumed that
> DEV_BSIZE was correct.

diff -u src/sys/ufs/ffs/fs.h:1.54 src/sys/ufs/ffs/fs.h:1.55
@@ -599,8 +599,13 @@
  * Turn file system block numbers into disk block addresses.
  * This maps file system blocks to device size blocks.
+#if defined (_KERNEL)
+#define        fsbtodb(fs, b)  ((b) << ((fs)->fs_fshift - DEV_BSHIFT))
+#define        dbtofsb(fs, b)  ((b) >> ((fs)->fs_fshift - DEV_BSHIFT))
 #define        fsbtodb(fs, b)  ((b) << (fs)->fs_fsbtodb)
 #define        dbtofsb(fs, b)  ((b) >> (fs)->fs_fsbtodb)

I doubt this would work properly. Isn't it better to have new macros
for raw I/O size and to replace old ones with them for bread(9)
or blkno etc?

I think fsbtodb()/dbtofsb() should be left as is because
they are for the "FFS disk block size stored in superblock"
which is still used in dinode and it could be different from
raw I/O size.

> Can you please test with your 2K MO?

It's not easy to test it without working newfs(8) command.
(if you need hardware I can send the drive and media..)

> N.B. newfs doesn't yet know how to deduce sector sizes, you need
> to use the -S option.

newfs(8) doesn't work even with -S 2048 option.
(probably it tries to write data at offset not sectorsize aligned)
Izumi Tsutsui

Home | Main Index | Thread Index | Old Index