Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Device-mapper Development (http://www.linux-archive.org/device-mapper-development/)
-   -   Associate HBA and storage in rdac_controller to support partitions in storage (http://www.linux-archive.org/device-mapper-development/554829-associate-hba-storage-rdac_controller-support-partitions-storage.html)

Chandra Seetharaman 07-20-2011 09:22 PM

Associate HBA and storage in rdac_controller to support partitions in storage
 
rdac hardware handler assumes that there is one-to-one relation ship
between the host and the controller w.r.t lun. IOW, it does not
support "multiple storage partitions" within a storage.

Example:
HBA1 and HBA2 see lun 0 and 1 in storage A (1)
HBA3 and HBA4 see lun 0 and 1 in storage A (2)
HBA5 and HBA6 see lun 0 and 1 in storage A (3)

luns 0 and 1 in (1), (2) and (3) are totally different.

But, rdac handler treats the lun 0s (and lun 1s) as the same when
sending a mode select to the controller, which is wrong.

This patch makes the rdac hardware handler associate HBA and the
storage w.r.t lun (and not the host itself).

Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
---
drivers/scsi/device_handler/scsi_dh_rdac.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 214d7f0..67c2c99 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -149,6 +149,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;
@@ -380,7 +381,7 @@ static void release_controller(struct kref *kref)
}

static struct rdac_controller *get_controller(u8 *serial, int index,
- char *array_name)
+ char *array_name, struct scsi_device *sdev)
{
struct rdac_controller *ctlr, *tmp;

@@ -388,7 +389,8 @@ static struct rdac_controller *get_controller(u8 *serial, int index,

list_for_each_entry(tmp, &ctlr_list, node) {
if ((memcmp(tmp->serial, serial, SERIAL_NO_LEN) == 0) &&
- (tmp->index == index)) {
+ (tmp->index == index) &&
+ (tmp->host == sdev->host)) {
kref_get(&tmp->kref);
spin_unlock(&list_lock);
return tmp;
@@ -402,6 +404,7 @@ static struct rdac_controller *get_controller(u8 *serial, int index,
memcpy(ctlr->serial, serial, SERIAL_NO_LEN);
memcpy(ctlr->array_name, array_name, ARRAY_LABEL_LEN);
ctlr->index = index;
+ ctlr->host = sdev->host;

kref_init(&ctlr->kref);
ctlr->use_ms10 = -1;
@@ -525,7 +528,8 @@ static int initialize_controller(struct scsi_device *sdev,
if (err != SCSI_DH_OK)
return err;
inq_p80 = &h->inq.p80;
- h->ctlr = get_controller(inq_p80->serial, index, array_name);
+ h->ctlr = get_controller(inq_p80->serial, index,
+ array_name, sdev);
if (!h->ctlr)
err = SCSI_DH_RES_TEMP_UNAVAIL;
}
--
1.7.1



--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

James Bottomley 07-27-2011 10:34 AM

Associate HBA and storage in rdac_controller to support partitions in storage
 
On Wed, 2011-07-20 at 14:22 -0700, Chandra Seetharaman wrote:
> rdac hardware handler assumes that there is one-to-one relation ship
> between the host and the controller w.r.t lun. IOW, it does not
> support "multiple storage partitions" within a storage.
>
> Example:
> HBA1 and HBA2 see lun 0 and 1 in storage A (1)
> HBA3 and HBA4 see lun 0 and 1 in storage A (2)
> HBA5 and HBA6 see lun 0 and 1 in storage A (3)
>
> luns 0 and 1 in (1), (2) and (3) are totally different.
>
> But, rdac handler treats the lun 0s (and lun 1s) as the same when
> sending a mode select to the controller, which is wrong.
>
> This patch makes the rdac hardware handler associate HBA and the
> storage w.r.t lun (and not the host itself).
>
> Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
> ---
> drivers/scsi/device_handler/scsi_dh_rdac.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)

This doesn't apply;

patching file drivers/scsi/device_handler/scsi_dh_rdac.c
Hunk #1 succeeded at 158 (offset 9 lines).
Hunk #2 FAILED at 381.
Hunk #3 FAILED at 389.
Hunk #4 FAILED at 403.
Hunk #5 FAILED at 526.
4 out of 5 hunks FAILED -- saving rejects to file
drivers/scsi/device_handler/scsi_dh_rdac.c.rej


it looks like there's a missing intermediate patch somewhere, can you
check scsi-misc and tell me what it is?

Thanks,

James



--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Chandra Seetharaman 07-27-2011 06:20 PM

Associate HBA and storage in rdac_controller to support partitions in storage
 
Oops. Sorry. By mistake sent an earlier version. Will send the correct
version.
On Wed, 2011-07-27 at 14:34 +0400, James Bottomley wrote:
> On Wed, 2011-07-20 at 14:22 -0700, Chandra Seetharaman wrote:
> > rdac hardware handler assumes that there is one-to-one relation ship
> > between the host and the controller w.r.t lun. IOW, it does not
> > support "multiple storage partitions" within a storage.
> >
> > Example:
> > HBA1 and HBA2 see lun 0 and 1 in storage A (1)
> > HBA3 and HBA4 see lun 0 and 1 in storage A (2)
> > HBA5 and HBA6 see lun 0 and 1 in storage A (3)
> >
> > luns 0 and 1 in (1), (2) and (3) are totally different.
> >
> > But, rdac handler treats the lun 0s (and lun 1s) as the same when
> > sending a mode select to the controller, which is wrong.
> >
> > This patch makes the rdac hardware handler associate HBA and the
> > storage w.r.t lun (and not the host itself).
> >
> > Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
> > ---
> > drivers/scsi/device_handler/scsi_dh_rdac.c | 10 +++++++---
> > 1 files changed, 7 insertions(+), 3 deletions(-)
>
> This doesn't apply;
>
> patching file drivers/scsi/device_handler/scsi_dh_rdac.c
> Hunk #1 succeeded at 158 (offset 9 lines).
> Hunk #2 FAILED at 381.
> Hunk #3 FAILED at 389.
> Hunk #4 FAILED at 403.
> Hunk #5 FAILED at 526.
> 4 out of 5 hunks FAILED -- saving rejects to file
> drivers/scsi/device_handler/scsi_dh_rdac.c.rej
>
>
> it looks like there's a missing intermediate patch somewhere, can you
> check scsi-misc and tell me what it is?
>
> Thanks,
>
> James
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Chandra Seetharaman 07-27-2011 06:22 PM

Associate HBA and storage in rdac_controller to support partitions in storage
 
rdac hardware handler assumes that there is one-to-one relation ship
between the host and the controller w.r.t lun. IOW, it does not
support "multiple storage partitions" within a storage.

Example:
HBA1 and HBA2 see lun 0 and 1 in storage A (1)
HBA3 and HBA4 see lun 0 and 1 in storage A (2)
HBA5 and HBA6 see lun 0 and 1 in storage A (3)

luns 0 and 1 in (1), (2) and (3) are totally different.

But, rdac handler treats the lun 0s (and lun 1s) as the same when
sending a mode select to the controller, which is wrong.

This patch makes the rdac hardware handler associate HBA and the
storage w.r.t lun (and not the host itself).

Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
---

diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index f57009b..27c9d65 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/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;
}


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel


All times are GMT. The time now is 05:44 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.