OK. I see the following output of `sudo dtruss mkdir -p d`. So essentially, coreutils first calls system function mkdir to make the directory. On error of the system call, it will check the target is a directory. If the target is indeed a directory, then no error message will be printed. Do I understand it correctly?
... mkdir("d\0", 0x1FF, 0x0) = -1 Err#17 stat64("d\0", 0x7FFEE9953D20, 0x0) = 0 0 ... Therefore, when there is competition among many calls to coreutils `mkdir -p`. The first instance will create the target, and the rest instances will fail on the system call of mkdir. But since they find the target is already created and is a directory, they will not complain about the error system call mkdir. That is why I never see an error similar to that of bash loadable `mkdir -p`. Is it so? On 2/9/23, Pádraig Brady <p...@draigbrady.com> wrote: > On 09/02/2023 14:57, Peng Yu wrote: >> https://lists.gnu.org/archive/html/help-bash/2023-02/msg00053.html >> >> Bash loadable `mkdir -p` has a problem when multiple loadable `mkdir >> -p` is called on the same directory simultaneously. >> >> But I never see coreutils' `mkdir -p` has the same problem. Does >> coreutils' `mkdir -p` do something extra to guard against the >> competition on the same directory? > > `mkdir d; strace mkdir -p d` would be instructive, > but yes coreutils mkdir essentially does: > > if mkdir(d) == EEXIST > return stat(d) == S_ISDIR > > cheers, > Pádraig > > -- Regards, Peng