NANDFS: out of space panic

Marcel Moolenaar marcel at xcllnt.net
Fri Aug 31 12:09:40 UTC 2012


On Aug 22, 2012, at 4:34 PM, Boris Astardzhiev <boris.astardzhiev at gmail.com> wrote:
> Now when I attempt to delete /mnt/file1234 I get a panic:
> root at smartcpe:/mnt # rm file1234
> panic: bmap_truncate_mapping: error 28 when truncate at level 1
> 
> KDB: enter: panic
> [ thread pid 606 tid 100047 ]
> Stopped at kdb_enter+0x48: ldrb r15, [r15, r15, ror r15]!
> db>
> 
> So how do I solve this? It is easily reproduced following this scenario
> every time.
> Up to this commit I've made the following minor changes so that


I ran into this as well. There are 2 aspects here:
1.  Currently errors pretty much result in panics by virtue
    of a compile-time option. This means that reasonable
    errors (i.e. errors that simply trigger recovery code
    or are being propagated upstream) also cause panics.
2.  There's a real bug. For me it gives the following panic
    (by virtue of me changing the behaviour of point 1):

nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
nandfs_add_blocks: error:1 when creating segment
nandfs_new_segment: cannot create segment error 1
create_segment: cannot create next segment
lock order reversal:
1st 0xd944e60c bufwait (bufwait) @ kern/vfs_bio.c:1905
2nd 0xc501cd18 devfs (devfs) @ fs/nandfs/nandfs_segment.c:769
KDB: stack backtrace:
db_trace_self_wrapper(c08fea97,746e656d,373a632e,a3936,0,...) at db_trace_self_wrapper+0x26
kdb_backtrace(c06cadeb,c09024bc,c0b03d88,301,c46c5a88,...) at kdb_backtrace+0x2a
_witness_debugger(c09024bc,c501cd18,c08f5fd8,c4921b80,c08e785b,...) at _witness_debugger+0x25
witness_checkorder(c501cd18,9,c08e7852,301,c501cd38,...) at witness_checkorder+0x86f
__lockmgr_args(c501cd18,80000,c501cd38,0,0,...) at __lockmgr_args+0x824
vop_stdlock(c46c5bbc,c08e76ed,c46c5b9c,c46c5b9c,c46c5bf8,...) at vop_stdlock+0x62
VOP_LOCK1_APV(c0961780,c46c5bbc,100000,c4ffc480,c4b15000,...) at VOP_LOCK1_APV+0xf3
nandfs_clean_segblocks(fee0,0,c46c5c6c,c46c5c6c,1,...) at nandfs_clean_segblocks+0x48
clean_seginfo(c0962360,c46c5c6c,317a,0,0,...) at clean_seginfo+0x49
nandfs_segment_constructor(c4b1ec00,0,5c,c08ed1d5,1f4,...) at nandfs_segment_constructor+0x5e5
nandfs_syncer(c4b1ec00,c46c5d08,c08f5110,3d8,c09b7520,...) at nandfs_syncer+0x8f
fork_exit(c05a63a0,c4b1ec00,c46c5d08) at fork_exit+0xb8
fork_trampoline() at fork_trampoline+0x8
--- trap 0, eip = 0, esp = 0xc46c5d40, ebp = 0 ---
panic: brelse: not dirty
cpuid = 0
KDB: enter: panic

I haven't had the time to look into it in detail.

Also: design documentation is missing right now, which
does mean that there's a pretty steep curve for anyone
who didn't write the file system to go in and fix any
bugs.

FYI,

-- 
Marcel Moolenaar
marcel at xcllnt.net




More information about the freebsd-fs mailing list