Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Nov 2019 14:05:16 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r354959 - vendor-sys/illumos/dist/uts/common/fs/zfs
Message-ID:  <201911211405.xALE5GHL047481@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avg
Date: Thu Nov 21 14:05:15 2019
New Revision: 354959
URL: https://svnweb.freebsd.org/changeset/base/354959

Log:
  11056 vdev_disk_io_start will panic the system if ldi_strategy returns an error.
  
  illumos/illumos-gate@fa88c70fa54c01be933cc49fd271e5c4468f7eb8
  https://github.com/illumos/illumos-gate/commit/fa88c70fa54c01be933cc49fd271e5c4468f7eb8
  
  https://www.illumos.org/issues/11056
  
  Author: Jerry Jelinek <jerry.jelinek@joyent.com>

Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_disk.c

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_disk.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_disk.c	Thu Nov 21 14:04:06 2019	(r354958)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_disk.c	Thu Nov 21 14:05:15 2019	(r354959)
@@ -22,7 +22,7 @@
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
  * Copyright 2016 Nexenta Systems, Inc.  All rights reserved.
- * Copyright (c) 2013 Joyent, Inc.  All rights reserved.
+ * Copyright 2019 Joyent, Inc.
  */
 
 #include <sys/zfs_context.h>
@@ -857,8 +857,15 @@ vdev_disk_io_start(zio_t *zio)
 	bp->b_bufsize = zio->io_size;
 	bp->b_iodone = vdev_disk_io_intr;
 
-	/* ldi_strategy() will return non-zero only on programming errors */
-	VERIFY(ldi_strategy(dvd->vd_lh, bp) == 0);
+	/*
+	 * In general we would expect ldi_strategy() to return non-zero only
+	 * because of programming errors, but we've also seen this fail shortly
+	 * after a disk dies.
+	 */
+	if (ldi_strategy(dvd->vd_lh, bp) != 0) {
+		zio->io_error = ENXIO;
+		zio_interrupt(zio);
+	}
 }
 
 static void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911211405.xALE5GHL047481>