[SCSI] fusion: unloading the driver - only set asyn narrow for configured devices
authorMoore, Eric <Eric.Moore@lsil.com>
Wed, 18 Jan 2006 00:06:26 +0000 (17:06 -0700)
committerJames Bottomley <jejb@mulgrave.(none)>
Tue, 31 Jan 2006 20:40:04 +0000 (14:40 -0600)
This patch inhibits sending spi negotiation parameters
for non-configured devices from the slave_destroy function.

Signed-off-by: Eric Moore <Eric.Moore@lsil.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/message/fusion/mptscsih.c

index d6ccd6aa43487efc0ca7d5f5af0c0b266deeac70..2e1c9ff4b0283e03becd4a0ffaba9cabbede672d 100644 (file)
@@ -158,7 +158,7 @@ static int  mptscsih_writeIOCPage4(MPT_SCSI_HOST *hd, int target_id, int bus);
 int            mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
 static int     mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *iocmd);
 static void    mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice);
-static void    mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget);
+static void    mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtDevice *vdevice);
 static int     mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id);
 
 #ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION
@@ -2308,7 +2308,7 @@ mptscsih_slave_destroy(struct scsi_device *sdev)
        vtarget->luns[0] &= ~(1 << vdevice->lun);
        vtarget->num_luns--;
        if (vtarget->num_luns == 0) {
-               mptscsih_negotiate_to_asyn_narrow(hd, vtarget);
+               mptscsih_negotiate_to_asyn_narrow(hd, vdevice);
                if (hd->ioc->bus_type == SPI) {
                        if (mptscsih_is_phys_disk(hd->ioc, vtarget->target_id)) {
                                hd->ioc->spi_data.forceDv |= MPT_SCSICFG_RELOAD_IOC_PG3;
@@ -3899,8 +3899,9 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
  *
  */
 static void
-mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
+mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
 {
+       VirtTarget              *vtarget = vdevice->vtarget;
        MPT_ADAPTER             *ioc= hd->ioc;
        SCSIDevicePage1_t       *pcfg1Data;
        CONFIGPARMS              cfg;
@@ -3910,7 +3911,8 @@ mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
        int                      requested, configuration, data,i;
        u8                       flags, factor;
 
-       if (ioc->bus_type != SPI)
+       if ((ioc->bus_type != SPI) ||
+               (!vdevice->configured_lun))
                return;
 
        if (!ioc->spi_data.sdp1length)
@@ -3946,7 +3948,7 @@ mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
                        }
                        mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested,
                                &configuration, flags);
-                       dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC "
+                       dnegoprintk(("nego asyn narrow: id=%d width=0 factor=MPT_ASYNC "
                                "offset=0 negoFlags=%x request=%x config=%x\n",
                                id, flags, requested, configuration));
                        pcfg1Data->RequestedParameters = cpu_to_le32(requested);
@@ -3959,7 +3961,7 @@ mptscsih_negotiate_to_asyn_narrow(MPT_SCSI_HOST *hd, VirtTarget *vtarget)
                flags = vtarget->negoFlags;
                mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested,
                                &configuration, flags);
-               dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC "
+               dnegoprintk(("nego asyn narrow: id=%d width=0 factor=MPT_ASYNC "
                        "offset=0 negoFlags=%x request=%x config=%x\n",
                        vtarget->target_id, flags, requested, configuration));
                pcfg1Data->RequestedParameters = cpu_to_le32(requested);