mirror of https://gitee.com/openkylin/linux.git
nbd: do not allow two clients at the same time
Two nbd-clients at same time are bad idea, and cause WARN_ON from nbd in 2.6.28-rc7 from sysfs_add_one. This simply prevents that from happening. To reproduce: cat /dev/zero | head -c 10000000 > /tmp/delme.fstest.fs nbd-server 9100 -l /anyone.can.connect > /tmp/delme.fstest.fs & sleep 1 nbd-client localhost 9100 /dev/nd0 & nbd-client localhost 9100 /dev/nd0 & Signed-off-by: Pavel Machek <pavel@suse.cz> Acked-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:
parent
1bcbf31337
commit
c91192d66d
|
@ -406,6 +406,7 @@ static int nbd_do_it(struct nbd_device *lo)
|
|||
ret = sysfs_create_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "nbd: sysfs_create_file failed!");
|
||||
lo->pid = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -413,6 +414,7 @@ static int nbd_do_it(struct nbd_device *lo)
|
|||
nbd_end_request(req);
|
||||
|
||||
sysfs_remove_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr);
|
||||
lo->pid = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -648,6 +650,8 @@ static int nbd_ioctl(struct block_device *bdev, fmode_t mode,
|
|||
set_capacity(lo->disk, lo->bytesize >> 9);
|
||||
return 0;
|
||||
case NBD_DO_IT:
|
||||
if (lo->pid)
|
||||
return -EBUSY;
|
||||
if (!lo->file)
|
||||
return -EINVAL;
|
||||
thread = kthread_create(nbd_thread, lo, lo->disk->disk_name);
|
||||
|
|
Loading…
Reference in New Issue