kern/156039: nullfs + unionfs do not compose,
result in unlocking unlocked lock
John Giacomoni
john.giacomoni at lineratesystems.com
Tue Mar 29 13:30:12 UTC 2011
>Number: 156039
>Category: kern
>Synopsis: nullfs + unionfs do not compose, result in unlocking unlocked lock
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Mar 29 13:30:11 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: John Giacomoni
>Release: FreeBSD 7.3 and 7.4
>Organization:
LineRate Systems
>Environment:
FreeBSD 7.4-RELEASE FreeBSD 7.4-RELEASE #0: Fri Feb 18 01:55:22 UTC 2011 root at driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
using unionfs to mount a nullfs mounted directory on top of a 3rd directory causes a panic inside vfs.
I am trying to build an appliance with the ability to easily load different versions at boot time based on read-only boot images.
briefly what I have is a partion with 4 directories
/boot
/images
/persist
/running
1. Mount read-only file backed memory disk image, /images/ver1.img, onto /running
2. mount_nullfs /persist /running/persist
3. mount_unionfs /running/persist/usr /running/usr
the problem manifests at boot (during init) as a unlocking unheld lock and it seems to be while the system is launching getty (parallel access race?).
This problem manifests identically whether the mounting is done by an init_script (loader.conf) or an rc.d script.
>How-To-Repeat:
I created a simplified rc.d to demonstrate the problem.
echo over_enable="YES" >> /etc/rc,conf
mkdir -p /over
mkdir -p /null
then add the following script as /etc/rc.d/over
#!/bin/sh
# PROVIDE: over
# BEFORE: dumpon
. /etc/rc.subr
name="over"
start_cmd="over_start"
stop_cmd=":"
over_start()
{
#
# Make sure /over and /null exist on root fs
#
echo load_kld nullfs.ko
load_kld nullfs.ko
echo mount_nullfs /null /over
mount_nullfs /null /over
echo load_kld unionfs.ko
load_kld unionfs.ko
echo mount_unionfs -ocopymode=transparent /over /usr
mount_unionfs -ocopymode=transparent /over /usr
}
load_rc_config $name
run_rc_command "$1"
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list