Subject: Re: bug#41001: mkdir: cannot create directory ‘test’: File exists

From: Jonny Grant <[email-masked]>
Date: Sun, 3 May 2020 14:02:29 +0100

Hi!

On 03/05/2020 00:13, Paul Eggert wrote:
> On 5/2/20 3:41 PM, Jonny Grant wrote:
>> Is a more accurate strerror considered unreliable?
>>
>> Current:
>> mkdir: cannot create directory ‘test’: File exists
>>
>> Proposed:
>> mkdir: cannot create directory ‘test’: Is a directory
> 
> I don't understand this comment. As I understand it you're proposing a change to
> the mkdir command not a change to the strerror library function, and the change
> you're proposing would introduce a race condition to the mkdir command.

As the mkdir error returned to the shell is the same, I don't feel the 
difference between the words "File exists" and "Is a directory" on the 
terminal can be considered a race condition.

You're right, there will be a race condition where two processes are 
both creating and deleting the same files. Any software which is 
creating and deleting the same directories in parallel will encounter a 
multitude of errors - all bets are off.

> A better fix would be to change the mkdir system call so that it sets errno to
> EISDIR in this situation. This would fix not only the mkdir utility, but also
> lots of other programs; and it wouldn't introduce a race condition. So if you're
> interested in getting the problem fixed, I suggest that you propose such a
> change to the Linux kernel developers.

Yes, if Linux kernel developers would deviate from POSIX.  I emailed 
[email-masked] the lines of code to change.

I'm not confident it will get in, even harder to get into POSIX I expect.

ext4_match() is what would need to be updated to check if an entry is a 
directory

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/fs/ext4/namei.c

Cheers, Jonny