Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 29 Sep 2018 01:26:07 +0000 (UTC)
From:      Allan Jude <allanjude@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r339009 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201809290126.w8T1Q7sw024939@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: allanjude
Date: Sat Sep 29 01:26:07 2018
New Revision: 339009
URL: https://svnweb.freebsd.org/changeset/base/339009

Log:
  Avoid panic when adjusting priority of a read in the face of an IO error
  
  PR:		231516
  Reported by:	sbruno
  Approved by:	re (rgrimes)
  Obtained from:	ZFS-on-Linux
  X-MFC-with:	334844
  Sponsored by:	Klara Systems
  
  MFV/ZoL:	Fix zio->io_priority failed (7 < 6) assert
  
  commit c26cf0966d131b722c32f8ccecfe5791a789d975
  Author: Tony Hutter <hutter2@llnl.gov>
  Date:   Tue May 29 18:13:48 2018 -0700
  
    Fix zio->io_priority failed (7 < 6) assert
  
    This fixes an assert in vdev_queue_change_io_priority():
  
      VERIFY3(zio->io_priority < ZIO_PRIORITY_NUM_QUEUEABLE) failed (7 < 6)
      PANIC at vdev_queue.c:832:vdev_queue_change_io_priority()
  
    Reviewed-by: Tom Caputi <tcaputi@datto.com>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c	Sat Sep 29 00:44:23 2018	(r339008)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c	Sat Sep 29 01:26:07 2018	(r339009)
@@ -958,6 +958,15 @@ vdev_queue_change_io_priority(zio_t *zio, zio_priority
 	vdev_queue_t *vq = &zio->io_vd->vdev_queue;
 	avl_tree_t *tree;
 
+	/*
+	 * ZIO_PRIORITY_NOW is used by the vdev cache code and the aggregate zio
+	 * code to issue IOs without adding them to the vdev queue. In this
+	 * case, the zio is already going to be issued as quickly as possible
+	 * and so it doesn't need any reprioitization to help.
+	 */
+	if (zio->io_priority == ZIO_PRIORITY_NOW)
+		return;
+
 	ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE);
 	ASSERT3U(priority, <, ZIO_PRIORITY_NUM_QUEUEABLE);
 



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