All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Locke <kevin@kevinlocke.name>
To: Amir Goldstein <amir73il@gmail.com>
Cc: overlayfs <linux-unionfs@vger.kernel.org>
Subject: Re: EIO for removed redirected files?
Date: Wed, 12 Aug 2020 10:05:13 -0600	[thread overview]
Message-ID: <20200812160513.GA249458@kevinolos> (raw)
In-Reply-To: <CAOQ4uxih2aDb7_LPSUb5Q4xBL5_gDaqtmC0M0M4EtCDgKLvi3w@mail.gmail.com>

Thanks for the quick response Amir!

On Wed, 2020-08-12 at 18:21 +0300, Amir Goldstein wrote:
> On Wed, Aug 12, 2020 at 5:06 PM Kevin Locke <kevin@kevinlocke.name> wrote:
>> I recently encountered files on an overlayfs which returned EIO
>> (Input/output error) for open, stat, and unlink (and presumably other)
>> syscalls.  I eventually determined that the files had been redirected
> 
> It's *empty* redirected files that cause the alleged problem.

When I replace `touch foo.txt` with `echo 123 > foo.txt` I observe the
same behavior.  If I understand you correctly, you are saying that EIO
is correct for non-empty files, but potentially incorrect for empty
files (which could be copied rather than redirected, since there is no
space saving)?

>> At this point, the only way to recover appears to be unmounting the
>> overlay and removing the file from upper (or updating the
>> overlay.redirect xattr to a valid location).  Is that correct?
>>
>> Is this the intended behavior?
> 
> Yes.
> What would you expect to happen when data of metacopy file has been removed?

After reflection, EIO probably makes the most sense for open/stat.  It
might be nice to be able to unlink the file to allow recovery (in the
sense of being able to reuse the name) without unmounting the overlay,
but the documentation updates may be sufficient to keep users from
getting into this state.

>> unionmount-testsuite.  If so, perhaps the behavior could be noted in
>> "Changes to underlying filesystems" in
>> Documentation/filesystems/overlayfs.rst?  I'd be willing to write a
>> first draft.  (I doubt I understand it well enough to get everything
>> right on the first try.)
> 
> I guess the only thing we could document is that changes to underlying
> layers with metacopy and redirects have undefined results.
> Vivek was a proponent of making the statements about outcome of
> changes to underlying layers sound more harsh.

That sounds good to me.  My current use case involves offline changes to
the lower layer on a routine basis, and I interpreted the current
wording "Offline changes, when the overlay is not mounted, are allowed
to either the upper or the lower trees." to mean that such offline
modifications would not break things in unexpected ways.

In retrospect, I should have expected this behavior, but as someone
previously unfamiliar with overlayfs, I hadn't considered that metacopy
results in file redirects and that if the underlying file were removed
without removing any redirects pointing to it that it would manifest in
this way and be so difficult to clean up.

If metacopy and dir_redirect are disabled, are offline modifications to
the lower layer permitted, or could any such modification result in
undefined behavior?

>> Also, if there is any way this could be made easier to debug, it might
>> be helpful for users, particularly newbies like myself.  Perhaps logging
>> bad redirects at KERN_ERR?  If that would be too noisy, perhaps only
>> behind a debug module option?  Again, if this is acceptable I'd be
>> willing to draft a patch.  (Same caveat as above.)
> 
> There are a handful of places in overlayfs where returning EIO is
> combined with informative pr_warn_ratelimited().

Ah, indeed.  Would doing so for missing/invalid metacopy/redirect make
sense?

> You can see some examples in ovl_lookup(), which is where the reported
> EIO is coming from:
>         if (d.metacopy || (uppermetacopy && !ctr)) {
>                 err = -EIO;
> 
> Having said all that, metacopy and redirects on lower empty files seems
> like an unintentional outcome.
> 
> If you care about this use case particularly, you may try this untested patch:

Thanks for the patch!  (Especially so quickly.)  I'll try it out soon.

Thanks again,
Kevin

  reply	other threads:[~2020-08-12 16:05 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-12 13:55 EIO for removed redirected files? Kevin Locke
2020-08-12 15:21 ` Amir Goldstein
2020-08-12 16:05   ` Kevin Locke [this message]
2020-08-12 17:06     ` Amir Goldstein
2020-08-13 17:22       ` Kevin Locke
2020-08-14  6:20         ` Amir Goldstein
2020-08-17 13:56       ` Vivek Goyal

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=20200812160513.GA249458@kevinolos \
    --to=kevin@kevinlocke.name \
    --cc=amir73il@gmail.com \
    --cc=linux-unionfs@vger.kernel.org \
    /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.