Revert "Remove TSD zfs_fsyncer_key"
[zfs.git] / module / zfs / zfs_log.c
index 4f144d5..cbd6f1c 100644 (file)
@@ -457,6 +457,7 @@ zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype,
 {
        itx_wr_state_t write_state;
        boolean_t slogging;
+       uintptr_t fsync_cnt;
        ssize_t immediate_write_sz;
 
        if (zil_replaying(zilog, tx) || zp->z_unlinked)
@@ -474,6 +475,10 @@ zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype,
        else
                write_state = WR_NEED_COPY;
 
+       if ((fsync_cnt = (uintptr_t)tsd_get(zfs_fsyncer_key)) != 0) {
+               (void) tsd_set(zfs_fsyncer_key, (void *)(fsync_cnt - 1));
+       }
+
        while (resid) {
                itx_t *itx;
                lr_write_t *lr;
@@ -509,7 +514,8 @@ zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype,
 
                itx->itx_private = ZTOZSB(zp);
 
-               if (!(ioflag & (FSYNC | FDSYNC)) && (zp->z_sync_cnt == 0))
+               if (!(ioflag & (FSYNC | FDSYNC)) && (zp->z_sync_cnt == 0) &&
+                   (fsync_cnt == 0))
                        itx->itx_sync = B_FALSE;
 
                zil_itx_assign(zilog, itx, tx);