The previous change added a check to fall back to waiting forever if the ZIL failed. This check was inverted; it actually caused it to always enter a timed wait when it failed. When combined with the fact that the last lwb issued likely would have failed quickly and so had a very small latency, this caused effectively an infinite loop. I initially fixed the check, but on further study I decided that this loop doesn't need to exist. The way the whole logic falls out of the original code in 2.1.5 is that if the lwb is OPENED, wait then issue it, and if not (or post issue), wait forever. The loop will never see more than two iterations, one for each half of the OPENED check, and it will stop as soon as the waiter is signaled (zcw_done true), so it can be far more simply expressed as a linear sequence: if (!issued) { wait a few if (done) return issue IO } if (!done) wait forever This still holds when the ZIL fails, because zil_commit_waiter_timeout() will check for failure under zl_issuer_lock, which zil_fail() will wait for, and in turn, zil_fail() will wait on zcw_lock and then signal the waiter before it releases zl_issuer_lock. Taken together, that means that zil_commit_waiter_timeout() will do all it can under the circumstances, and waiting forever the waiter to complete is all we can past that point. (cherry picked from commit c57c2ddd6f803f429da1e2b53abab277d781a5a3) |
||
---|---|---|
.github | ||
cmd | ||
config | ||
contrib | ||
etc | ||
include | ||
lib | ||
man | ||
module | ||
rpm | ||
scripts | ||
tests | ||
udev | ||
.editorconfig | ||
.gitignore | ||
.gitmodules | ||
AUTHORS | ||
CODE_OF_CONDUCT.md | ||
COPYRIGHT | ||
LICENSE | ||
META | ||
Makefile.am | ||
NEWS | ||
NOTICE | ||
README.md | ||
RELEASES.md | ||
TEST | ||
autogen.sh | ||
configure.ac | ||
copy-builtin | ||
zfs.release.in |
README.md
OpenZFS is an advanced file system and volume manager which was originally developed for Solaris and is now maintained by the OpenZFS community. This repository contains the code for running OpenZFS on Linux and FreeBSD.
Official Resources
- Documentation - for using and developing this repo
- ZoL Site - Linux release info & links
- Mailing lists
- OpenZFS site - for conference videos and info on other platforms (illumos, OSX, Windows, etc)
Installation
Full documentation for installing OpenZFS on your favorite operating system can be found at the Getting Started Page.
Contribute & Develop
We have a separate document with contribution guidelines.
We have a Code of Conduct.
Release
OpenZFS is released under a CDDL license.
For more details see the NOTICE, LICENSE and COPYRIGHT files; UCRL-CODE-235197
Supported Kernels
- The
META
file contains the officially recognized supported Linux kernel versions. - Supported FreeBSD versions are any supported branches and releases starting from 12.2-RELEASE.