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 --
* 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