We need to hold i_sem while running i_size_write(). But that seems like a lot of fuss and deadlock potential. So just write the dang thing. --- fs/block_dev.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) diff -puN fs/block_dev.c~bd_set_size-i_size-fix fs/block_dev.c --- 25/fs/block_dev.c~bd_set_size-i_size-fix 2004-01-30 17:42:37.000000000 -0800 +++ 25-akpm/fs/block_dev.c 2004-01-30 17:42:46.000000000 -0800 @@ -525,7 +525,8 @@ EXPORT_SYMBOL(check_disk_change); static void bd_set_size(struct block_device *bdev, loff_t size) { unsigned bsize = bdev_hardsect_size(bdev); - i_size_write(bdev->bd_inode, size); + + bdev->bd_inode->i_size = size; while (bsize < PAGE_CACHE_SIZE) { if (size & bsize) break; _