[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20161008232008.nouzkd54kiquvpir@codemonkey.org.uk>
Date: Sat, 8 Oct 2016 19:20:08 -0400
From: Dave Jones <davej@...emonkey.org.uk>
To: Al Viro <viro@...IV.linux.org.uk>
Cc: Chris Mason <clm@...com>, Josef Bacik <jbacik@...com>,
David Sterba <dsterba@...e.com>, linux-btrfs@...r.kernel.org,
Linux Kernel <linux-kernel@...r.kernel.org>
Subject: Re: btrfs_direct_IO oops
On Sat, Oct 08, 2016 at 07:29:03PM +0100, Al Viro wrote:
> On Sat, Oct 08, 2016 at 02:08:06PM -0400, Dave Jones wrote:
> > That code: matches this dissembly:
> >
> > for (i = seg + 1; i < iter->nr_segs; i++) {
>
> *whoa*
>
> OK, that loop in check_direct_IO() should be done *ONLY* for
> iovec iter - even for a bvec one it's completely bogus, and
> for pipe ones it blows up immediately.
>
> Sorry, I'd missed that bogosity - replace
> if (iov_iter_rw(iter) == WRITE)
> return 0;
> with
> if (iov_iter_rw(iter) != READ || !iter_is_iovec(iter))
> return 0;
> in there; that should fix the damn thing.
Yep, seems to do the trick. Have been running the last six hours
without seeing it or anything similar since.
Dave
Powered by blists - more mailing lists