From: bfields@fieldses.org (J. Bruce Fields)
To: Jeff Layton <jlayton@redhat.com>
Cc: 焦晓冬 <milestonejxd@gmail.com>,
R.E.Wolff@bitwizard.nl, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: POSIX violation by writeback error
Date: Tue, 4 Sep 2018 12:12:03 -0400 [thread overview]
Message-ID: <20180904161203.GD17478@fieldses.org> (raw)
In-Reply-To: <cd137e88c9e882200c08c7336aa7b5a1c84a7ba3.camel@redhat.com>
On Tue, Sep 04, 2018 at 11:44:20AM -0400, Jeff Layton wrote:
> On Tue, 2018-09-04 at 22:56 +0800, 焦晓冬 wrote:
> > A practical and concrete example may be,
> > A disk cleaner program that first searches for garbage files that won't be used
> > anymore and save the list in a file (open()-write()-close()) and wait for the
> > user to confirm the list of files to be removed. A writeback error occurs
> > and the related page/inode/address_space gets evicted while the user is
> > taking a long thought about it. Finally, the user hits enter and the
> > cleaner begin
> > to open() read() the list again. But what gets removed is the old list
> > of files that
> > was generated several months ago...
> >
> > Another example may be,
> > An email editor and a busy mail sender. A well written mail to my boss is
> > composed by this email editor and is saved in a file (open()-write()-close()).
> > The mail sender gets notified with the path of the mail file to queue it and
> > send it later. A writeback error occurs and the related
> > page/inode/address_space gets evicted while the mail is still waiting in the
> > queue of the mail sender. Finally, the mail file is open() read() by the sender,
> > but what is sent is the mail to my girlfriend that was composed yesterday...
> >
> > In both cases, the files are not meant to be persisted onto the disk.
> > So, fsync()
> > is not likely to be called.
> >
>
> So at what point are you going to give up on keeping the data? The
> fundamental problem here is an open-ended commitment. We (justifiably)
> avoid those in kernel development because it might leave the system
> without a way out of a resource crunch.
Well, I think the point was that in the above examples you'd prefer that
the read just fail--no need to keep the data. A bit marking the file
(or even the entire filesystem) unreadable would satisfy posix, I guess.
Whether that's practical, I don't know.
> > - If the following read() could be served by a page in memory, just returns the
> > data. If the following read() could not be served by a page in memory and the
> > inode/address_space has a writeback error mark, returns EIO.
> > If there is a writeback error on the file, and the request data could
> > not be served
> > by a page in memory, it means we are reading a (partically) corrupted
> > (out-of-data)
> > file. Receiving an EIO is expected.
> >
>
> No, an error on read is not expected there. Consider this:
>
> Suppose the backend filesystem (maybe an NFSv3 export) is really r/o,
> but was mounted r/w. An application queues up a bunch of writes that of
> course can't be written back (they get EROFS or something when they're
> flushed back to the server), but that application never calls fsync.
>
> A completely unrelated application is running as a user that can open
> the file for read, but not r/w. It then goes to open and read the file
> and then gets EIO back or maybe even EROFS.
>
> Why should that application (which did zero writes) have any reason to
> think that the error was due to prior writeback failure by a completely
> separate process? Does EROFS make sense when you're attempting to do a
> read anyway?
>
> Moreover, what is that application's remedy in this case? It just wants
> to read the file, but may not be able to even open it for write to issue
> an fsync to "clear" the error. How do we get things moving again so it
> can do what it wants?
>
> I think your suggestion would open the floodgates for local DoS attacks.
Do we really care about processes with write permissions (even only
local client-side write permissions) being able to DoS readers? In
general readers kinda have to trust writers.
--b.
next prev parent reply other threads:[~2018-09-04 20:37 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-04 6:32 POSIX violation by writeback error 焦晓冬
2018-09-04 7:53 ` Rogier Wolff
2018-09-04 8:58 ` 焦晓冬
2018-09-04 9:29 ` Rogier Wolff
2018-09-04 10:45 ` 焦晓冬
2018-09-04 11:09 ` Jeff Layton
2018-09-04 14:56 ` 焦晓冬
2018-09-04 15:44 ` Jeff Layton
2018-09-04 16:12 ` J. Bruce Fields [this message]
2018-09-04 16:23 ` Rogier Wolff
2018-09-04 18:54 ` J. Bruce Fields
2018-09-04 20:18 ` Jeff Layton
2018-09-04 20:35 ` Vito Caputo
2018-09-04 21:02 ` Matthew Wilcox
2018-09-05 0:51 ` Dave Chinner
2018-09-05 8:24 ` 焦晓冬
2018-09-05 10:55 ` Jeff Layton
2018-09-05 12:07 ` Rogier Wolff
2018-09-06 2:57 ` Dave Chinner
2018-09-06 2:57 ` Dave Chinner
2018-09-06 9:17 ` Rogier Wolff
2018-09-24 23:09 ` Alan Cox
2018-09-05 13:53 ` J. Bruce Fields
2018-09-05 7:08 ` Rogier Wolff
2018-09-05 7:39 ` Martin Steigerwald
2018-09-05 7:39 ` Martin Steigerwald
2018-09-05 8:04 ` Rogier Wolff
2018-09-05 8:04 ` Rogier Wolff
2018-09-05 8:37 ` 焦晓冬
2018-09-05 12:07 ` Austin S. Hemmelgarn
2018-09-05 12:46 ` Rogier Wolff
2018-09-05 9:32 ` Martin Steigerwald
2018-09-05 9:32 ` Martin Steigerwald
2018-09-05 7:37 ` Martin Steigerwald
2018-09-05 11:42 ` Jeff Layton
2018-09-05 8:09 ` 焦晓冬
2018-09-05 13:08 ` Theodore Y. Ts'o
2018-09-24 23:21 ` Alan Cox
2018-09-06 7:28 ` 焦晓冬
[not found] <CAJDTihx2yaR-_-9Ks1PoFcrKNZgUOoLdN-wRTTMV76Jg_dCLrw@mail.gmail.com>
2018-09-04 10:56 ` Jeff Layton
2018-09-24 23:30 ` Alan Cox
2018-09-25 11:15 ` Jeff Layton
2018-09-25 15:46 ` Theodore Y. Ts'o
2018-09-25 16:17 ` Rogier Wolff
2018-09-25 16:39 ` Alan Cox
2018-09-25 16:41 ` Jeff Layton
2018-09-25 22:30 ` Theodore Y. Ts'o
2018-09-26 18:10 ` Alan Cox
2018-09-26 21:49 ` Theodore Y. Ts'o
2018-09-27 22:48 ` Alan Cox
2018-09-27 7:18 ` Rogier Wolff
2018-09-27 12:43 ` Jeff Layton
2018-09-27 14:27 ` Theodore Y. Ts'o
2018-09-25 17:35 ` Adam Borowski
2018-09-25 22:46 ` Theodore Y. 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=20180904161203.GD17478@fieldses.org \
--to=bfields@fieldses.org \
--cc=R.E.Wolff@bitwizard.nl \
--cc=jlayton@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=milestonejxd@gmail.com \
/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.