diff options
author | imp <imp@FreeBSD.org> | 2014-07-07 23:21:20 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2014-07-07 23:21:20 +0000 |
commit | feebbf948082a86af4c3e309b7d9e74e885d5809 (patch) | |
tree | ea0fee72f5d46270e2d4a36c8ce5a0b67930f04d /bin | |
parent | d55a30df870eb67d9907a23b6e346b26018e53cb (diff) | |
download | FreeBSD-src-feebbf948082a86af4c3e309b7d9e74e885d5809.zip FreeBSD-src-feebbf948082a86af4c3e309b7d9e74e885d5809.tar.gz |
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.
Diffstat (limited to 'bin')
-rw-r--r-- | bin/rm/rm.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/bin/rm/rm.c b/bin/rm/rm.c index 976b4ee..46807b9 100644 --- a/bin/rm/rm.c +++ b/bin/rm/rm.c @@ -335,7 +335,7 @@ err: warn("%s", p->fts_path); eval = 1; } - if (errno) + if (!fflag && errno) err(1, "fts_read"); fts_close(fts); } |