Re: btrfs_direct_IO oops

From: Dave Jones
Date: Sat Oct 08 2016 - 19:20:29 EST


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