diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2014-03-05 20:41:36 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2014-04-01 23:19:10 -0400 |
commit | e25115786ee540fc428a14872ebd4f56252aba32 (patch) | |
tree | deb23dba308e9161e859284641c2b9825a5eb456 /drivers | |
parent | 09aaacf02a3e88870ed5cad038a5bc822c947904 (diff) |
switch nbd to sockfd_lookup/sockfd_put
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/nbd.c | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 55298db36b2d..3a70ea2f7cd6 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
@@ -630,37 +630,29 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | |||
630 | } | 630 | } |
631 | 631 | ||
632 | case NBD_CLEAR_SOCK: { | 632 | case NBD_CLEAR_SOCK: { |
633 | struct file *file; | 633 | struct socket *sock = nbd->sock; |
634 | |||
635 | nbd->sock = NULL; | 634 | nbd->sock = NULL; |
636 | file = nbd->file; | ||
637 | nbd->file = NULL; | ||
638 | nbd_clear_que(nbd); | 635 | nbd_clear_que(nbd); |
639 | BUG_ON(!list_empty(&nbd->queue_head)); | 636 | BUG_ON(!list_empty(&nbd->queue_head)); |
640 | BUG_ON(!list_empty(&nbd->waiting_queue)); | 637 | BUG_ON(!list_empty(&nbd->waiting_queue)); |
641 | kill_bdev(bdev); | 638 | kill_bdev(bdev); |
642 | if (file) | 639 | if (sock) |
643 | fput(file); | 640 | sockfd_put(sock); |
644 | return 0; | 641 | return 0; |
645 | } | 642 | } |
646 | 643 | ||
647 | case NBD_SET_SOCK: { | 644 | case NBD_SET_SOCK: { |
648 | struct file *file; | 645 | struct socket *sock; |
649 | if (nbd->file) | 646 | int err; |
647 | if (nbd->sock) | ||
650 | return -EBUSY; | 648 | return -EBUSY; |
651 | file = fget(arg); | 649 | sock = sockfd_lookup(arg, &err); |
652 | if (file) { | 650 | if (sock) { |
653 | struct inode *inode = file_inode(file); | 651 | nbd->sock = sock; |
654 | if (S_ISSOCK(inode->i_mode)) { | 652 | if (max_part > 0) |
655 | nbd->file = file; | 653 | bdev->bd_invalidated = 1; |
656 | nbd->sock = SOCKET_I(inode); | 654 | nbd->disconnect = 0; /* we're connected now */ |
657 | if (max_part > 0) | 655 | return 0; |
658 | bdev->bd_invalidated = 1; | ||
659 | nbd->disconnect = 0; /* we're connected now */ | ||
660 | return 0; | ||
661 | } else { | ||
662 | fput(file); | ||
663 | } | ||
664 | } | 656 | } |
665 | return -EINVAL; | 657 | return -EINVAL; |
666 | } | 658 | } |
@@ -697,12 +689,12 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | |||
697 | 689 | ||
698 | case NBD_DO_IT: { | 690 | case NBD_DO_IT: { |
699 | struct task_struct *thread; | 691 | struct task_struct *thread; |
700 | struct file *file; | 692 | struct socket *sock; |
701 | int error; | 693 | int error; |
702 | 694 | ||
703 | if (nbd->pid) | 695 | if (nbd->pid) |
704 | return -EBUSY; | 696 | return -EBUSY; |
705 | if (!nbd->file) | 697 | if (!nbd->sock) |
706 | return -EINVAL; | 698 | return -EINVAL; |
707 | 699 | ||
708 | mutex_unlock(&nbd->tx_lock); | 700 | mutex_unlock(&nbd->tx_lock); |
@@ -731,15 +723,15 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | |||
731 | if (error) | 723 | if (error) |
732 | return error; | 724 | return error; |
733 | sock_shutdown(nbd, 0); | 725 | sock_shutdown(nbd, 0); |
734 | file = nbd->file; | 726 | sock = nbd->sock; |
735 | nbd->file = NULL; | 727 | nbd->sock = NULL; |
736 | nbd_clear_que(nbd); | 728 | nbd_clear_que(nbd); |
737 | dev_warn(disk_to_dev(nbd->disk), "queue cleared\n"); | 729 | dev_warn(disk_to_dev(nbd->disk), "queue cleared\n"); |
738 | kill_bdev(bdev); | 730 | kill_bdev(bdev); |
739 | queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue); | 731 | queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue); |
740 | set_device_ro(bdev, false); | 732 | set_device_ro(bdev, false); |
741 | if (file) | 733 | if (sock) |
742 | fput(file); | 734 | sockfd_put(sock); |
743 | nbd->flags = 0; | 735 | nbd->flags = 0; |
744 | nbd->bytesize = 0; | 736 | nbd->bytesize = 0; |
745 | bdev->bd_inode->i_size = 0; | 737 | bdev->bd_inode->i_size = 0; |
@@ -875,9 +867,7 @@ static int __init nbd_init(void) | |||
875 | 867 | ||
876 | for (i = 0; i < nbds_max; i++) { | 868 | for (i = 0; i < nbds_max; i++) { |
877 | struct gendisk *disk = nbd_dev[i].disk; | 869 | struct gendisk *disk = nbd_dev[i].disk; |
878 | nbd_dev[i].file = NULL; | ||
879 | nbd_dev[i].magic = NBD_MAGIC; | 870 | nbd_dev[i].magic = NBD_MAGIC; |
880 | nbd_dev[i].flags = 0; | ||
881 | INIT_LIST_HEAD(&nbd_dev[i].waiting_queue); | 871 | INIT_LIST_HEAD(&nbd_dev[i].waiting_queue); |
882 | spin_lock_init(&nbd_dev[i].queue_lock); | 872 | spin_lock_init(&nbd_dev[i].queue_lock); |
883 | INIT_LIST_HEAD(&nbd_dev[i].queue_head); | 873 | INIT_LIST_HEAD(&nbd_dev[i].queue_head); |