From: Paul Clements Ensure that nbd and the block layer agree about device block sizes and total device sizes. drivers/block/nbd.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff -puN drivers/block/nbd.c~nbd-use-set_blocksize drivers/block/nbd.c --- 25/drivers/block/nbd.c~nbd-use-set_blocksize 2003-07-06 15:00:41.000000000 -0700 +++ 25-akpm/drivers/block/nbd.c 2003-07-06 15:00:41.000000000 -0700 @@ -588,18 +588,22 @@ static int nbd_ioctl(struct inode *inode } return error; case NBD_SET_BLKSIZE: - if ((arg & (arg-1)) || (arg < 512) || (arg > PAGE_SIZE)) - return -EINVAL; lo->blksize = arg; - lo->bytesize &= ~(lo->blksize-1); + lo->bytesize &= ~(lo->blksize-1); + inode->i_bdev->bd_inode->i_size = lo->bytesize; + set_blocksize(inode->i_bdev, lo->blksize); set_capacity(lo->disk, lo->bytesize >> 9); return 0; case NBD_SET_SIZE: - lo->bytesize = arg & ~(lo->blksize-1); + lo->bytesize = arg & ~(lo->blksize-1); + inode->i_bdev->bd_inode->i_size = lo->bytesize; + set_blocksize(inode->i_bdev, lo->blksize); set_capacity(lo->disk, lo->bytesize >> 9); return 0; case NBD_SET_SIZE_BLOCKS: lo->bytesize = ((u64) arg) * lo->blksize; + inode->i_bdev->bd_inode->i_size = lo->bytesize; + set_blocksize(inode->i_bdev, lo->blksize); set_capacity(lo->disk, lo->bytesize >> 9); return 0; case NBD_DO_IT: _