Fix fast_io_fail capping
authorJun'ichi Nomura <j-nomura@ce.jp.nec.com>
Mon, 12 Mar 2012 11:56:52 +0000 (20:56 +0900)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Mon, 12 Mar 2012 20:09:31 +0000 (21:09 +0100)
Hi Christophe,

fast_io_fail is only meaningful if it is smaller than dev_loss_tmo.
Setting dev_loss_tmo value to fast_io_fail ends up with -EINVAL.
If the fast_io_fail is not configured properly, turning it off
seems to be the right behavior.

MP_FAST_IO_FAIL_OFF is -1, defined in the following patch:
  [PATCH] Fix for setting '0' to fast_io_fail
  http://www.redhat.com/archives/dm-devel/2012-March/msg00047.html

--
Jun'ichi Nomura, NEC Corporation

libmultipath/discovery.c

index ff011c3aedb6c50208524cc079c82d25bdfc2d3b..1b67e76b9c9ebd01cc19f63c37821951a0c77f29 100644 (file)
@@ -307,10 +307,10 @@ sysfs_set_scsi_tmo (struct multipath *mpp)
                        mpp->alias, dev_loss_tmo);
        }
        mpp->dev_loss = dev_loss_tmo;
-       if (mpp->fast_io_fail > (int)mpp->dev_loss) {
-               mpp->fast_io_fail = mpp->dev_loss;
-               condlog(3, "%s: update fast_io_fail to %d",
+       if (mpp->dev_loss && mpp->fast_io_fail >= (int)mpp->dev_loss) {
+               condlog(3, "%s: turning off fast_io_fail (%d is not smaller than dev_loss_tmo)",
                        mpp->alias, mpp->fast_io_fail);
+               mpp->fast_io_fail = MP_FAST_IO_FAIL_OFF;
        }
        if (!mpp->dev_loss && !mpp->fast_io_fail)
                return 0;