diff options
-rw-r--r-- | block/bsg.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/block/bsg.c b/block/bsg.c index b413318a7c5d..933998124211 100644 --- a/block/bsg.c +++ b/block/bsg.c | |||
@@ -37,7 +37,6 @@ struct bsg_device { | |||
37 | struct list_head done_list; | 37 | struct list_head done_list; |
38 | struct hlist_node dev_list; | 38 | struct hlist_node dev_list; |
39 | atomic_t ref_count; | 39 | atomic_t ref_count; |
40 | int minor; | ||
41 | int queued_cmds; | 40 | int queued_cmds; |
42 | int done_cmds; | 41 | int done_cmds; |
43 | wait_queue_head_t wq_done; | 42 | wait_queue_head_t wq_done; |
@@ -758,9 +757,8 @@ static struct bsg_device *bsg_add_device(struct inode *inode, | |||
758 | bsg_set_block(bd, file); | 757 | bsg_set_block(bd, file); |
759 | 758 | ||
760 | atomic_set(&bd->ref_count, 1); | 759 | atomic_set(&bd->ref_count, 1); |
761 | bd->minor = iminor(inode); | ||
762 | mutex_lock(&bsg_mutex); | 760 | mutex_lock(&bsg_mutex); |
763 | hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(bd->minor)); | 761 | hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode))); |
764 | 762 | ||
765 | strncpy(bd->name, rq->bsg_dev.class_dev->class_id, sizeof(bd->name) - 1); | 763 | strncpy(bd->name, rq->bsg_dev.class_dev->class_id, sizeof(bd->name) - 1); |
766 | dprintk("bound to <%s>, max queue %d\n", | 764 | dprintk("bound to <%s>, max queue %d\n", |
@@ -770,7 +768,7 @@ static struct bsg_device *bsg_add_device(struct inode *inode, | |||
770 | return bd; | 768 | return bd; |
771 | } | 769 | } |
772 | 770 | ||
773 | static struct bsg_device *__bsg_get_device(int minor) | 771 | static struct bsg_device *__bsg_get_device(int minor, struct request_queue *q) |
774 | { | 772 | { |
775 | struct bsg_device *bd; | 773 | struct bsg_device *bd; |
776 | struct hlist_node *entry; | 774 | struct hlist_node *entry; |
@@ -778,7 +776,7 @@ static struct bsg_device *__bsg_get_device(int minor) | |||
778 | mutex_lock(&bsg_mutex); | 776 | mutex_lock(&bsg_mutex); |
779 | 777 | ||
780 | hlist_for_each_entry(bd, entry, bsg_dev_idx_hash(minor), dev_list) { | 778 | hlist_for_each_entry(bd, entry, bsg_dev_idx_hash(minor), dev_list) { |
781 | if (bd->minor == minor) { | 779 | if (bd->queue == q) { |
782 | atomic_inc(&bd->ref_count); | 780 | atomic_inc(&bd->ref_count); |
783 | goto found; | 781 | goto found; |
784 | } | 782 | } |
@@ -806,7 +804,7 @@ static struct bsg_device *bsg_get_device(struct inode *inode, struct file *file) | |||
806 | if (!bcd) | 804 | if (!bcd) |
807 | return ERR_PTR(-ENODEV); | 805 | return ERR_PTR(-ENODEV); |
808 | 806 | ||
809 | bd = __bsg_get_device(iminor(inode)); | 807 | bd = __bsg_get_device(iminor(inode), bcd->queue); |
810 | if (bd) | 808 | if (bd) |
811 | return bd; | 809 | return bd; |
812 | 810 | ||