From ea02f4fd95a6a74886335a82fdc6acd59758ccf7 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Tue, 15 Dec 2009 09:26:06 +0100 Subject: [PATCH] --- yaml --- r: 181247 b: refs/heads/master c: f2818663c82b7297ff4aa38cbddb870dc02f7104 h: refs/heads/master i: 181245: 78ad35cbbea494bf7364c2f3b1c9f1252c58c87f 181243: fd1c9aa53dab4cdeefa292aff369730f3105aa0c 181239: c4d76ec07d2b48129ea15c34adb2f5685fb5b449 181231: 6e3fd45d7e6fc074e0b9671043f0d0287e10629c 181215: 7e8871a6046cbd94493e88f3481670aaf70475ba 181183: f03fe63397bd88c89c5d738ff992a67d65f85f02 181119: e118208a5e4c64dcbcb83c4e3dcb0206da95d0e1 180991: 6d7d29831576d80148d07f65c664e457938e9716 180735: fe63ced329027591722de69ca5861df56b6dca55 180223: d6ecfc0a2658379b0710cf00f231f5a199e10333 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/scsi_transport_fc.c | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index dfc17022e41d..594322b9e238 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e47c11c7a402a054a85cb917a6ed020f6b5fae04 +refs/heads/master: f2818663c82b7297ff4aa38cbddb870dc02f7104 diff --git a/trunk/drivers/scsi/scsi_transport_fc.c b/trunk/drivers/scsi/scsi_transport_fc.c index 653f22a8deb9..79660ee3e211 100644 --- a/trunk/drivers/scsi/scsi_transport_fc.c +++ b/trunk/drivers/scsi/scsi_transport_fc.c @@ -475,7 +475,8 @@ MODULE_PARM_DESC(dev_loss_tmo, "Maximum number of seconds that the FC transport should" " insulate the loss of a remote port. Once this value is" " exceeded, the scsi target is removed. Value should be" - " between 1 and SCSI_DEVICE_BLOCK_MAX_TIMEOUT."); + " between 1 and SCSI_DEVICE_BLOCK_MAX_TIMEOUT if" + " fast_io_fail_tmo is not set."); /* * Netlink Infrastructure @@ -842,9 +843,17 @@ store_fc_rport_dev_loss_tmo(struct device *dev, struct device_attribute *attr, (rport->port_state == FC_PORTSTATE_NOTPRESENT)) return -EBUSY; val = simple_strtoul(buf, &cp, 0); - if ((*cp && (*cp != '\n')) || - (val < 0) || (val > SCSI_DEVICE_BLOCK_MAX_TIMEOUT)) + if ((*cp && (*cp != '\n')) || (val < 0)) return -EINVAL; + + /* + * If fast_io_fail is off we have to cap + * dev_loss_tmo at SCSI_DEVICE_BLOCK_MAX_TIMEOUT + */ + if (rport->fast_io_fail_tmo == -1 && + val > SCSI_DEVICE_BLOCK_MAX_TIMEOUT) + return -EINVAL; + i->f->set_rport_dev_loss_tmo(rport, val); return count; } @@ -925,9 +934,16 @@ store_fc_rport_fast_io_fail_tmo(struct device *dev, rport->fast_io_fail_tmo = -1; else { val = simple_strtoul(buf, &cp, 0); - if ((*cp && (*cp != '\n')) || - (val < 0) || (val >= rport->dev_loss_tmo)) + if ((*cp && (*cp != '\n')) || (val < 0)) return -EINVAL; + /* + * Cap fast_io_fail by dev_loss_tmo or + * SCSI_DEVICE_BLOCK_MAX_TIMEOUT. + */ + if ((val >= rport->dev_loss_tmo) || + (val > SCSI_DEVICE_BLOCK_MAX_TIMEOUT)) + return -EINVAL; + rport->fast_io_fail_tmo = val; } return count;