X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzfs_log.c;fp=module%2Fzfs%2Fzfs_log.c;h=cbd6f1cb41a6bb518db1d4ea2d3965f27e66fde1;hb=d5446cfc528262ae3a41da31a8524c9d2e793f45;hp=4f144d553eeb8499143d6698cecdf55610f00af1;hpb=23e3c743f6e36768b97234c3de18f4682111e6c3;p=zfs.git diff --git a/module/zfs/zfs_log.c b/module/zfs/zfs_log.c index 4f144d5..cbd6f1c 100644 --- a/module/zfs/zfs_log.c +++ b/module/zfs/zfs_log.c @@ -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);