coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mkdir -p competition on the same directory?


From: Peng Yu
Subject: Re: mkdir -p competition on the same directory?
Date: Thu, 9 Feb 2023 10:28:16 -0600

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]