> > >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)) +#else #define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb) #define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb) +#endif --- 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