Allow to control failfast

Linux defaults to setting "failfast" on BIOs, so that the OS will not
retry IOs that fail, and instead report the error to ZFS.

In some cases, such as errors reported by the HBA driver, not
the device itself, we would wish to retry rather than generating
vdev errors in ZFS. This new property allows that.

This introduces a per vdev option to disable the failfast option.
This also introduces a global module parameter to define the failfast
mask value.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Co-authored-by: Allan Jude <allan@klarasystems.com>
Signed-off-by: Allan Jude <allan@klarasystems.com>
Signed-off-by: Mariusz Zaborski <mariusz.zaborski@klarasystems.com>
Sponsored-by: Seagate Technology LLC
Submitted-by: Klara, Inc.
Closes #14056
This commit is contained in:
Mariusz Zaborski
2022-11-10 22:37:12 +01:00
committed by GitHub
parent 945b407486
commit 16f0fdaddd
9 changed files with 94 additions and 8 deletions
@@ -126,7 +126,8 @@ typedef int bvec_iterator_t;
#endif
static inline void
bio_set_flags_failfast(struct block_device *bdev, int *flags)
bio_set_flags_failfast(struct block_device *bdev, int *flags, bool dev,
bool transport, bool driver)
{
#ifdef CONFIG_BUG
/*
@@ -148,7 +149,12 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
#endif /* BLOCK_EXT_MAJOR */
#endif /* CONFIG_BUG */
*flags |= REQ_FAILFAST_MASK;
if (dev)
*flags |= REQ_FAILFAST_DEV;
if (transport)
*flags |= REQ_FAILFAST_TRANSPORT;
if (driver)
*flags |= REQ_FAILFAST_DRIVER;
}
/*