Author: mav
Date: Tue Nov  1 12:47:19 2016
New Revision: 308169
URL: https://svnweb.freebsd.org/changeset/base/308169

Log:
  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.
  
  MFC after:    2 weeks

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

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c  Tue Nov  1 
08:30:06 2016        (r308168)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c  Tue Nov  1 
12:47:19 2016        (r308169)
@@ -1674,7 +1674,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);
@@ -3118,9 +3118,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;
 
@@ -3158,15 +3158,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:
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to