Since OpenZFS 7578 (1b7c1e5) if we have a ZVOL with logbias=throughput we will force WR_INDIRECT itxs in zvol_log_write() setting itx->itx_lr offset and length to the offset and length of the BIO from zvol_write()->zvol_log_write(): these offset and length are later used to take a range lock in zillog->zl_get_data function: zvol_get_data().
Now suppose we have a ZVOL with blocksize=8K and push 4K writes to offset 0: we will only be range-locking 0-4096. This means the ASSERTion we make in dbuf_unoverride() is no longer valid because now dmu_sync() is called from zilog's get_data functions holding a partial lock on the dbuf. Fix this by taking a range lock on the whole block in zvol_get_data(). You can view, comment on, or merge this pull request online at: https://github.com/openzfs/openzfs/pull/462 -- Commit Summary -- * 0000 Fix range locking in ZIL commit codepath -- File Changes -- M usr/src/pkg/manifests/system-test-zfstest.mf (1) M usr/src/test/zfs-tests/runfiles/delphix.run (3) M usr/src/test/zfs-tests/runfiles/omnios.run (3) M usr/src/test/zfs-tests/runfiles/openindiana.run (3) M usr/src/uts/common/fs/zfs/dmu.c (6) M usr/src/uts/common/fs/zfs/zfs_vnops.c (2) M usr/src/uts/common/fs/zfs/zvol.c (15) -- Patch Links -- https://github.com/openzfs/openzfs/pull/462.patch https://github.com/openzfs/openzfs/pull/462.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/openzfs/openzfs/pull/462 ------------------------------------------ openzfs-developer Archives: https://openzfs.topicbox.com/groups/developer/discussions/Tffbfe5cf4d0c0904-M6e4c3c2e466502166b4d7dbb Powered by Topicbox: https://topicbox.com
