Author: jhb
Date: Fri Dec 13 19:27:51 2019
New Revision: 355726
URL: https://svnweb.freebsd.org/changeset/base/355726

Log:
  Use a callout instead of timeout(9) for delayed zio's.
  
  Reviewed by:  avg
  Differential Revision:        https://reviews.freebsd.org/D22597

Modified:
  head/sys/cddl/compat/opensolaris/sys/systm.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c

Modified: head/sys/cddl/compat/opensolaris/sys/systm.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/systm.h        Fri Dec 13 19:26:04 
2019        (r355725)
+++ head/sys/cddl/compat/opensolaris/sys/systm.h        Fri Dec 13 19:27:51 
2019        (r355726)
@@ -42,9 +42,6 @@
 
 #define        delay(x)        pause("soldelay", (x))
 
-#define        timeout_generic(type, fn, arg, t, r, f)                 \
-    timeout(fn, arg, t / (NANOSEC/hz) + 1)
-
 #endif /* _KERNEL */
 
 #endif /* _OPENSOLARIS_SYS_SYSTM_H_ */

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h       Fri Dec 
13 19:26:04 2019        (r355725)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h       Fri Dec 
13 19:27:51 2019        (r355726)
@@ -474,6 +474,9 @@ struct zio {
 
 #ifdef __FreeBSD__
        struct bio      *io_bio;
+#ifdef _KERNEL
+       struct callout  io_timer;
+#endif
 #endif
 
        /* Internal pipeline state */

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c   Fri Dec 13 
19:26:04 2019        (r355725)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c   Fri Dec 13 
19:27:51 2019        (r355726)
@@ -659,6 +659,9 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const
 
        mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL);
        cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL);
+#if defined(__FreeBSD__) && defined(_KERNEL)
+       callout_init(&zio->io_timer, 1);
+#endif
 
        list_create(&zio->io_parent_list, sizeof (zio_link_t),
            offsetof(zio_link_t, zl_parent_node));
@@ -726,6 +729,10 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const
 static void
 zio_destroy(zio_t *zio)
 {
+#ifdef __FreeBSD__
+       KASSERT(!(callout_active(&zio->io_timer) ||
+           callout_pending(&zio->io_timer)), ("zio_destroy: timer active"));
+#endif
        metaslab_trace_fini(&zio->io_alloc_list);
        list_destroy(&zio->io_parent_list);
        list_destroy(&zio->io_child_list);
@@ -1710,8 +1717,13 @@ zio_delay_interrupt(zio_t *zio)
                        DTRACE_PROBE3(zio__delay__hit, zio_t *, zio,
                            hrtime_t, now, hrtime_t, diff);
 
+#ifdef __FreeBSD__
+                       callout_reset_sbt(&zio->io_timer, nstosbt(diff), 0,
+                           (void (*)(void *))zio_interrupt, zio, C_HARDCLOCK);
+#else
                        (void) timeout_generic(CALLOUT_NORMAL,
                            (void (*)(void *))zio_interrupt, zio, diff, 1, 0);
+#endif
                }
 
                return;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to