kern/162195: panic with soft updates journaling during umount -f

Kirk Russell kirk at ba23.org
Mon Oct 31 11:30:12 UTC 2011


>Number:         162195
>Category:       kern
>Synopsis:       panic with soft updates journaling during umount -f
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Oct 31 11:30:11 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Kirk Russell
>Release:        FreeBSD 9.0-RC1
>Organization:
bstg
>Environment:
FreeBSD kleenex 9.0-RC1 FreeBSD 9.0-RC1 #0: Sun Oct 30 15:34:30 GMT 2011     root at kleenex:/usr/obj/usr/src/sys/KLEENEX  i386

>Description:
I have been testing a scratch filesystem, with soft updates journaling enabled.
During a test, if I run umount -f, I will see this panic:
    panic: check_inode_unwritten: busy inode

Here is the source to the load test:
http://www.ba23.org/bstgbugs/bstg0004.sh

Here is the output from /var/crash/core.txt:
http://www.ba23.org/bstgbugs/bstg0004.core.txt.gz

kleenex# sh bstg0004.sh 
/dev/ada0p4: 56320.0MB (115343360 sectors) block size 32768, fragment size 4096
        using 77 cylinder groups of 740.00MB, 23680 blks, 47360 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 192, 1515712, 3031232, 4546752, 6062272, 7577792, 9093312, 10608832, 12124352,
 13639872, 15155392, 16670912, 18186432, 19701952, 21217472, 22732992,
 24248512, 25764032, 27279552, 28795072, 30310592, 31826112, 33341632,
 34857152, 36372672, 37888192, 39403712, 40919232, 42434752, 43950272,
 45465792, 46981312, 48496832, 50012352, 51527872, 53043392, 54558912,
 56074432, 57589952, 59105472, 60620992, 62136512, 63652032, 65167552,
 66683072, 68198592, 69714112, 71229632, 72745152, 74260672, 75776192,
 77291712, 78807232, 80322752, 81838272, 83353792, 84869312, 86384832,
 87900352, 89415872, 90931392, 92446912, 93962432, 95477952, 96993472,
 98508992, 100024512, 101540032, 103055552, 104571072, 106086592, 107602112,
 109117632, 110633152, 112148672, 113664192, 115179712
Using inode 4 in cg 0 for 33554432 byte journal
newfs: soft updates journaling set
Test started   [fstorture 2.1-pfh]: Mon Oct 31 11:24:34 GMT 2011
Running for 3 seconds
panic: check_inode_unwritten: busy inode
cpuid = 0
KDB: enter: panic
[ thread pid 1383 tid 100058 ]
Stopped at      kdb_enter+0x3a: movl    $0,kdb_why
db> 

>How-To-Repeat:
Change the variables to match your installation.  Then run the script.

#!/bin/sh
#
# Copyright 2011 Kirk J. Russell
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Web page about FsTorture
# - http://fstools.macosforge.org/trac/wiki/FsTorture
#
# Port FsTorture to Freebsd
# - get source http://fstools.macosforge.org/trac/wiki/ToolsDevelopment
# - get membership.h http://www.ba23.org/~kirk/bstgbugs/membership.h
# - get patch http://www.ba23.org/~kirk/bstgbugs/fstorture.patch
# - gmake CFLAGS=-I. LDFLAGS="-lpthread -lm"
#
# Run this script and you will get a panic with FreeBSD 9.0-RC1
#     panic: check_inode_unwritten: busy inode
#
# If you disable soft updates journaling, the panic will not happen.
#

fstorture=../fstorture/fstorture

# block special device used for testing
fsspec=/dev/ada0p4

# mount point used for filesystem testing
fsfile=/fubar
mkdir -p ${fsfile}

# run the test for less then 2 minutes
for tries in 1 2 3
do
        for secs in 1 1 2 3 5 7 13
        do
                # Enable soft updates journaling
                newfs -j ${fsspec}
                mount ${fsspec} ${fsfile}

                # run fstorture in the background
                mkdir ${fsfile}/a ${fsfile}/b
                timeout="$(printf "%d+2\n" ${secs} | bc)"
                ${fstorture} ${fsfile}/a ${fsfile}/b 25 -t ${timeout}s &

                # block and then force the umount
                sleep ${secs}
                umount -f ${fsfile}

                # clean up
                killall fstorture fstorture fstorture
                wait
        done
done

>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list