Page MenuHomeFreeBSD

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

Authored by jah on Sat, Nov 8, 4:45 AM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Nov 15, 4:26 PM
Unknown Object (File)
Sat, Nov 15, 4:25 PM
Unknown Object (File)
Sat, Nov 15, 4:25 PM
Unknown Object (File)
Sat, Nov 15, 2:20 PM
Unknown Object (File)
Sun, Nov 9, 12:18 PM
Unknown Object (File)
Sat, Nov 8, 8:56 PM
Unknown Object (File)
Sat, Nov 8, 11:42 AM
Unknown Object (File)
Sat, Nov 8, 8:59 AM
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.Sat, Nov 8, 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.Sat, Nov 8, 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.