The UFS/FFS filesystem checks directory link counts when doing
authormckusick <mckusick@FreeBSD.org>
Wed, 26 Oct 2016 20:28:23 +0000 (20:28 +0000)
committermckusick <mckusick@FreeBSD.org>
Wed, 26 Oct 2016 20:28:23 +0000 (20:28 +0000)
commitae1163bd55cf5e5d92ec33187efa34779e04ddea
tree2dd3b5d412a03ec62dd153fc883e1e1e1a0f0e69
parent817e926f2d75c8c4a8a3f77ef473411db12cb814
The UFS/FFS filesystem checks directory link counts when doing
directory create and delete operations. If it ever finds a directory
with a link count less than 2, it panics. Thus, an rm -rf that
encounters a directory with a link count below 2 causes a kernel
panic. The proposed fix is to return the error EINVAL rather than
panicing. The effect is that the requested operation is not done,
but the system continues to run. At a more convenient later time,
the filesystem can be unmounted and cleaned (with fsck or journal
run). Once cleaned, the operation can be rerun to successful
completion.

This fix takes that approach. The panic message has been converted
into a uprintf(9) to provide the user with the inode number and
filesystem mount point of the offending directory and EINVAL is
returned for the operation.

The long (three year) delay in fixing this problem occurred because
the bug was misclassified when originally assigned and only this week
was found during a sweep of old unresolved bug reports.

PR:          180894
Reviewed by: kib
MFC after:   2 weeks
sys/ufs/ufs/ufs_vnops.c