From: Al Viro <viro@ZenIV.linux.org.uk>
To: Christoph Hellwig <hch@infradead.org>
Cc: Jan Kara <jack@suse.cz>, Omar Sandoval <osandov@osandov.com>,
Andrew Morton <akpm@linux-foundation.org>,
Trond Myklebust <trond.myklebust@primarydata.com>,
David Sterba <dsterba@suse.cz>,
linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/8] swap: lock i_mutex for swap_writepage direct_IO
Date: Sat, 20 Dec 2014 06:51:33 +0000 [thread overview]
Message-ID: <20141220065133.GC22149@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20141215165615.GA19041@infradead.org>
On Mon, Dec 15, 2014 at 08:56:15AM -0800, Christoph Hellwig wrote:
> On Mon, Dec 15, 2014 at 05:27:05PM +0100, Jan Kara wrote:
> > On Sun 14-12-14 21:26:56, Omar Sandoval wrote:
> > > The generic write code locks i_mutex for a direct_IO. Swap-over-NFS
> > > doesn't grab the mutex because nfs_direct_IO doesn't expect i_mutex to
> > > be held, but most direct_IO implementations do.
> > I think you are speaking about direct IO writes only, aren't you? For DIO
> > reads we don't hold i_mutex AFAICS. And also for DIO writes we don't
> > necessarily hold i_mutex - see for example XFS which doesn't take i_mutex
> > for direct IO writes. It uses it's internal rwlock for this (see
> > xfs_file_dio_aio_write()). So I think this is just wrong.
>
> The problem is that the use of ->direct_IO by the swap code is a gross
> layering violation. ->direct_IO is a callback for the filesystem, and
> the swap code need to call ->read_iter instead of ->readpage and
> ->write_tier instead of ->direct_IO, and leave the locking to the
> filesystem.
The thing is, ->read_iter() and ->write_iter() might decide to fall back to
buffered IO path. XFS is unusual in that respect - there O_DIRECT ends up
with short write in such case. Other filesystems, OTOH...
WARNING: multiple messages have this Message-ID (diff)
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Christoph Hellwig <hch@infradead.org>
Cc: Jan Kara <jack@suse.cz>, Omar Sandoval <osandov@osandov.com>,
Andrew Morton <akpm@linux-foundation.org>,
Trond Myklebust <trond.myklebust@primarydata.com>,
David Sterba <dsterba@suse.cz>,
linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/8] swap: lock i_mutex for swap_writepage direct_IO
Date: Sat, 20 Dec 2014 06:51:33 +0000 [thread overview]
Message-ID: <20141220065133.GC22149@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20141215165615.GA19041@infradead.org>
On Mon, Dec 15, 2014 at 08:56:15AM -0800, Christoph Hellwig wrote:
> On Mon, Dec 15, 2014 at 05:27:05PM +0100, Jan Kara wrote:
> > On Sun 14-12-14 21:26:56, Omar Sandoval wrote:
> > > The generic write code locks i_mutex for a direct_IO. Swap-over-NFS
> > > doesn't grab the mutex because nfs_direct_IO doesn't expect i_mutex to
> > > be held, but most direct_IO implementations do.
> > I think you are speaking about direct IO writes only, aren't you? For DIO
> > reads we don't hold i_mutex AFAICS. And also for DIO writes we don't
> > necessarily hold i_mutex - see for example XFS which doesn't take i_mutex
> > for direct IO writes. It uses it's internal rwlock for this (see
> > xfs_file_dio_aio_write()). So I think this is just wrong.
>
> The problem is that the use of ->direct_IO by the swap code is a gross
> layering violation. ->direct_IO is a callback for the filesystem, and
> the swap code need to call ->read_iter instead of ->readpage and
> ->write_tier instead of ->direct_IO, and leave the locking to the
> filesystem.
The thing is, ->read_iter() and ->write_iter() might decide to fall back to
buffered IO path. XFS is unusual in that respect - there O_DIRECT ends up
with short write in such case. Other filesystems, OTOH...
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-12-20 6:51 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-15 5:26 [PATCH 0/8] clean up and generalize swap-over-NFS Omar Sandoval
2014-12-15 5:26 ` Omar Sandoval
2014-12-15 5:26 ` [PATCH 1/8] nfs: follow direct I/O write locking convention Omar Sandoval
2014-12-15 5:26 ` Omar Sandoval
2014-12-15 12:49 ` Trond Myklebust
2014-12-15 12:49 ` Trond Myklebust
2014-12-15 15:42 ` Omar Sandoval
2014-12-15 15:42 ` Omar Sandoval
2014-12-15 5:26 ` [PATCH 2/8] swap: lock i_mutex for swap_writepage direct_IO Omar Sandoval
2014-12-15 5:26 ` Omar Sandoval
2014-12-15 16:27 ` Jan Kara
2014-12-15 16:27 ` Jan Kara
2014-12-15 16:56 ` Christoph Hellwig
2014-12-15 16:56 ` Christoph Hellwig
2014-12-15 22:11 ` Omar Sandoval
2014-12-15 22:11 ` Omar Sandoval
2014-12-16 8:35 ` Christoph Hellwig
2014-12-16 8:35 ` Christoph Hellwig
2014-12-16 8:35 ` Christoph Hellwig
2014-12-16 8:56 ` Omar Sandoval
2014-12-16 8:56 ` Omar Sandoval
2014-12-17 8:06 ` Christoph Hellwig
2014-12-17 8:06 ` Christoph Hellwig
2014-12-17 8:20 ` Al Viro
2014-12-17 8:20 ` Al Viro
2014-12-17 8:24 ` Christoph Hellwig
2014-12-17 8:24 ` Christoph Hellwig
2014-12-17 14:58 ` Omar Sandoval
2014-12-17 14:58 ` Omar Sandoval
2014-12-17 18:52 ` Christoph Hellwig
2014-12-17 18:52 ` Christoph Hellwig
2014-12-17 22:03 ` Al Viro
2014-12-17 22:03 ` Al Viro
2014-12-19 6:24 ` Omar Sandoval
2014-12-19 6:24 ` Omar Sandoval
2014-12-19 6:28 ` Al Viro
2014-12-19 6:28 ` Al Viro
2014-12-19 6:28 ` Al Viro
2014-12-20 6:51 ` Al Viro [this message]
2014-12-20 6:51 ` Al Viro
2014-12-22 7:26 ` Omar Sandoval
2014-12-22 7:26 ` Omar Sandoval
2014-12-23 9:37 ` Christoph Hellwig
2014-12-23 9:37 ` Christoph Hellwig
2014-12-23 9:37 ` Christoph Hellwig
2014-12-15 5:26 ` [PATCH 3/8] swap: don't add ITER_BVEC flag to direct_IO rw Omar Sandoval
2014-12-15 5:26 ` Omar Sandoval
2014-12-15 6:16 ` Al Viro
2014-12-15 6:16 ` Al Viro
2014-12-15 15:57 ` Omar Sandoval
2014-12-15 15:57 ` Omar Sandoval
2014-12-15 5:26 ` [PATCH 4/8] iov_iter: add iov_iter_bvec and convert callers Omar Sandoval
2014-12-15 5:26 ` Omar Sandoval
2014-12-15 5:26 ` [PATCH 5/8] direct-io: don't dirty ITER_BVEC pages on read Omar Sandoval
2014-12-15 5:26 ` Omar Sandoval
2014-12-15 5:27 ` [PATCH 6/8] nfs: don't dirty ITER_BVEC pages read through direct I/O Omar Sandoval
2014-12-15 5:27 ` Omar Sandoval
2014-12-15 6:17 ` Al Viro
2014-12-15 6:17 ` Al Viro
2014-12-15 5:27 ` [PATCH 7/8] swap: use direct I/O for SWP_FILE swap_readpage Omar Sandoval
2014-12-15 5:27 ` Omar Sandoval
2014-12-15 5:27 ` [PATCH 8/8] vfs: update swap_{,de}activate documentation Omar Sandoval
2014-12-15 5:27 ` Omar Sandoval
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=20141220065133.GC22149@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=akpm@linux-foundation.org \
--cc=dsterba@suse.cz \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-nfs@vger.kernel.org \
--cc=osandov@osandov.com \
--cc=trond.myklebust@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 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.