linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: Trond Myklebust <trondmy@primarydata.com>
Cc: "linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH v2 10/12] NFS: Do not serialise O_DIRECT reads and writes
Date: Thu, 23 Jun 2016 04:00:11 -0700	[thread overview]
Message-ID: <20160623110011.GA6247@infradead.org> (raw)
In-Reply-To: <97494C37-23D3-44FA-A9B8-1887E17429D9@primarydata.com>

On Wed, Jun 22, 2016 at 05:24:50PM +0000, Trond Myklebust wrote:
> If we?re going to worry about write atomicity in the buffered I/O case,
> then we really should also make sure that O_DIRECT writes are atomic
> w.r.t. page cache updates too.  With this locking model, a buffered
> read() can race with the O_DIRECT write() and get a mixture of old
> data and new.

The difference between buffered I/O and direct I/O is that the former
is covered by standards, and the latter is a Linux extension with very
lose semantics.  But I'm perfectly fine with removing the buffered
reader shared lock for now - for the purposes of direct I/O
synchronization it's not nessecary.


Yes.

> > +	if (mapping->nrpages) {
> > +		inode_lock(inode);
> 
> This is unnecessary now that we have a rw_semaphore. You don?t need to
> take an exclusive lock in order to serialise w.r.t. new writes, and by
> doing so you end up serialising all reads if there happens to be pages
> in the page cache. This is true whether or not those pages are dirty.

Traditionally we needed the exclusive lock around
invalidate_inode_pages2 and unmap_mapping_range, and from a quick look
that's what the existing callers all have.  I don't actually see that
requirement documented anywhere, though.

  reply	other threads:[~2016-06-23 11:00 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-21 21:34 [PATCH v2 01/12] NFS: Don't flush caches for a getattr that races with writeback Trond Myklebust
2016-06-21 21:34 ` [PATCH v2 02/12] NFS: Cache access checks more aggressively Trond Myklebust
2016-06-21 21:34   ` [PATCH v2 03/12] NFS: Cache aggressively when file is open for writing Trond Myklebust
2016-06-21 21:34     ` [PATCH v2 04/12] NFS: Kill NFS_INO_NFS_INO_FLUSHING: it is a performance killer Trond Myklebust
2016-06-21 21:34       ` [PATCH v2 05/12] NFS: writepage of a single page should not be synchronous Trond Myklebust
2016-06-21 21:34         ` [PATCH v2 06/12] NFS: Don't hold the inode lock across fsync() Trond Myklebust
2016-06-21 21:34           ` [PATCH v2 07/12] NFS: Don't call COMMIT in ->releasepage() Trond Myklebust
2016-06-21 21:34             ` [PATCH v2 08/12] NFS: Fix O_DIRECT verifier problems Trond Myklebust
2016-06-21 21:34               ` [PATCH v2 09/12] NFS: Ensure we reset the write verifier 'committed' value on resend Trond Myklebust
2016-06-21 21:34                 ` [PATCH v2 10/12] NFS: Do not serialise O_DIRECT reads and writes Trond Myklebust
2016-06-21 21:34                   ` [PATCH v2 11/12] NFS: Remove inode->i_dio_count from the NFS O_DIRECT code Trond Myklebust
2016-06-21 21:34                     ` [PATCH v2 12/12] NFS: Clean up nfs_direct_complete() Trond Myklebust
2016-06-22 16:43                       ` Christoph Hellwig
2016-06-22 16:42                     ` [PATCH v2 11/12] NFS: Remove inode->i_dio_count from the NFS O_DIRECT code Christoph Hellwig
2016-06-22 16:58                       ` Trond Myklebust
2016-06-23 10:19                         ` Christoph Hellwig
2016-06-22 17:58                     ` Anna Schumaker
2016-06-22 18:06                       ` Trond Myklebust
2016-06-22 18:08                         ` Anna Schumaker
2016-06-22 18:51                           ` Anna Schumaker
2016-06-22 19:42                             ` Trond Myklebust
2016-06-22 16:47                   ` [PATCH v2 10/12] NFS: Do not serialise O_DIRECT reads and writes Christoph Hellwig
2016-06-22 17:24                     ` Trond Myklebust
2016-06-23 11:00                       ` Christoph Hellwig [this message]
2016-06-21 22:25     ` [PATCH v2 03/12] NFS: Cache aggressively when file is open for writing Oleg Drokin
2016-06-22 13:06       ` Trond Myklebust
2016-06-22 16:19         ` Oleg Drokin
2016-06-22 15:48 ` [PATCH v2 01/12] NFS: Don't flush caches for a getattr that races with writeback Christoph Hellwig

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=20160623110011.GA6247@infradead.org \
    --to=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=trondmy@primarydata.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).