svn commit: r264885 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Steven Hartland
smh at FreeBSD.org
Thu Apr 24 15:36:01 UTC 2014
Author: smh
Date: Thu Apr 24 15:36:00 2014
New Revision: 264885
URL: http://svnweb.freebsd.org/changeset/base/264885
Log:
Eliminate duplicate checks in vdev_geom_io_intr error handling
MFC after: 1 month
Modified:
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Thu Apr 24 15:16:26 2014 (r264884)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Thu Apr 24 15:36:00 2014 (r264885)
@@ -752,35 +752,39 @@ vdev_geom_io_intr(struct bio *bp)
zio->io_error = bp->bio_error;
if (zio->io_error == 0 && bp->bio_resid != 0)
zio->io_error = EIO;
- if (bp->bio_cmd == BIO_FLUSH && bp->bio_error == ENOTSUP) {
- /*
- * If we get ENOTSUP, we know that no future
- * attempts will ever succeed. In this case we
- * set a persistent bit so that we don't bother
- * with the ioctl in the future.
- */
- vd->vdev_nowritecache = B_TRUE;
- }
- if (bp->bio_cmd == BIO_DELETE && bp->bio_error == ENOTSUP) {
- /*
- * If we get ENOTSUP, we know that no future
- * attempts will ever succeed. In this case we
- * set a persistent bit so that we don't bother
- * with the ioctl in the future.
- */
- vd->vdev_notrim = B_TRUE;
- }
- if (zio->io_error == ENXIO && !vd->vdev_remove_wanted) {
+
+ switch(zio->io_error) {
+ case ENOTSUP:
/*
- * If provider's error is set we assume it is being
- * removed.
+ * If we get ENOTSUP for BIO_FLUSH or BIO_DELETE we know
+ * that future attempts will never succeed. In this case
+ * we set a persistent flag so that we don't bother with
+ * requests in the future.
*/
- if (bp->bio_to->error != 0) {
- vd->vdev_remove_wanted = B_TRUE;
- spa_async_request(zio->io_spa, SPA_ASYNC_REMOVE);
- } else if (!vd->vdev_delayed_close) {
- vd->vdev_delayed_close = B_TRUE;
+ switch(bp->bio_cmd) {
+ case BIO_FLUSH:
+ vd->vdev_nowritecache = B_TRUE;
+ break;
+ case BIO_DELETE:
+ vd->vdev_notrim = B_TRUE;
+ break;
+ }
+ break;
+ case ENXIO:
+ if (!vd->vdev_remove_wanted) {
+ /*
+ * If provider's error is set we assume it is being
+ * removed.
+ */
+ if (bp->bio_to->error != 0) {
+ vd->vdev_remove_wanted = B_TRUE;
+ spa_async_request(zio->io_spa,
+ SPA_ASYNC_REMOVE);
+ } else if (!vd->vdev_delayed_close) {
+ vd->vdev_delayed_close = B_TRUE;
+ }
}
+ break;
}
g_destroy_bio(bp);
zio_interrupt(zio);
More information about the svn-src-all
mailing list