There is a logic error in the FS subsystem related to softdep.
Setup:
3 HDDs (a,b,c)
a contains the OS
b and c have the same size
If the following is true a kernel should panic:
if (data > avaiable storage)
How I triggered it:
Put some files to C and then dd if=/dev/wd1c bs=1m | gzip -9
> /mnt/hdd2/hdd.img.gz
The problem here is that HDD "a" is NOT even used but the kernel still
panics. NO special mount operations nor newfs flags where used.
Just: noatime, softdep
The code wich triggers the panic is located at:
/src/sys/ufs/ffs/ffs_softdep.c
And it should be this condition:
if ((bp->b_flags & B_ERROR) == 0)
panic("softdep_deallocate_dependencies: dangling deps");
softdep_error(bp->b_vp->v_mount->mnt_stat.f_mntonname,
bp->b_error); panic("softdep_deallocate_dependencies: unrecovered I/O
error");
/: got error 5 while accessing filesystem
panic: softdep_deallocate_depencies: unrecovered I/O error
Stopped at: Debugger+0x5; leave
trace:
Debugger() at Debugger+0x5
panic() at panic+0x122
softdep_deallocate_depencies() at softdep_deallocate_depencies+0x1b
brelse() brelse+0x1c2
wddone() at wddone+0x9b
wdc_ata_ctrl_intr() at wdc_ata_ctrl_intre+0x220
wdcintr() at wdintr+0xb2
pccide_pci_intr() at pciide_pci_intr+0x6d
Xintr_ioapic_level7() at Xintr_ioapic_level7+0xec
interrupted
end trace frame: 0x0, count: -10
0:
This should considered a serious issue because it leads ultimatively to
dataloss and a normal user would not assume that softdep might be that
risky.
Should I report it to the other BSDs as well?
Kind regards,
Sebastian