[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200709225936.GZ2005@dread.disaster.area>
Date: Fri, 10 Jul 2020 08:59:36 +1000
From: Dave Chinner <david@...morbit.com>
To: "Darrick J. Wong" <darrick.wong@...cle.com>
Cc: Matthew Wilcox <willy@...radead.org>,
Christoph Hellwig <hch@....de>,
Goldwyn Rodrigues <rgoldwyn@...e.de>,
linux-fsdevel@...r.kernel.org, linux-btrfs@...r.kernel.org,
fdmanana@...il.com, dsterba@...e.cz, cluster-devel@...hat.com,
linux-ext4@...r.kernel.org, linux-xfs@...r.kernel.org
Subject: Re: always fall back to buffered I/O after invalidation failures,
was: Re: [PATCH 2/6] iomap: IOMAP_DIO_RWF_NO_STALE_PAGECACHE return if page
invalidation fails
On Thu, Jul 09, 2020 at 10:10:38AM -0700, Darrick J. Wong wrote:
> On Thu, Jul 09, 2020 at 06:05:19PM +0100, Matthew Wilcox wrote:
> > On Thu, Jul 09, 2020 at 09:09:26AM -0700, Darrick J. Wong wrote:
> > > On Thu, Jul 09, 2020 at 12:25:27PM +1000, Dave Chinner wrote:
> > > > - */
> > > > - ret = invalidate_inode_pages2_range(mapping,
> > > > - pos >> PAGE_SHIFT, end >> PAGE_SHIFT);
> > > > - if (ret)
> > > > - dio_warn_stale_pagecache(iocb->ki_filp);
> > > > - ret = 0;
> > > > + if (iov_iter_rw(iter) == WRITE) {
> > > > + /*
> > > > + * Try to invalidate cache pages for the range we're direct
> > > > + * writing. If this invalidation fails, tough, the write will
> > > > + * still work, but racing two incompatible write paths is a
> > > > + * pretty crazy thing to do, so we don't support it 100%.
> > > > + */
> > > > + ret = invalidate_inode_pages2_range(mapping,
> > > > + pos >> PAGE_SHIFT, end >> PAGE_SHIFT);
> > > > + if (ret)
> > > > + dio_warn_stale_pagecache(iocb->ki_filp);
> > > > + ret = 0;
> > > >
> > > > - if (iov_iter_rw(iter) == WRITE && !wait_for_completion &&
> > > > - !inode->i_sb->s_dio_done_wq) {
> > > > - ret = sb_init_dio_done_wq(inode->i_sb);
> > > > - if (ret < 0)
> > > > - goto out_free_dio;
> > > > + if (!wait_for_completion &&
> > > > + !inode->i_sb->s_dio_done_wq) {
> > > > + ret = sb_init_dio_done_wq(inode->i_sb);
> > > > + if (ret < 0)
> > > > + goto out_free_dio;
>
> ...and yes I did add in the closing brace here. :P
Doh! I forgot to refresh the patch after fixing that. :/
Thanks!
Cheers,
Dave.
--
Dave Chinner
david@...morbit.com
Powered by blists - more mailing lists