rm -rf can fail sometimes with an error from fts_read. Make it honor

fflag to ignore fts_read errors, but stop deleting from that directory
because no further progress can be made.

When building a kernel with a high -j value on a high core count
machine, during the cleanobj phase we can wind up doing multiple rm
-rf at the same time for modules that have subdirectories. This
exposed this race (sometimes) as fts_read can return an error if the
directory is removed by another rm -rf. Since the intent of the -f
flag was to ignore errors, even if this was a bug in fts_read, we
should ignore the error like we've been instructed to do.
This commit is contained in:
imp 2014-07-07 23:21:20 +00:00
parent d55a30df87
commit feebbf9480

View File

@ -335,7 +335,7 @@ rm_tree(char **argv)
warn("%s", p->fts_path); warn("%s", p->fts_path);
eval = 1; eval = 1;
} }
if (errno) if (!fflag && errno)
err(1, "fts_read"); err(1, "fts_read");
fts_close(fts); fts_close(fts);
} }