Re: [PATCH] iSCSI: let session recovery_tmo sysfs writes persist across recovery

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

 



On 06/16/2015 06:07 PM, Chris Leech wrote:
> The iSCSI session recovery_tmo setting is writeable in sysfs, but it's
> also set every time a connection is established when parameters are set
> from iscsid over netlink.  That results in the timeout being reset to
> the default value after every recovery.
> 
> The DM multipath tools want to use the sysfs interface to lower the
> default timeout when there are multiple paths to fail over.  It has
> caused confusion that we have a writeable sysfs value that seem to keep
> resetting itself.
> 
> This patch adds an in-kernel flag that gets set once a sysfs write
> occurs, and then ignores netlink parameter setting once it's been
> modified via the sysfs interface.  My thinking here is that the sysfs
> interface is much simpler for external tools to influence the session
> timeout, but if we're going to allow it to be modified directly we
> should ensure that setting is maintained.
> 
> Signed-off-by: Chris Leech <cleech@xxxxxxxxxx>
> ---
>  drivers/scsi/scsi_transport_iscsi.c | 11 ++++++++---
>  include/scsi/scsi_transport_iscsi.h |  1 +
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
> index 67d43e3..35ef55f 100644
> --- a/drivers/scsi/scsi_transport_iscsi.c
> +++ b/drivers/scsi/scsi_transport_iscsi.c
> @@ -2040,6 +2040,7 @@ iscsi_alloc_session(struct Scsi_Host *shost, struct iscsi_transport *transport,
>  	session->transport = transport;
>  	session->creator = -1;
>  	session->recovery_tmo = 120;
> +	session->recovery_tmo_sysfs_override = false;
>  	session->state = ISCSI_SESSION_FREE;
>  	INIT_DELAYED_WORK(&session->recovery_work, session_recovery_timedout);
>  	INIT_LIST_HEAD(&session->sess_list);
> @@ -2784,7 +2785,8 @@ iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev)
>  	switch (ev->u.set_param.param) {
>  	case ISCSI_PARAM_SESS_RECOVERY_TMO:
>  		sscanf(data, "%d", &value);
> -		session->recovery_tmo = value;
> +		if (!session->recovery_tmo_sysfs_override)
> +			session->recovery_tmo = value;
>  		break;
>  	default:
>  		err = transport->set_param(conn, ev->u.set_param.param,
> @@ -4047,13 +4049,15 @@ store_priv_session_##field(struct device *dev,				\
>  	if ((session->state == ISCSI_SESSION_FREE) ||			\
>  	    (session->state == ISCSI_SESSION_FAILED))			\
>  		return -EBUSY;						\
> -	if (strncmp(buf, "off", 3) == 0)				\
> +	if (strncmp(buf, "off", 3) == 0) {				\
>  		session->field = -1;					\
> -	else {								\
> +		session->field##_sysfs_override = true;			\
> +	} else {							\
>  		val = simple_strtoul(buf, &cp, 0);			\
>  		if (*cp != '\0' && *cp != '\n')				\
>  			return -EINVAL;					\
>  		session->field = val;					\
> +		session->field##_sysfs_override = true;			\
>  	}								\
>  	return count;							\
>  }
> @@ -4064,6 +4068,7 @@ store_priv_session_##field(struct device *dev,				\
>  static ISCSI_CLASS_ATTR(priv_sess, field, S_IRUGO | S_IWUSR,		\
>  			show_priv_session_##field,			\
>  			store_priv_session_##field)
> +
>  iscsi_priv_session_rw_attr(recovery_tmo, "%d");
>  
>  static struct attribute *iscsi_session_attrs[] = {
> diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
> index 2555ee5..6183d20 100644
> --- a/include/scsi/scsi_transport_iscsi.h
> +++ b/include/scsi/scsi_transport_iscsi.h
> @@ -241,6 +241,7 @@ struct iscsi_cls_session {
>  
>  	/* recovery fields */
>  	int recovery_tmo;
> +	bool recovery_tmo_sysfs_override;
>  	struct delayed_work recovery_work;
>  
>  	unsigned int target_id;
> 

Looks ok to me.

Reviewed-by: Mike Christie <michaelc@xxxxxxxxxxx>

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