Looking at the code in zil_commit_writer() on the one hand and in dsl_pool_sync_done() on the other hand I do not see a synchronization mechanism that could prevent their concurrent execution. In particular, I have observed a situation where a thread in zil_commit() saw that txg > spa_last_synced_txg(spa) and called zil_lwb_commit(), but then hit the assertion that zilog_is_dirty(zilog). And by the time when the assertion was hit spa_last_synced_txg became equal to txg.
(kgdb) bt #0 __curthread () at ./machine/pcpu.h:221 #1 doadump (textdump=textdump@entry=1) at /usr/src/sys/kern/kern_shutdown.c:298 #2 0xffffffff809f8071 in kern_reboot (howto=howto@entry=260) at /usr/src/sys/kern/kern_shutdown.c:366 #3 0xffffffff809f7ac0 in vpanic (fmt=<optimized out>, ap=ap@entry=0xfffffe004f5e38a8) at /usr/src/sys/kern/kern_shutdown.c:759 #4 0xffffffff809f832a in panic (fmt=<optimized out>) at /usr/src/sys/kern/kern_shutdown.c:690 #5 0xffffffff824721ff in assfail (a=<optimized out>, f=<optimized out>, l=<optimized out>) at /usr/src/sys/cddl/compat/opensolaris/kern/opensolaris_cmn_err.c:81 #6 0xffffffff8219d761 in zil_lwb_commit (lwb=0xfffff800027c1480, itx=0xfffff8003b728300, zilog=0xfffff8000ba25800) at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c:1059 #7 zil_commit_writer (zilog=0xfffff8000ba25800) at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c:1501 #8 zil_commit (zilog=0xfffff8000ba25800, foid=<optimized out>) at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c:1583 #9 0xffffffff821cb07c in zfs_fsync (ct=0x0, cr=<optimized out>, syncflag=0, vp=<optimized out>) at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c:2619 #10 zfs_freebsd_fsync (ap=<optimized out>) at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c:5053 #11 0xffffffff80f67f7f in VOP_FSYNC_APV (vop=<optimized out>, a=a@entry=0xfffffe004f5e3a80) at vnode_if.c:1331 #12 0xffffffff80abf752 in VOP_FSYNC (td=0xfffff8001b749a00, waitfor=1, vp=0xfffff800275703b0) at ./vnode_if.h:549 #13 sys_fsync (td=0xfffff8001b749a00, uap=<optimized out>) at /usr/src/sys/kern/vfs_syscalls.c:3399 #14 0xffffffff80e409c2 in syscallenter (sa=0xfffffe004f5e3af8, td=0xfffff8001b749a00) at /usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:135 #15 amd64_syscall (td=0xfffff8001b749a00, traced=0) at /usr/src/sys/amd64/amd64/trap.c:942 (kgdb) fr 7 #7 zil_commit_writer (zilog=0xfffff8000ba25800) at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c:1501 1501 in /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c (kgdb) p itx->itx_lr.lrc_txg $19 = 2279 (kgdb) p spa->spa_ubsync.ub_txg $20 = 2279 (kgdb) p/x spa->spa_freeze_txg $21 = 0xffffffffffffffff -- Andriy Gapon ------------------------------------------- openzfs-developer Archives: https://www.listbox.com/member/archive/274414/=now RSS Feed: https://www.listbox.com/member/archive/rss/274414/28015062-cce53afa Modify Your Subscription: https://www.listbox.com/member/?member_id=28015062&id_secret=28015062-f966d51c Powered by Listbox: http://www.listbox.com
