diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2002-05-24 03:31:49 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-05-24 03:31:49 -0700 |
| commit | f70ca4261d1a9fa6b49f2c813798fd6bf16ce2ae (patch) | |
| tree | daf435679794276c9beb6da4147906fbe1df8947 | |
| parent | df87ea9f90375ffd2cd993f49ea9cf1e035d4615 (diff) | |
Undo block devices changes from floppy fix: incorrect.
| -rw-r--r-- | fs/block_dev.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index 21c5b08eb8a4..6d90edef1c51 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -606,7 +606,16 @@ static int do_open(struct block_device *bdev, struct inode *inode, struct file * goto out2; } bdev->bd_inode->i_size = blkdev_size(dev); - bdev->bd_inode->i_blkbits = blksize_bits(block_size(bdev)); + if (!bdev->bd_openers) { + unsigned bsize = bdev_hardsect_size(bdev); + while (bsize < PAGE_CACHE_SIZE) { + if (bdev->bd_inode->i_size & bsize) + break; + bsize <<= 1; + } + bdev->bd_block_size = bsize; + bdev->bd_inode->i_blkbits = blksize_bits(bsize); + } bdev->bd_openers++; unlock_kernel(); up(&bdev->bd_sem); |
