misc. nbd cleanups/fixes
Subsystems (2)
PATCH 1/1 misc. nbd cleanups/fixes
Andrew,
here are two nbd patches to apply to 2.5.74-mm2 after two of the previous patches (from Lou Langholtz) are reverted:
nbd-ioctl-compat.patch (patch 6)
nbd-locking-fixes.patch (patch 7)
I'm fine with leaving the first 5 patches of his in there.
The two attached patches are:
1) nbd-remove_open_release.diff - remove the unneeded nbd_open and nbd_release functions
2) nbd-block_layer_compat.diff - ensure that nbd and the block layer agree about device block sizes and total device sizes
and should be applied in this order.
Thanks,
Paul
drivers/block/nbd.c renamed from drivers/block/nbd.c.MINUS_LL +2 -33
@@ -77,8 +77,6 @@ #define dprintk(flags, fmt...) do { \ if (debugflags & (flags)) printk(KERN_DEBUG fmt); \ } while (0) -#define DBG_OPEN 0x0001 -#define DBG_RELEASE 0x0002#define DBG_IOCTL 0x0004#define DBG_INIT 0x0010#define DBG_EXIT 0x0020
@@ -521,33 +519,6 @@ static void do_nbd_request(request_queuereturn ; } -static int nbd_open (struct inode *inode,struct file *file) -{ -struct nbd_device *lo = inode->i_bdev->bd_disk->private_data; - -dprintk (DBG_OPEN ,"%s: nbd_open refcnt=%d\n" , lo->disk->disk_name, - lo->refcnt); - lo->refcnt++; -return 0 ; -} - -static int nbd_release (struct inode *inode,struct file *file) -{ -struct nbd_device *lo = inode->i_bdev->bd_disk->private_data; - -#ifdef PARANOIA -if (lo->refcnt <=0 ) { -printk (KERN_ALERT "%s: nbd_release: refcount(%d) <= 0\n" , - lo->disk->disk_name, lo->refcnt); -BUG (); - } -#endif - lo->refcnt--; -dprintk (DBG_RELEASE ,"%s: nbd_release: refcnt=%d\n" , - lo->disk->disk_name, lo->refcnt); -return 0 ; -} -static int nbd_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg) {
@@ -555,6 +526,8 @@ static int nbd_ioctl(struct inode *inodeint error;struct request sreq ; +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ;#ifdef PARANOIA BUG_ON (lo->magic !=LO_MAGIC );#endif
@@ -562,8 +535,6 @@ static int nbd_ioctl(struct inode *inodedprintk (DBG_IOCTL ,"%s: nbd_ioctl cmd=%s(0x%x) arg=%lu\n" , lo->disk->disk_name,ioctl_cmd_to_ascii (cmd), cmd, arg); -if (!capable (CAP_SYS_ADMIN )) -return -EPERM ;switch (cmd) {case NBD_DISCONNECT :printk (KERN_INFO "%s: NBD_DISCONNECT\n" , lo->disk->disk_name);
@@ -678,8 +649,6 @@ static int nbd_ioctl(struct inode *inodestatic struct block_device_operations nbd_fops = { .owner =THIS_MODULE , - .open = nbd_open, - .release = nbd_release, .ioctl = nbd_ioctl, };
drivers/block/nbd.c renamed from drivers/block/nbd.c.MINUS_OPEN_RELEASE +8 -2
@@ -591,15 +591,21 @@ static int nbd_ioctl(struct inode *inodeif ((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; + inode->i_bdev->bd_block_size = 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; + inode->i_bdev->bd_block_size = 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; + inode->i_bdev->bd_block_size = lo->blksize;set_capacity (lo->disk, lo->bytesize >>9 );return 0 ;case NBD_DO_IT :
Quoted 4 lines · Paul Clements
The two attached patches are:
1) nbd-remove_open_release.diff - remove the unneeded
nbd_openandnbd_releasefunctions
Please remove the unneeded ->refcnt member as well.
Quoted 2 lines
2) nbd-block_layer_compat.diff - ensure that nbd and the block layer agree about device block sizes and total device sizes
Use set_blocksize, please.
Also, please split up your patches further. The Linux (Linus?) standard is one patch per email... Also, attachments are discouraged, though not a "no no" because of various broken corporate email systems...
Jeff
Quoted 7 lines · Jeff Garzik
Quoted 4 lines · Paul Clements
The two attached patches are:
1) nbd-remove_open_release.diff - remove the unneeded
nbd_openandnbd_releasefunctionsPlease remove the unneeded ->refcnt member as well.
Yep, I forgot to do that...new patch on the way...
Quoted 4 lines
Quoted 2 lines
2) nbd-block_layer_compat.diff - ensure that nbd and the block layer agree about device block sizes and total device sizes
Use
set_blocksize, please.
OK, I've done that in this next patch, also on the way...
Quoted 3 lines
Also, please split up your patches further. The Linux (Linus?) standard is one patch per email... Also, attachments are discouraged, though not a "no no" because of various broken corporate email systems...
OK, thanks...
--
Paul