diff options
author | Prakash Surya <[email protected]> | 2017-09-07 15:12:35 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-07-10 10:25:14 -0700 |
commit | ab11916583e5215d3143fa9109a9f8b4a80714f7 (patch) | |
tree | c0f74540fdd9da93ee4fa805bb2b0b48f1d6ef44 /module/zfs/zil.c | |
parent | a7ed98d8b5cefbd62ed39b9cf25860dad3922861 (diff) |
OpenZFS 9456 - ztest failure in zil_commit_waiter_timeout
Problem
=======
Illumos bug 8373 was integrated, which now presents a code path where
"dmu_tx_assign" can fail. When "dmu_tx_assign" fails, it will not issue
the lwb that was passed in to "zil_lwb_write_issue". As a result, when
"zil_lwb_write_issue" returns, the lwb will still be in the "opened"
state, just as it was when "zil_lwb_write_issue" was originally called.
Solution
========
As a result of this new call path, the failed assertion needs to be
modified to be aware of this new possibility. Thus, we can only assert
that the lwb is no longer in the "opened" state if the returned lwb is
non-null, since we cannot differentiate between the case of
"dmu_tx_assign" failing or "zio_alloc_zil" failing within the call to
"zil_lwb_write_issue".
Authored by: Prakash Surya <[email protected]>
Reviewed by: Matt Ahrens <[email protected]>
Reviewed by: Serapheim Dimitropoulos <[email protected]>
Reviewed by: Prakash Surya <[email protected]>
Reviewed by: George Melikov <[email protected]>
Ported-by: Brian Behlendorf <[email protected]>
Approved by: Matt Ahrens <[email protected]>
OpenZFS-issue: https://www.illumos.org/issues/9456
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/a8b09f4e
Closes #7695
Diffstat (limited to 'module/zfs/zil.c')
-rw-r--r-- | module/zfs/zil.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/module/zfs/zil.c b/module/zfs/zil.c index d0b1c1d14..f7c793d40 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -2399,7 +2399,7 @@ zil_commit_waiter_timeout(zilog_t *zilog, zil_commit_waiter_t *zcw) */ lwb_t *nlwb = zil_lwb_write_issue(zilog, lwb); - ASSERT3S(lwb->lwb_state, !=, LWB_STATE_OPENED); + IMPLY(nlwb != NULL, lwb->lwb_state != LWB_STATE_OPENED); /* * Since the lwb's zio hadn't been issued by the time this thread |