Author: mav
Date: Sat Nov 12 23:50:48 2016
New Revision: 308593
URL: https://svnweb.freebsd.org/changeset/base/308593

Log:
  MFC r308169:
  Pass to zvol_log_truncate() same sync values as to zvol_log_write().
  
  Surplus marking of TX_TRUNCATE records as sync could result in putting them
  into ZIL before previous writes if ones were async.

Modified:
  stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
==============================================================================
--- stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c     Sat Nov 
12 23:40:40 2016        (r308592)
+++ stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c     Sat Nov 
12 23:50:48 2016        (r308593)
@@ -1670,7 +1670,7 @@ zvol_strategy(struct bio *bp)
                if (error != 0) {
                        dmu_tx_abort(tx);
                } else {
-                       zvol_log_truncate(zv, tx, off, resid, B_TRUE);
+                       zvol_log_truncate(zv, tx, off, resid, sync);
                        dmu_tx_commit(tx);
                        error = dmu_free_long_range(zv->zv_objset, ZVOL_OBJ,
                            off, resid);
@@ -3114,9 +3114,9 @@ zvol_d_ioctl(struct cdev *dev, u_long cm
 {
        zvol_state_t *zv;
        rl_t *rl;
-       off_t offset, length, chunk;
+       off_t offset, length;
        int i, error;
-       u_int u;
+       boolean_t sync;
 
        zv = dev->si_drv2;
 
@@ -3154,15 +3154,17 @@ zvol_d_ioctl(struct cdev *dev, u_long cm
                dmu_tx_t *tx = dmu_tx_create(zv->zv_objset);
                error = dmu_tx_assign(tx, TXG_WAIT);
                if (error != 0) {
+                       sync = FALSE;
                        dmu_tx_abort(tx);
                } else {
-                       zvol_log_truncate(zv, tx, offset, length, B_TRUE);
+                       sync = (zv->zv_objset->os_sync == ZFS_SYNC_ALWAYS);
+                       zvol_log_truncate(zv, tx, offset, length, sync);
                        dmu_tx_commit(tx);
                        error = dmu_free_long_range(zv->zv_objset, ZVOL_OBJ,
                            offset, length);
                }
                zfs_range_unlock(rl);
-               if (zv->zv_objset->os_sync == ZFS_SYNC_ALWAYS)
+               if (sync)
                        zil_commit(zv->zv_zilog, ZVOL_OBJ);
                break;
        case DIOCGSTRIPESIZE:
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to