Re: [PATCH 4/5] ibmvfc: Suppress ABTS if target gone

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

 



* Brian King (brking@xxxxxxxxxxxxxxxxxx) wrote:
> 
> Adds support for a new VIOS feature that allows ibmvfc to
> optimize terminate_rport_io by telling the VIOS the target
> is no longer accessible on the fabric and that it should
> not send an ABTS out on the fabric to the device.
> 
> Signed-off-by: Brian King <brking@xxxxxxxxxxxxxxxxxx>
Acked-by: Robert Jennings <rcj@xxxxxxxxxxxxxxxxxx>
> ---
> 
>  drivers/scsi/ibmvscsi/ibmvfc.c |   13 +++++++------
>  drivers/scsi/ibmvscsi/ibmvfc.h |    3 ++-
>  2 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff -puN drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_supress_abts drivers/scsi/ibmvscsi/ibmvfc.c
> --- linux-2.6/drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_supress_abts	2013-01-25 14:29:11.000000000 -0600
> +++ linux-2.6-bjking1/drivers/scsi/ibmvscsi/ibmvfc.c	2013-01-25 14:29:24.000000000 -0600
> @@ -2190,10 +2190,12 @@ static int ibmvfc_cancel_all(struct scsi
>  		tmf->common.length = sizeof(*tmf);
>  		tmf->scsi_id = rport->port_id;
>  		int_to_scsilun(sdev->lun, &tmf->lun);
> +		if (!(vhost->login_buf->resp.capabilities & IBMVFC_CAN_SUPPRESS_ABTS))
> +			type &= ~IBMVFC_TMF_SUPPRESS_ABTS;
>  		if (vhost->state == IBMVFC_ACTIVE)
>  			tmf->flags = (type | IBMVFC_TMF_LUA_VALID);
>  		else
> -			tmf->flags = IBMVFC_TMF_LUA_VALID;
> +			tmf->flags = ((type & IBMVFC_TMF_SUPPRESS_ABTS) | IBMVFC_TMF_LUA_VALID);
>  		tmf->cancel_key = (unsigned long)sdev->hostdata;
>  		tmf->my_cancel_key = (unsigned long)starget->hostdata;
> 
> @@ -2402,7 +2404,7 @@ static int ibmvfc_eh_abort_handler(struc
>  		cancel_rc = ibmvfc_cancel_all(sdev, IBMVFC_TMF_ABORT_TASK_SET);
>  		ibmvfc_abort_task_set(sdev);
>  	} else
> -		cancel_rc = ibmvfc_cancel_all(sdev, 0);
> +		cancel_rc = ibmvfc_cancel_all(sdev, IBMVFC_TMF_SUPPRESS_ABTS);
> 
>  	if (!cancel_rc)
>  		rc = ibmvfc_wait_for_ops(vhost, sdev, ibmvfc_match_lun);
> @@ -2435,7 +2437,7 @@ static int ibmvfc_eh_device_reset_handle
>  		cancel_rc = ibmvfc_cancel_all(sdev, IBMVFC_TMF_LUN_RESET);
>  		reset_rc = ibmvfc_reset_device(sdev, IBMVFC_LUN_RESET, "LUN");
>  	} else
> -		cancel_rc = ibmvfc_cancel_all(sdev, 0);
> +		cancel_rc = ibmvfc_cancel_all(sdev, IBMVFC_TMF_SUPPRESS_ABTS);
> 
>  	if (!cancel_rc && !reset_rc)
>  		rc = ibmvfc_wait_for_ops(vhost, sdev, ibmvfc_match_lun);
> @@ -2456,7 +2458,7 @@ static int ibmvfc_eh_device_reset_handle
>  static void ibmvfc_dev_cancel_all_noreset(struct scsi_device *sdev, void *data)
>  {
>  	unsigned long *rc = data;
> -	*rc |= ibmvfc_cancel_all(sdev, 0);
> +	*rc |= ibmvfc_cancel_all(sdev, IBMVFC_TMF_SUPPRESS_ABTS);
>  }
> 
>  /**
> @@ -2547,8 +2549,7 @@ static void ibmvfc_terminate_rport_io(st
>  		dev_rport = starget_to_rport(scsi_target(sdev));
>  		if (dev_rport != rport)
>  			continue;
> -		ibmvfc_cancel_all(sdev, IBMVFC_TMF_ABORT_TASK_SET);
> -		ibmvfc_abort_task_set(sdev);
> +		ibmvfc_cancel_all(sdev, IBMVFC_TMF_SUPPRESS_ABTS);
>  	}
> 
>  	rc = ibmvfc_wait_for_ops(vhost, rport, ibmvfc_match_rport);
> diff -puN drivers/scsi/ibmvscsi/ibmvfc.h~ibmvfc_supress_abts drivers/scsi/ibmvscsi/ibmvfc.h
> --- linux-2.6/drivers/scsi/ibmvscsi/ibmvfc.h~ibmvfc_supress_abts	2013-01-25 14:29:11.000000000 -0600
> +++ linux-2.6-bjking1/drivers/scsi/ibmvscsi/ibmvfc.h	2013-01-25 14:29:11.000000000 -0600
> @@ -208,10 +208,10 @@ struct ibmvfc_npiv_login_resp {
>  	u16 error;
>  	u32 flags;
>  #define IBMVFC_NATIVE_FC		0x01
> -#define IBMVFC_CAN_FLUSH_ON_HALT	0x08
>  	u32 reserved;
>  	u64 capabilities;
>  #define IBMVFC_CAN_FLUSH_ON_HALT	0x08
> +#define IBMVFC_CAN_SUPPRESS_ABTS	0x10
>  	u32 max_cmds;
>  	u32 scsi_id_sz;
>  	u64 max_dma_len;
> @@ -351,6 +351,7 @@ struct ibmvfc_tmf {
>  #define IBMVFC_TMF_LUN_RESET		0x10
>  #define IBMVFC_TMF_TGT_RESET		0x20
>  #define IBMVFC_TMF_LUA_VALID		0x40
> +#define IBMVFC_TMF_SUPPRESS_ABTS	0x80
>  	u32 cancel_key;
>  	u32 my_cancel_key;
>  	u32 pad;
> _

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