[SCSI] iscsi class: modify handling of replacement timeout
authorMike Christie <michaelc@cs.wisc.edu>
Wed, 11 Nov 2009 22:34:34 +0000 (16:34 -0600)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 4 Dec 2009 18:01:37 +0000 (12:01 -0600)
This patch modifies the replacement/recovery_timeout so it works
more like the fc fast io fail tmo.

If userspace tries to set the replacement/recovery_timeout to less than
zero, we will turn off the forced recovery cleanup.

If userspace sets the value to 0 then we will force the recovery
cleanup immediately.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/scsi_transport_iscsi.c

index dc04ca124a6941e7a6a48c87f221dce351eaf0f7..ea3892e7e0f76a46ef219c12e97b23e13abe326e 100644 (file)
@@ -627,8 +627,10 @@ static void __iscsi_block_session(struct work_struct *work)
        spin_unlock_irqrestore(&session->lock, flags);
        scsi_target_block(&session->dev);
        ISCSI_DBG_TRANS_SESSION(session, "Completed SCSI target blocking\n");
-       queue_delayed_work(iscsi_eh_timer_workq, &session->recovery_work,
-                          session->recovery_tmo * HZ);
+       if (session->recovery_tmo >= 0)
+               queue_delayed_work(iscsi_eh_timer_workq,
+                                  &session->recovery_work,
+                                  session->recovery_tmo * HZ);
 }
 
 void iscsi_block_session(struct iscsi_cls_session *session)
@@ -1348,8 +1350,7 @@ 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);
-               if (value != 0)
-                       session->recovery_tmo = value;
+               session->recovery_tmo = value;
                break;
        default:
                err = transport->set_param(conn, ev->u.set_param.param,