On Wednesday, January 31, 2007 1:49 PM, James Bottomley wrote: > Yes, I missed that. However, the mf (SCSIIORequest_t) comes back with > the 8 byte luns, couldn't you just run vdevice->lun through > int_to_scsilun and compare on that? > > I'm really reluctant to export the lun to int lossy transform > because it > will encourage bad uses. I've removed usage of scsilun_to_int. Now I use int_to_scsilun to convert vdevice->lun, then added a new function mptscsih_cmp_scsilun which compares the two luns. This applies over all the previous patchs I posted this week. Signed-off-by: Eric Moore <Eric.Moore@xxxxxxx> diff -uarpN b/drivers/message/fusion/mptscsih.c a/drivers/message/fusion/mptscsih.c --- b/drivers/message/fusion/mptscsih.c 2007-01-27 19:09:00.000000000 -0700 +++ a/drivers/message/fusion/mptscsih.c 2007-01-31 15:22:34.000000000 -0700 @@ -996,6 +996,26 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOS } /* + * mptscsih_cmp_scsilun - compare two luns, lun1 and lun2 + * @lun1: 1st lun + * @lun2: 2nd lun + * + * Returns: zero, if they compare, or 1 when it doesn't + * + */ +static int +mptscsih_cmp_scsilun(struct scsi_lun * lun1, struct scsi_lun * lun2) +{ + int i; + + for (i = 0; i < 8 ; i++) + if (lun1->scsi_lun[i] != lun2->scsi_lun[i]) + return 1; + + return 0; +} + +/* * mptscsih_search_running_cmds - Delete any commands associated * with the specified target and lun. Function called only * when a lun is disable by mid-layer. @@ -1016,7 +1036,7 @@ mptscsih_search_running_cmds(MPT_SCSI_HO int ii; int max = hd->ioc->req_depth; struct scsi_cmnd *sc; - int lun; + struct scsi_lun lun; dsprintk((KERN_INFO MYNAM ": search_running channel %d id %d lun %d max %d\n", vdevice->vtarget->channel, vdevice->vtarget->id, vdevice->lun, max)); @@ -1027,13 +1047,15 @@ mptscsih_search_running_cmds(MPT_SCSI_HO mf = (SCSIIORequest_t *)MPT_INDEX_2_MFPTR(hd->ioc, ii); if (mf == NULL) continue; - lun = scsilun_to_int((struct scsi_lun *)mf->LUN); - dsprintk(( "search_running: found (sc=%p, mf = %p) chanel %d id %d, lun %d \n", - hd->ScsiLookup[ii], mf, mf->Bus, mf->TargetID, lun)); + int_to_scsilun(vdevice->lun, &lun); if ((mf->Bus != vdevice->vtarget->channel) || (mf->TargetID != vdevice->vtarget->id) || - (lun != vdevice->lun)) + mptscsih_cmp_scsilun(&lun, + (struct scsi_lun *)mf->LUN)) continue; + dsprintk(( "search_running: found (sc=%p, mf = %p) " + "channel %d id %d, lun %d \n", hd->ScsiLookup[ii], + mf, mf->Bus, mf->TargetID, vdevice->lun)); /* Cleanup */ - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html