Repository navigation
chown, chgrp: change a directory operand that cannot be read - #15124
abendrothj wants to merge 2 commits into
Conversation
Merging this PR will degrade performance by 5.98%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | five_38_bit_primes |
1.6 s | 1.8 s | -12.27% |
| ❌ | Simulation | three_39_bit_primes |
583.2 ms | 644.8 ms | -9.55% |
| ⚡ | Simulation | thirteen_39_bit_primes |
9.1 s | 8.7 s | +4.74% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing abendrothj:chown-unreadable-dir-operand (c17a06e) with main (6292c03)
Footnotes
-
54 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
214b811 to
f1ff0e1
Compare
f1ff0e1 to
d2406f8
Compare
--from was checked on a stat of the name and the change was then made by name, so a rename landing in between changed a file that never had the required owner. On Linux, hold the file open with O_PATH, check that it is the one that was stat'd and still passes --from, and change it through that descriptor with fchownat(AT_EMPTY_PATH). This covers operands and -R entries. A file found replaced is left alone; as with GNU, that fails without a message, and -v reports the change that was not made.
On Linux, a directory operand was changed through a descriptor opened for reading, and when that open failed it was skipped without a message. Change it by name then, or through an O_PATH descriptor with --from, as for any other file. Under -R it is still left alone and the failure to read it reported, as with GNU.
d2406f8 to
c17a06e
Compare
A directory operand was changed through a descriptor opened for reading, and when that open failed the change was skipped without a message.
Without -R the directory is now changed like any other file: by name, or through an O_PATH descriptor with --from. Under -R it's still left alone with exit 1, as with GNU 9.12. Test:
test_chown_unreadable_dir_operand.Based on #15029; only the last commit is new.
Closes #15114