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

Reply via email to