From eec4589b7d4d88c75ce7601e50d1b980339262a1 Mon Sep 17 00:00:00 2001 From: Chandra Seetharaman Date: Wed, 27 Jul 2011 11:22:56 -0700 Subject: [PATCH] --- yaml --- r: 261716 b: refs/heads/master c: d6857595394f1fa5c5752eae9bb6045c067fa41e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/scsi/device_handler/scsi_dh_rdac.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 9332052c6632..6f466d2846ad 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f170c684b55cb8d3bab55b1fb8fa812778d551f2 +refs/heads/master: d6857595394f1fa5c5752eae9bb6045c067fa41e diff --git a/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c b/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c index f57009b348d6..27c9d65d54a9 100644 --- a/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c +++ b/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c @@ -158,6 +158,7 @@ struct rdac_controller { } mode_select; u8 index; u8 array_name[ARRAY_LABEL_LEN]; + struct Scsi_Host *host; spinlock_t ms_lock; int ms_queued; struct work_struct ms_work; @@ -370,7 +371,7 @@ static void release_controller(struct kref *kref) } static struct rdac_controller *get_controller(int index, char *array_name, - u8 *array_id) + u8 *array_id, struct scsi_device *sdev) { struct rdac_controller *ctlr, *tmp; @@ -378,7 +379,8 @@ static struct rdac_controller *get_controller(int index, char *array_name, list_for_each_entry(tmp, &ctlr_list, node) { if ((memcmp(tmp->array_id, array_id, UNIQUE_ID_LEN) == 0) && - (tmp->index == index)) { + (tmp->index == index) && + (tmp->host == sdev->host)) { kref_get(&tmp->kref); spin_unlock(&list_lock); return tmp; @@ -391,6 +393,7 @@ static struct rdac_controller *get_controller(int index, char *array_name, /* initialize fields of controller */ memcpy(ctlr->array_id, array_id, UNIQUE_ID_LEN); ctlr->index = index; + ctlr->host = sdev->host; memcpy(ctlr->array_name, array_name, ARRAY_LABEL_LEN); kref_init(&ctlr->kref); @@ -513,7 +516,7 @@ static int initialize_controller(struct scsi_device *sdev, index = 0; else index = 1; - h->ctlr = get_controller(index, array_name, array_id); + h->ctlr = get_controller(index, array_name, array_id, sdev); if (!h->ctlr) err = SCSI_DH_RES_TEMP_UNAVAIL; }