NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/55833: Union filesystem enters kernel debugger.



>Number:         55833
>Category:       kern
>Synopsis:       Union filesystem enters kernel debugger.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Nov 30 21:25:00 +0000 2020
>Originator:     Rich Neswold
>Release:        NetBSD 9.0
>Organization:
>Environment:
NetBSD rpi2 9.0_BETA NetBSD 9.0_BETA (GENERIC) #0: Mon Nov  4 14:49:31 UTC 2019  mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/evbarm/compile/GENERIC evbarm
>Description:
On my RaspberryPi, I mount the filesystem read-only to reduce write cycles 
(/home is NFS mounted.) I had been mounting the subdirectories of /var with
several, tiny tmpfs drives but thought it'd be better to use the union
filesystem.

So I created /mnt/var. In /etc/fstab, I added an entry to mount a 64M, tmpfs on
it and an entry to map /mnt/var on top of /var via the union fs.
 
    tmpfs          /mnt/var        tmpfs   rw,hidden,-s64M
    /mnt/var       /var            union   rw

I added both /mnt/var and /var to 'critical_filesystems_local' in /etc/rc.conf.

With this configuration, every time I boot the Pi, it drops into the kernel 
debugger when building the 'dev' database:

    Building databases: dev
    [  18.xxxxxxx] uvm_fault(0x90fb86e0, 0, 1) -> e
    [  18.xxxxxxx] Fatal kernel mode data abort: 'Translation Fault (S)'
    [  18.xxxxxxx] trapframe: 0x9afe3b40
    [  18.xxxxxxx] FSR=00000005, FAR=0000003f, spsr=60010013
    [  18.xxxxxxx] r0 =0afe3b9c, r1 =ffffffff, r2 =00000000, r3 =ffffffff
    [  18.xxxxxxx] r4 =91278860, r5 =00000004, r6 =910bff78, r7 =910bff78
    [  18.xxxxxxx] r8 =00000000, r9 =808ebbc0, r10=80a73ad4, r11=9afe3bbc
    [  18.xxxxxxx] r12=00000000, ssp=9afe3b90, slr=8030e9e8, pc =8030e9ec

    Stopped in pid 146.1 (dev_mkdb) at       netbsd:tmpfs_loadvnode_0x38:    ldr r3, [r1, #0x040]
    db{0}>

A stack trace shows:

    db{0}> trace
    0x9aa3dbbc: netbsd:tmpfs_loadvnode+0x10
    0x9aa3dc24: netbsd:vcache_get+0x1f0
    0x9aa3dc5c: netbsd:tmpfs_gro_lookup+0x90
    0x9aa3dcd4: netbsd:genfs_sane_rename+0xce0
    0x9aa3dd0c: netbsd:tmpfs_sane_rename+0x48
    0x9aa3dd4c: netbsd:genfs_insane_rename+0x130
    0x9aa3dd8c: netbsd:VOP_RENAME+0x70
    0x9aa3ddbc: netbsd:union_rename+0x8c
    0x9aa3ddfc: netbsd:VOP_RENAME+0x70
    0x9aa3decc: netbsd:do_sys_renameat+0x6d0
    0x9aa3deec: netbsd:sys_rename+0x38
    0x9aa3dfac: netbsd:syscall+0x12c
    db{0}>

Restoring the tiny, tmpfs mount points lets the system boot successfully.
>How-To-Repeat:
Using the configuration described above triggers the problem every time the system is booted.
>Fix:
Since it's not particularly easy to switch between single user and multiuser mode on a RPi, I didn't experiment much. Avoiding the union filesystem restored it to a working system.



Home | Main Index | Thread Index | Old Index