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
NetBSD rpi2 9.0_BETA NetBSD 9.0_BETA (GENERIC) #0: Mon Nov  4 14:49:31 UTC 2019 evbarm
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

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]

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

Restoring the tiny, tmpfs mount points lets the system boot successfully.
Using the configuration described above triggers the problem every time the system is booted.
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