Re: isofs kernel panic

From: Peter Holm <peter_at_holm.cc>
Date: Sun, 27 Dec 2015 15:26:02 +0100
On Sun, Dec 27, 2015 at 12:09:27PM +0200, Konstantin Belousov wrote:
> 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);
> _______________________________________________

This works for me, when running programs from a isofs file system.
-- 
Peter
Received on Sun Dec 27 2015 - 13:26:12 UTC

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