NBD: set uninitialized devices to size 0
This fixes errors with utilities (such as LVM's vgscan) that try to scan all devices. Previously this would generate read errors when uninitialized nbd devices were scanned: # vgscan Reading all physical volumes. This may take a while... /dev/nbd0: read failed after 0 of 1024 at 0: Input/output error /dev/nbd0: read failed after 0 of 1024 at 509804544: Input/output error /dev/nbd0: read failed after 0 of 2048 at 0: Input/output error /dev/nbd1: read failed after 0 of 1024 at 509804544: Input/output error /dev/nbd1: read failed after 0 of 2048 at 0: Input/output error From now on, uninitialized nbd devices will have size zero, which prevents these errors. Signed-off-by: Paul Clements <paul.clements@steeleye.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
dff4982f5c
commit
4b86a87256
@@ -578,6 +578,9 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
|
|||||||
printk(KERN_WARNING "%s: queue cleared\n", lo->disk->disk_name);
|
printk(KERN_WARNING "%s: queue cleared\n", lo->disk->disk_name);
|
||||||
if (file)
|
if (file)
|
||||||
fput(file);
|
fput(file);
|
||||||
|
lo->bytesize = 0;
|
||||||
|
inode->i_bdev->bd_inode->i_size = 0;
|
||||||
|
set_capacity(lo->disk, 0);
|
||||||
return lo->harderror;
|
return lo->harderror;
|
||||||
case NBD_CLEAR_QUE:
|
case NBD_CLEAR_QUE:
|
||||||
/*
|
/*
|
||||||
@@ -655,14 +658,14 @@ static int __init nbd_init(void)
|
|||||||
mutex_init(&nbd_dev[i].tx_lock);
|
mutex_init(&nbd_dev[i].tx_lock);
|
||||||
init_waitqueue_head(&nbd_dev[i].active_wq);
|
init_waitqueue_head(&nbd_dev[i].active_wq);
|
||||||
nbd_dev[i].blksize = 1024;
|
nbd_dev[i].blksize = 1024;
|
||||||
nbd_dev[i].bytesize = 0x7ffffc00ULL << 10; /* 2TB */
|
nbd_dev[i].bytesize = 0;
|
||||||
disk->major = NBD_MAJOR;
|
disk->major = NBD_MAJOR;
|
||||||
disk->first_minor = i;
|
disk->first_minor = i;
|
||||||
disk->fops = &nbd_fops;
|
disk->fops = &nbd_fops;
|
||||||
disk->private_data = &nbd_dev[i];
|
disk->private_data = &nbd_dev[i];
|
||||||
disk->flags |= GENHD_FL_SUPPRESS_PARTITION_INFO;
|
disk->flags |= GENHD_FL_SUPPRESS_PARTITION_INFO;
|
||||||
sprintf(disk->disk_name, "nbd%d", i);
|
sprintf(disk->disk_name, "nbd%d", i);
|
||||||
set_capacity(disk, 0x7ffffc00ULL << 1); /* 2 TB */
|
set_capacity(disk, 0);
|
||||||
add_disk(disk);
|
add_disk(disk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user