diff options
author | mm <mm@FreeBSD.org> | 2010-09-27 09:42:31 +0000 |
---|---|---|
committer | mm <mm@FreeBSD.org> | 2010-09-27 09:42:31 +0000 |
commit | 240333eaa7cd7f7a595350c52872044734528869 (patch) | |
tree | cd91e345f4a206c0d89bd52cbf33237f67e560a6 /sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c | |
parent | 06d7ad088338844d37a5a4328b1c4bb5de1a68a2 (diff) | |
download | FreeBSD-src-240333eaa7cd7f7a595350c52872044734528869.zip FreeBSD-src-240333eaa7cd7f7a595350c52872044734528869.tar.gz |
Properly handle IO with B_FAILFAST
Retry IO once with ZIO_FLAG_TRYHARD before declaring a pool faulted
OpenSolaris revision and Bug IDs:
9725:0bf7402e8022
6843014 ZFS B_FAILFAST handling is broken
Approved by: delphij (mentor)
Obtained from: OpenSolaris (Bug ID 6843014)
MFC after: 3 weeks
Diffstat (limited to 'sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c')
-rw-r--r-- | sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c index cf2f90d..9d6cefb 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c @@ -134,6 +134,15 @@ zfs_ereport_post(const char *subclass, spa_t *spa, vdev_t *vd, zio_t *zio, if (zio->io_flags & ZIO_FLAG_SPECULATIVE) return; + /* + * If this I/O is not a retry I/O, don't post an ereport. + * Otherwise, we risk making bad diagnoses based on B_FAILFAST + * I/Os. + */ + if (zio->io_error == EIO && + !(zio->io_flags & ZIO_FLAG_IO_RETRY)) + return; + if (vd != NULL) { /* * If the vdev has already been marked as failing due |