X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=fs%2Fblock_dev.c;h=235b5042672e9f15cd137c22965eaa3aae9f3f61;hb=4f6a49de64fd1b1dba5229c02047376da7cf24fd;hp=3b8963e228a1ba82c0ac117d3a00892fc6b83abf;hpb=c23010ffb20acb02a1d41dc025131609916ed633;p=linux-2.6-microblaze.git diff --git a/fs/block_dev.c b/fs/block_dev.c index 3b8963e228a1..235b5042672e 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -130,7 +130,15 @@ EXPORT_SYMBOL(truncate_bdev_range); static void set_init_blocksize(struct block_device *bdev) { - bdev->bd_inode->i_blkbits = blksize_bits(bdev_logical_block_size(bdev)); + unsigned int bsize = bdev_logical_block_size(bdev); + loff_t size = i_size_read(bdev->bd_inode); + + while (bsize < PAGE_SIZE) { + if (size & bsize) + break; + bsize <<= 1; + } + bdev->bd_inode->i_blkbits = blksize_bits(bsize); } int set_blocksize(struct block_device *bdev, int size)