} 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;
 }
 
 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;
 
 
        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;
        /* 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);
                        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;
        }