Re: [PATCH 4/7] mpt2sas: setting SDEV into RUNNING state from Interrupt context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2009-08-14 at 15:15 +0530, Kashyap, Desai wrote:
> Changing SDEV Running state from interrupt context. Previously It was 
> handle in work queue thread. With this change It will not wait for work 
> queue thread to execute scsih_ublock_io_device to put SDEV into Running 
> state. This will reduce delay for Device becoming RUNNING. 
> 
> 
> ---
> Signed-off-by: Kashyap Desai <kashyap.desai@xxxxxxx>
> Signed-off-by: Eric Moore <Eric.moore@xxxxxxx>
> ---
> diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> index c0d5d5e..33ba2a4 100644
> --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> @@ -2327,6 +2327,7 @@ _scsih_block_io_to_children_attached_directly(struct MPT2SAS_ADAPTER *ioc,
>  	u16 handle;
>  	u16 reason_code;
>  	u8 phy_number;
> +	u8 link_rate;
>  
>  	for (i = 0; i < event_data->NumEntries; i++) {
>  		handle = le16_to_cpu(event_data->PHY[i].AttachedDevHandle);
> @@ -2337,6 +2338,11 @@ _scsih_block_io_to_children_attached_directly(struct MPT2SAS_ADAPTER *ioc,
>  		    MPI2_EVENT_SAS_TOPO_RC_MASK;
>  		if (reason_code == MPI2_EVENT_SAS_TOPO_RC_DELAY_NOT_RESPONDING)
>  			_scsih_block_io_device(ioc, handle);
> +		if (reason_code == MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED) {
> +			link_rate = event_data->PHY[i].LinkRate >> 4;
> +			if (link_rate >= MPI2_SAS_NEG_LINK_RATE_1_5)
> +				_scsih_ublock_io_device(ioc, handle);
> +		}
>  	}
>  }
>  
> @@ -3871,10 +3877,6 @@ _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc, u8 VF_ID,
>  						link_rate_);
>  				}
>  			}
> -			if (reason_code == MPI2_EVENT_SAS_TOPO_RC_PHY_CHANGED) {
> -				if (link_rate_ >= MPI2_SAS_NEG_LINK_RATE_1_5)
> -					_scsih_ublock_io_device(ioc, handle);
> -			}

OK, so explain these functions _scsih_ublock_io_device and
_scsih_block_io_device to me.  You're wrongly tampering with device
state in them ... it should be using the block/unblock functions in
scsi_lib.c if it's a standard usage.  If not, it shouldn't be touching
the device state, especially SDEV_BLOCK, because that has queue running
and plugging implications.

James


--
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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux