--- 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 {