Commit 0cb992ed authored by Wayne Boyer's avatar Wayne Boyer Committed by James Bottomley

[SCSI] ipr: fix lun assignment and comparison

The lun value was not getting set up correctly for all devices attached to the
new 64 bit adapters.  The fix is to move the logic to earlier in the
ipr_init_res_entry routine such that the value does get set correctly for all
devices.

Then the ipr_is_same_device comparison function was using the wrong lun value
in the logic for the new adapters.  Change this to use the correct lun value.
Signed-off-by: default avatarWayne Boyer <wayneb@linux.vnet.ibm.com>
Acked-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 24d720b7
...@@ -1048,6 +1048,8 @@ static void ipr_init_res_entry(struct ipr_resource_entry *res, ...@@ -1048,6 +1048,8 @@ static void ipr_init_res_entry(struct ipr_resource_entry *res,
sizeof(res->res_path)); sizeof(res->res_path));
res->bus = 0; res->bus = 0;
memcpy(&res->dev_lun.scsi_lun, &cfgtew->u.cfgte64->lun,
sizeof(res->dev_lun.scsi_lun));
res->lun = scsilun_to_int(&res->dev_lun); res->lun = scsilun_to_int(&res->dev_lun);
if (res->type == IPR_RES_TYPE_GENERIC_SCSI) { if (res->type == IPR_RES_TYPE_GENERIC_SCSI) {
...@@ -1063,9 +1065,6 @@ static void ipr_init_res_entry(struct ipr_resource_entry *res, ...@@ -1063,9 +1065,6 @@ static void ipr_init_res_entry(struct ipr_resource_entry *res,
ioa_cfg->max_devs_supported); ioa_cfg->max_devs_supported);
set_bit(res->target, ioa_cfg->target_ids); set_bit(res->target, ioa_cfg->target_ids);
} }
memcpy(&res->dev_lun.scsi_lun, &cfgtew->u.cfgte64->lun,
sizeof(res->dev_lun.scsi_lun));
} else if (res->type == IPR_RES_TYPE_IOAFP) { } else if (res->type == IPR_RES_TYPE_IOAFP) {
res->bus = IPR_IOAFP_VIRTUAL_BUS; res->bus = IPR_IOAFP_VIRTUAL_BUS;
res->target = 0; res->target = 0;
...@@ -1116,7 +1115,7 @@ static int ipr_is_same_device(struct ipr_resource_entry *res, ...@@ -1116,7 +1115,7 @@ static int ipr_is_same_device(struct ipr_resource_entry *res,
if (res->ioa_cfg->sis64) { if (res->ioa_cfg->sis64) {
if (!memcmp(&res->dev_id, &cfgtew->u.cfgte64->dev_id, if (!memcmp(&res->dev_id, &cfgtew->u.cfgte64->dev_id,
sizeof(cfgtew->u.cfgte64->dev_id)) && sizeof(cfgtew->u.cfgte64->dev_id)) &&
!memcmp(&res->lun, &cfgtew->u.cfgte64->lun, !memcmp(&res->dev_lun.scsi_lun, &cfgtew->u.cfgte64->lun,
sizeof(cfgtew->u.cfgte64->lun))) { sizeof(cfgtew->u.cfgte64->lun))) {
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment