-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
zpool over a ramdisk causes oops inside brd.c #1107
Comments
@behlendorf the oops happens in line 76 of:
|
This issue was caused by a long standing bug in the kernel's brd driver. ZFS just happens to trigger it fairly reliably due to the large number of concurrent access to the device from the z_wr_* threads. I'll submit the fix upstream, in the meanwhile the following fix closes the race and resolves the problem. |
Posted upstream to LKML. |
Fixed by @behlendorf upstream. |
@cwedgwood Thanks for closing these out, I'd completely forgotten about some of these things which were fixed. |
The previous patch openzfs#14841 appeared to have significant flaw, causing deadlocks if zl_get_data callback got blocked waiting for TXG sync. I already handled some of such cases in the original patch, but issue openzfs#14982 shown cases that were impossible to solve in that design. This patch fixes the problem by postponing log blocks allocation till the very end, just before the zios issue, leaving nothing blocking after that point to cause deadlocks. Before that point though any sleeps are now allowed, not causing sync thread blockage. This require slightly more complicated lwb state machine to allocate blocks and issue zios in proper order. But with removal of special early issue workarounds the new code is much cleaner now, and should even be more efficient. Since this patch uses null zios between write, I've found that null zios do not wait for logical children ready status in zio_ready(), that makes parent write to proceed prematurely, producing incorrect log blocks. Added ZIO_CHILD_LOGICAL_BIT to zio_wait_for_children() fixes it. Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Co-authored-by: Alexander Motin <mav@FreeBSD.org>
3.6.x
when using a zpool over a ramdisk it triggers an oops inside brd.c
making the pool
make zvol(s)
dd data into the zvols and after a few seconds:
The text was updated successfully, but these errors were encountered: