From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Christoph Hellwig <hch@infradead.org>
Cc: linux-nfs@vger.kernel.org
Subject: Re: nfs_file_fsync question
Date: Sun, 27 Sep 2009 18:02:20 -0400 [thread overview]
Message-ID: <1254088940.4041.15.camel@heimdal.trondhjem.org> (raw)
In-Reply-To: <20090926171851.GA16056@infradead.org>
On Sat, 2009-09-26 at 13:18 -0400, Christoph Hellwig wrote:
> Can anyone explain what nfs_do_fsync/nfs_wb_all is trying to do?
nfs_do_fsync() is trying to ensure that if we start seeing errors on
asynchronous writebacks, then we
a) report those errors to userland asap.
b) fall back to synchronous writes until the error condition clears.
> We use it for two cases: either implementing ->fsync or the O_SYNC
> implementation in ->aio_write/->splice_write.
>
> But vfs_fsync_range which is used both by the fsync implementation and
> called from generic_file_aio_write / generic_file_splice_write alread
> y writes out all data and handles errors from it, so ->fsync does not
> need to bother with data at all. nfs_wb_all seems like a
> re-implmenetation of the generic page flushing helpers in filemap.c
> and not actually touch metadata. So this code seems useless for the
> fsync and O_SYNC cases and only useful for the error catching. Which
> we already do slightly different at VFS-level. Any reasons to keep
> all this cruft around instead of properly integrating it with the
> VFS-level error reporting?
The VFS only covers 2 possible errors: EIO and ENOSPC. In NFS there are
a whole raft of other errors that can occur, and that we'd like to
report to userspace: e.g. authentication errors (EACCES or EROFS),
ESTALE, quota errors, ...
The other thing that nfs_wb_all() does, that is not covered by the VFS
is ensuring that the COMMIT gets sent, in order to ensure that the data
is physically flushed to disk on the server.
Cheers
Trond
prev parent reply other threads:[~2009-09-27 22:02 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-26 17:18 nfs_file_fsync question Christoph Hellwig
2009-09-27 22:02 ` Trond Myklebust [this message]
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=1254088940.4041.15.camel@heimdal.trondhjem.org \
--to=trond.myklebust@fys.uio.no \
--cc=hch@infradead.org \
--cc=linux-nfs@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox