Author: avg
Date: Tue Sep 26 15:38:16 2017
New Revision: 324016
URL: https://svnweb.freebsd.org/changeset/base/324016

Log:
  fix r324011, MFV of r323535, 8585 improve batching done in zil_commit()
  
  I managed to commit an older version of the change.
  Plus, even the latest version was not ready for userland compilation.
  
  Reported by:  "O. Hartmann" <ohartm...@walstatt.org>,
                cy
  MFC after:    1 week
  X-MFC with:   r324011

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

Modified: head/sys/cddl/compat/opensolaris/sys/time.h
==============================================================================
--- head/sys/cddl/compat/opensolaris/sys/time.h Tue Sep 26 12:46:17 2017        
(r324015)
+++ head/sys/cddl/compat/opensolaris/sys/time.h Tue Sep 26 15:38:16 2017        
(r324016)
@@ -40,6 +40,9 @@
 #define        MSEC2NSEC(m)    ((hrtime_t)(m) * (NANOSEC / MILLISEC))
 #define        NSEC2MSEC(n)    ((n) / (NANOSEC / MILLISEC))
 
+#define        USEC2NSEC(m)    ((hrtime_t)(m) * (NANOSEC / MICROSEC))
+#define        NSEC2USEC(n)    ((n) / (NANOSEC / MICROSEC))
+
 #define        NSEC2SEC(n)     ((n) / (NANOSEC / SEC))
 #define        SEC2NSEC(m)     ((hrtime_t)(m) * (NANOSEC / SEC))
 

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c   Tue Sep 26 
12:46:17 2017        (r324015)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c   Tue Sep 26 
15:38:16 2017        (r324016)
@@ -2283,8 +2283,13 @@ zil_commit_waiter(zilog_t *zilog, zil_commit_waiter_t 
         * zil_process_commit_list() function.
         */
        int pct = MAX(zfs_commit_timeout_pct, 1);
+#if defined(illumos) || !defined(_KERNEL)
        hrtime_t sleep = (zilog->zl_last_lwb_latency * pct) / 100;
        hrtime_t wakeup = gethrtime() + sleep;
+#else
+       sbintime_t sleep = nstosbt((zilog->zl_last_lwb_latency * pct) / 100);
+       sbintime_t wakeup = getsbinuptime() + sleep;
+#endif
        boolean_t timedout = B_FALSE;
 
        while (!zcw->zcw_done) {
@@ -2322,7 +2327,7 @@ zil_commit_waiter(zilog_t *zilog, zil_commit_waiter_t 
                         * timeout is reached; responsibility (2) from
                         * the comment above this function.
                         */
-#ifdef illumos
+#if defined(illumos) || !defined(_KERNEL)
                        clock_t timeleft = cv_timedwait_hires(&zcw->zcw_cv,
                            &zcw->zcw_lock, wakeup, USEC2NSEC(1),
                            CALLOUT_FLAG_ABSOLUTE);
@@ -2331,8 +2336,7 @@ zil_commit_waiter(zilog_t *zilog, zil_commit_waiter_t 
                                continue;
 #else
                        int wait_err = cv_timedwait_sbt(&zcw->zcw_cv,
-                           &zcw->zcw_lock, wakeup * SBT_1NS, SBT_1NS,
-                           C_ABSOLUTE);
+                           &zcw->zcw_lock, wakeup, SBT_1NS, C_ABSOLUTE);
                        if (wait_err != EWOULDBLOCK || zcw->zcw_done)
                                continue;
 #endif
_______________________________________________
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