--- 2.4.19rc3aa2/fs/block_dev.c.~1~ Wed Jul 24 02:19:45 2002 +++ 2.4.19rc3aa2/fs/block_dev.c Wed Jul 24 02:32:43 2002 @@ -571,7 +571,12 @@ static int do_open(struct block_device * if (bdev->bd_op->open) ret = bdev->bd_op->open(inode, file); if (!ret) { - bdev->bd_openers++; + if (!bdev->bd_openers++) { + int blksize = BLOCK_SIZE; + if (file->f_flags & O_DIRECT) + blksize = get_hardsect_size(dev); + set_blocksize(dev, blksize); + } bdev->bd_inode->i_size = blkdev_size(dev); bdev->bd_inode->i_blkbits = blksize_bits(block_size(dev)); } else {