Page MenuHomeFreeBSD

rm(1): remove whiteouts when forcibly removing directories
ClosedPublic

Authored by jah on Nov 8 2025, 4:45 AM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Mar 5, 4:27 AM
Unknown Object (File)
Wed, Mar 4, 6:11 AM
Unknown Object (File)
Tue, Mar 3, 5:22 PM
Unknown Object (File)
Tue, Mar 3, 5:22 PM
Unknown Object (File)
Tue, Feb 24, 12:35 AM
Unknown Object (File)
Thu, Feb 19, 6:01 AM
Unknown Object (File)
Wed, Feb 18, 1:49 AM
Unknown Object (File)
Jan 29 2026, 11:03 PM
Subscribers

Details

Summary

Commit 2ed053cde5 changed UFS' VOP_RMDIR() behavior to no longer
ignore whiteouts when determining whether a directory is empty,
unless explicitly requested by the caller. However, this also
necessitates a change to rm(1) to avoid breaking the expected
behavior when forcibly removing directory hierarchies via rm -fr.
I neglected to make this follow-on change despite discussing it
in the review for the breaking commit (D45987).

Finally address the breakage by making rm -fr imply FTS_WHITEOUT
when rm(1) reads directory contents via fts_read(3). While here,
also fix a logic error which produces a spurious 'No error' warning
message on stdout for each deleted whiteout.

Reported by: csjp
MFC after: 3 days

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

jah requested review of this revision.Nov 8 2025, 4:45 AM

Do we have automated tests for rm(1) somewhere that I'll need to change?

jah edited the summary of this revision. (Show Details)
This revision is now accepted and ready to land.Nov 8 2025, 10:23 AM
In D53640#1224643, @jah wrote:

Do we have automated tests for rm(1) somewhere that I'll need to change?

Nothing compelling that I know of, but we have some (tiny) script in bin/rm/tests.