Re: isofs kernel panic

From: Konstantin Belousov <kostikbel_at_gmail.com>
Date: Sun, 27 Dec 2015 12:09:27 +0200
On Sun, Dec 27, 2015 at 03:38:48AM -0500, Shawn Webb wrote:
> Hey All,
> 
> This is from booting a new installer ISO, generated today from a very
> recent commit:
> 
> === Begin Log ===
> Trying to mount root from cd9660:/dev/iso9660/11_0__HBSD_AMD64_CD [ro]...
> lock order reversal:
>  1st 0xfffffe00f6222e40 bufwait (bufwait) _at_ /jenkins/workspace/HardenedBSD-master-amd64/sys/vm/vm_pager.c:380
>  2nd 0xfffff800063785f0 isofs (isofs) _at_ /jenkins/workspace/HardenedBSD-master-amd64/sys/kern/imgact_elf.c:883
> stack backtrace:
> #0 0xffffffff80a7ce70 at witness_debugger+0x70
> #1 0xffffffff80a7cd71 at witness_checkorder+0xe71
> #2 0xffffffff80a0033b at __lockmgr_args+0xd3b
> #3 0xffffffff80ac2fdc at vop_stdlock+0x3c
> #4 0xffffffff80fc0fc0 at VOP_LOCK1_APV+0x100
> #5 0xffffffff80ae397a at _vn_lock+0x9a
> #6 0xffffffff809c4b01 at exec_elf64_imgact+0xa91
> #7 0xffffffff809e35e9 at kern_execve+0x4b9
> #8 0xffffffff809e2ddc at sys_execve+0x4c
> #9 0xffffffff809c760a at start_init+0x26a
> #10 0xffffffff809eadb4 at fork_exit+0x84
> #11 0xffffffff80e4e9ae at fork_trampoline+0xe
> userret: returning with the following locks held:
> exclusive lockmgr bufwait (bufwait) r = 0 (0xfffffe00f6222c10) locked _at_ /jenkins/workspace/HardenedBSD-master-amd64/sys/vm/vm_pager.c:380
> exclusive lockmgr bufwait (bufwait) r = 0 (0xfffffe00f6222e40) locked _at_ /jenkins/workspace/HardenedBSD-master-amd64/sys/vm/vm_pager.c:380
> panic: witness_warn
> === End Log ===
> 
> This is 11-CURRENT/amd64, based on HardenedBSD commit
> f0a4c61a2e9e2433db632d70d5764e79c5b84b7a. I booted the ISO up in bhyve
> using vmrun.sh. I haven't ruled out anything on HardenedBSD's side, yet,
> but we don't have any changes that would cause a panic'ing LOR in
> vm_pager.c. I'll do some more investigative work when I get some more
> sleep. But if anyone has any ideas, please let me know. I kinda wonder
> if this is related to the recent VFS changes by FreeBSD.

The following change would fix your problem, I did not tested it.

diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index ff30f4d..66dd29d 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
_at__at_ -806,6 +806,7 _at__at_ vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int count,
 	 * than a page size, then use special small filesystem code.
 	 */
 	if (pagesperblock == 0) {
+		relpbuf(bp, freecnt);
 		for (i = 0; i < count; i++) {
 			PCPU_INC(cnt.v_vnodein);
 			PCPU_INC(cnt.v_vnodepgsin);
Received on Sun Dec 27 2015 - 09:09:34 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:01 UTC