git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Evict meta data from ghost lists + l2arc headers
[zfs.git]
/
module
/
zfs
/
zfs_log.c
diff --git
a/module/zfs/zfs_log.c
b/module/zfs/zfs_log.c
index
4f144d5
..
cbd6f1c
100644
(file)
--- 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;
{
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)
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;
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;
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);
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);
itx->itx_sync = B_FALSE;
zil_itx_assign(zilog, itx, tx);