diff options
-rw-r--r-- | drivers/block/nbd.c | 7 | ||||
-rw-r--r-- | include/linux/nbd.h | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 46b35f7acfde..cf1576d54363 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
@@ -623,8 +623,10 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | |||
623 | if (!nbd->sock) | 623 | if (!nbd->sock) |
624 | return -EINVAL; | 624 | return -EINVAL; |
625 | 625 | ||
626 | nbd->disconnect = 1; | ||
627 | |||
626 | nbd_send_req(nbd, &sreq); | 628 | nbd_send_req(nbd, &sreq); |
627 | return 0; | 629 | return 0; |
628 | } | 630 | } |
629 | 631 | ||
630 | case NBD_CLEAR_SOCK: { | 632 | case NBD_CLEAR_SOCK: { |
@@ -654,6 +656,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | |||
654 | nbd->sock = SOCKET_I(inode); | 656 | nbd->sock = SOCKET_I(inode); |
655 | if (max_part > 0) | 657 | if (max_part > 0) |
656 | bdev->bd_invalidated = 1; | 658 | bdev->bd_invalidated = 1; |
659 | nbd->disconnect = 0; /* we're connected now */ | ||
657 | return 0; | 660 | return 0; |
658 | } else { | 661 | } else { |
659 | fput(file); | 662 | fput(file); |
@@ -743,6 +746,8 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | |||
743 | set_capacity(nbd->disk, 0); | 746 | set_capacity(nbd->disk, 0); |
744 | if (max_part > 0) | 747 | if (max_part > 0) |
745 | ioctl_by_bdev(bdev, BLKRRPART, 0); | 748 | ioctl_by_bdev(bdev, BLKRRPART, 0); |
749 | if (nbd->disconnect) /* user requested, ignore socket errors */ | ||
750 | return 0; | ||
746 | return nbd->harderror; | 751 | return nbd->harderror; |
747 | } | 752 | } |
748 | 753 | ||
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index 4871170a04a0..ae4981ebd18e 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -41,6 +41,7 @@ struct nbd_device { | |||
41 | u64 bytesize; | 41 | u64 bytesize; |
42 | pid_t pid; /* pid of nbd-client, if attached */ | 42 | pid_t pid; /* pid of nbd-client, if attached */ |
43 | int xmit_timeout; | 43 | int xmit_timeout; |
44 | int disconnect; /* a disconnect has been requested by user */ | ||
44 | }; | 45 | }; |
45 | 46 | ||
46 | #endif | 47 | #endif |