From: Michael Tokarev <mjt@tls.msk.ru>
To: "Ted Ts'o" <tytso@mit.edu>,
Linux-kernel <linux-kernel@vger.kernel.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: unlink(nonexistent): EROFS or ENOENT?
Date: Mon, 06 Jun 2011 21:13:23 +0400 [thread overview]
Message-ID: <4DED0AB3.6060708@msgid.tls.msk.ru> (raw)
In-Reply-To: <20110606033949.GE7180@thunk.org>
Thank you for the answer. I thought noone will reply... ;)
06.06.2011 07:39, Ted Ts'o wrote:
> On Sun, May 29, 2011 at 08:08:55PM +0400, Michael Tokarev wrote:
>> Hello.
>>
>> Just noticed that at least on ext4, unlinking a
>> non-existing file from a read-only filesystem
>> results in EROFS instead of ENOENT. I'd expect
>> it return ENOENT - it is more logical, at least
>> in my opinion.
>>
>> For one, (readonly) NFS mount returns ENOENT in
>> this case.
>
> Um, it doesn't for me. Testing on v3.0-rc1:
>
> # ls /test/foo; rm /test/foo
> ls: cannot access /test/foo: No such file or directory
> rm: cannot remove `/test/foo': No such file or directory
This is a hack in coreutils rm to work around this
kernel change. The comment at
http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/remove.c#n450
says:
/* The unlinkat from kernels like linux-2.6.32 reports EROFS even for
nonexistent files. When the file is indeed missing, map that to ENOENT,
so that rm -f ignores it, as required. Even without -f, this is useful
because it makes rm print the more precise diagnostic. */
so that rm(1) calls stat(2) to see if the file actually
exist if unlinkat() returned EROFS, and turns this errno
into ENOENT.
That is, rm(1) output is not a good indicator. Use
strace rm -f /test/foo 2>&1 | grep unlink
to see the actual errno reported by the kernel.
Here's the POSIX description of unlink (and unlinkat) again:
http://pubs.opengroup.org/onlinepubs/009695399/functions/unlink.html
Thanks!
/mjt
next prev parent reply other threads:[~2011-06-06 17:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-29 16:08 unlink(nonexistent): EROFS or ENOENT? Michael Tokarev
2011-05-29 16:14 ` Michael Tokarev
2011-06-06 3:39 ` Ted Ts'o
2011-06-06 17:13 ` Michael Tokarev [this message]
2011-06-06 17:18 ` Michael Tokarev
2011-06-06 19:55 ` Ted Ts'o
2011-06-06 20:37 ` [PATCH] vfs: make unlink() return ENOENT in preference to EROFS Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DED0AB3.6060708@msgid.tls.msk.ru \
--to=mjt@tls.msk.ru \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.