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

Reply via email to