Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 914c2d8e authored by Moore, Eric's avatar Moore, Eric Committed by James Bottomley
Browse files

[SCSI] fusion - removing target_id/bus_id from the VirtDevice structure



It makes no sense in keeping the target_id and bus_id
in the VirtDevice structure, when it can be obtained
from the VirtTarget structure.

In addition, this patch fix's couple compilation bugs
in mptfc.c when MPT_DEBUG_FC is enabled. This
provided by Micheal Reed.

Signed-off-by: default avatarEric Moore <Eric.Moore@lsil.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent c972c70f
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -348,9 +348,6 @@ typedef struct _VirtTarget {

typedef struct _VirtDevice {
	VirtTarget		*vtarget;
	u8			 ioc_id;
	u8			 bus_id;
	u8			 target_id;
	u8			 configured_lun;
	u32			 lun;
} VirtDevice;
+8 −25
Original line number Diff line number Diff line
@@ -348,24 +348,6 @@ mptfc_generate_rport_ids(FCDevicePage0_t *pg0, struct fc_rport_identifiers *rid)
	return 0;
}

static void
mptfc_remap_sdev(struct scsi_device *sdev, void *arg)
{
	VirtDevice		*vdev;
	VirtTarget		*vtarget;
	struct scsi_target	*starget;

	starget = scsi_target(sdev);
	if (starget->hostdata == arg) {
		vtarget = arg;
		vdev = sdev->hostdata;
		if (vdev) {
			vdev->bus_id = vtarget->bus_id;
			vdev->target_id = vtarget->target_id;
		}
	}
}

static void
mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
{
@@ -423,8 +405,6 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
				if (vtarget) {
					vtarget->target_id = pg0->CurrentTargetID;
					vtarget->bus_id = pg0->CurrentBus;
					starget_for_each_device(ri->starget,
						vtarget,mptfc_remap_sdev);
				}
				ri->remap_needed = 0;
			}
@@ -432,7 +412,7 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
				"mptfc_reg_dev.%d: %x, %llx / %llx, tid %d, "
				"rport tid %d, tmo %d\n",
					ioc->name,
					oc->sh->host_no,
					ioc->sh->host_no,
					pg0->PortIdentifier,
					pg0->WWNN,
					pg0->WWPN,
@@ -553,23 +533,26 @@ mptfc_slave_alloc(struct scsi_device *sdev)
	}

	vdev->vtarget = vtarget;
	vdev->ioc_id = hd->ioc->id;
	vdev->lun = sdev->lun;
	vdev->target_id = vtarget->target_id;
	vdev->bus_id = vtarget->bus_id;

	spin_unlock_irqrestore(&hd->ioc->fc_rport_lock,flags);

	vtarget->num_luns++;

#ifdef DMPT_DEBUG_FC
	 {
	struct mptfc_rport_info *ri;
	ri = *((struct mptfc_rport_info **)rport->dd_data);
	dfcprintk ((MYIOC_s_INFO_FMT
		"mptfc_slv_alloc.%d: num_luns %d, sdev.id %d, "
	        "CurrentTargetID %d, %x %llx %llx\n",
		ioc->name,
		hd->ioc->name,
		sdev->host->host_no,
		vtarget->num_luns,
		sdev->id, ri->pg0.CurrentTargetID,
		ri->pg0.PortIdentifier, ri->pg0.WWPN, ri->pg0.WWNN));
	}
#endif

	return 0;
}
+11 −13
Original line number Diff line number Diff line
@@ -350,6 +350,7 @@ mptsas_slave_alloc(struct scsi_device *sdev)
	VirtTarget		*vtarget;
	VirtDevice		*vdev;
	struct scsi_target 	*starget;
	u32			target_id;
	int i;

	vdev = kzalloc(sizeof(VirtDevice), GFP_KERNEL);
@@ -358,10 +359,10 @@ mptsas_slave_alloc(struct scsi_device *sdev)
				hd->ioc->name, sizeof(VirtDevice));
		return -ENOMEM;
	}
	vdev->ioc_id = hd->ioc->id;
	sdev->hostdata = vdev;
	starget = scsi_target(sdev);
	vtarget = starget->hostdata;
	vtarget->ioc_id = hd->ioc->id;
	vdev->vtarget = vtarget;
	if (vtarget->num_luns == 0) {
		vtarget->tflags = MPT_TARGET_FLAGS_Q_YES|MPT_TARGET_FLAGS_VALID_INQUIRY;
@@ -372,8 +373,8 @@ mptsas_slave_alloc(struct scsi_device *sdev)
	  RAID volumes placed beyond the last expected port.
	*/
	if (sdev->channel == hd->ioc->num_ports) {
		vdev->target_id = sdev->id;
		vdev->bus_id = 0;
		target_id = sdev->id;
		vtarget->bus_id = 0;
		vdev->lun = 0;
		goto out;
	}
@@ -384,9 +385,8 @@ mptsas_slave_alloc(struct scsi_device *sdev)
		for (i = 0; i < p->num_phys; i++) {
			if (p->phy_info[i].attached.sas_address ==
					rphy->identify.sas_address) {
				vdev->target_id =
					p->phy_info[i].attached.id;
				vdev->bus_id = p->phy_info[i].attached.channel;
				target_id = p->phy_info[i].attached.id;
				vtarget->bus_id = p->phy_info[i].attached.channel;
				vdev->lun = sdev->lun;
				mutex_unlock(&hd->ioc->sas_topology_mutex);
				goto out;
@@ -399,9 +399,7 @@ mptsas_slave_alloc(struct scsi_device *sdev)
	return -ENXIO;

 out:
	vtarget->ioc_id = vdev->ioc_id;
	vtarget->target_id = vdev->target_id;
	vtarget->bus_id = vdev->bus_id;
	vtarget->target_id = target_id;
	vtarget->num_luns++;
	return 0;
}
@@ -444,8 +442,8 @@ mptsas_slave_destroy(struct scsi_device *sdev)
	if (vdev->configured_lun){
		if (mptscsih_TMHandler(hd,
		     MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
		     vdev->bus_id,
		     vdev->target_id,
		     vdev->vtarget->bus_id,
		     vdev->vtarget->target_id,
		     0, 0, 5 /* 5 second timeout */)
		     < 0){

@@ -455,7 +453,7 @@ mptsas_slave_destroy(struct scsi_device *sdev)
			printk(MYIOC_s_WARN_FMT
		       "Error processing TaskMgmt id=%d TARGET_RESET\n",
				hd->ioc->name,
				vdev->target_id);
				vdev->vtarget->target_id);

			hd->tmPending = 0;
			hd->tmState = TM_STATE_NONE;
+8 −11
Original line number Diff line number Diff line
@@ -887,7 +887,7 @@ mptscsih_search_running_cmds(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
			dsprintk(( "search_running: found (sc=%p, mf = %p) target %d, lun %d \n",
					hd->ScsiLookup[ii], mf, mf->TargetID, mf->LUN[1]));

			if ((mf->TargetID != ((u8)vdevice->target_id)) || (mf->LUN[1] != ((u8) vdevice->lun)))
			if ((mf->TargetID != ((u8)vdevice->vtarget->target_id)) || (mf->LUN[1] != ((u8) vdevice->lun)))
				continue;

			/* Cleanup
@@ -1285,8 +1285,8 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))

	/* Use the above information to set up the message frame
	 */
	pScsiReq->TargetID = (u8) vdev->target_id;
	pScsiReq->Bus = vdev->bus_id;
	pScsiReq->TargetID = (u8) vdev->vtarget->target_id;
	pScsiReq->Bus = vdev->vtarget->bus_id;
	pScsiReq->ChainOffset = 0;
	if (vdev->vtarget->tflags &  MPT_TARGET_FLAGS_RAID_COMPONENT)
		pScsiReq->Function = MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH;
@@ -1701,7 +1701,7 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)

	vdev = SCpnt->device->hostdata;
	retval = mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK,
		vdev->bus_id, vdev->target_id, vdev->lun,
		vdev->vtarget->bus_id, vdev->vtarget->target_id, vdev->lun,
		ctx2abort, mptscsih_get_tm_timeout(ioc));

	printk (KERN_WARNING MYNAM ": %s: task abort: %s (sc=%p)\n",
@@ -1752,7 +1752,7 @@ mptscsih_dev_reset(struct scsi_cmnd * SCpnt)

	vdev = SCpnt->device->hostdata;
	retval = mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
		vdev->bus_id, vdev->target_id,
		vdev->vtarget->bus_id, vdev->vtarget->target_id,
		0, 0, mptscsih_get_tm_timeout(hd->ioc));

	printk (KERN_WARNING MYNAM ": %s: target reset: %s (sc=%p)\n",
@@ -1803,7 +1803,7 @@ mptscsih_bus_reset(struct scsi_cmnd * SCpnt)

	vdev = SCpnt->device->hostdata;
	retval = mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS,
		vdev->bus_id, 0, 0, 0, mptscsih_get_tm_timeout(hd->ioc));
		vdev->vtarget->bus_id, 0, 0, 0, mptscsih_get_tm_timeout(hd->ioc));

	printk (KERN_WARNING MYNAM ": %s: bus reset: %s (sc=%p)\n",
		hd->ioc->name,
@@ -2162,9 +2162,6 @@ mptscsih_slave_alloc(struct scsi_device *sdev)
		return -ENOMEM;
	}

	vdev->ioc_id = hd->ioc->id;
	vdev->target_id = sdev->id;
	vdev->bus_id = sdev->channel;
	vdev->lun = sdev->lun;
	sdev->hostdata = vdev;

@@ -3366,8 +3363,8 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
	iocmd.data_dma = -1;
	iocmd.size = 0;
	iocmd.rsvd = iocmd.rsvd2 = 0;
	iocmd.bus = vdevice->bus_id;
	iocmd.id = vdevice->target_id;
	iocmd.bus = vdevice->vtarget->bus_id;
	iocmd.id = vdevice->vtarget->target_id;
	iocmd.lun = (u8)vdevice->lun;

	if ((vdevice->vtarget->type == TYPE_DISK) &&
+2 −2
Original line number Diff line number Diff line
@@ -343,9 +343,9 @@ static int mptspi_slave_alloc(struct scsi_device *sdev)
		sdev->no_uld_attach = 1;
		vdev->vtarget->tflags |= MPT_TARGET_FLAGS_RAID_COMPONENT;
		/* The real channel for this device is zero */
		vdev->bus_id = 0;
		vdev->vtarget->bus_id = 0;
		/* The actual physdisknum (for RAID passthrough) */
		vdev->target_id = physdisknum;
		vdev->vtarget->target_id = physdisknum;
	}

	return 0;