On Fri, Feb 26, 2021 at 10:32:50AM +1100, Stephen Rothwell wrote:
> > >  -        return filemap_read(iocb, to, ret);
> > >  +        if (iocb->ki_flags & IOCB_NOWAIT)
> > >  +                iocb->ki_flags |= IOCB_NOIO;
> > >  +
> > > -         ret = generic_file_buffered_read(iocb, to, ret);
> > > ++        ret = filemap_read(iocb, to, ret);
> > >  +
> > >  +        if (iocb->ki_flags & IOCB_NOWAIT) {
> > >  +                iocb->ki_flags &= ~IOCB_NOIO;
> > >  +                if (ret == 0)
> > >  +                        ret = -EAGAIN;
> > >  +        }
> > >  +
> > >  +        return ret;
> > >   }

I think the above code looks completely bogus.  Instead whatever code
in btrfs hecks for IOCB_NOIO to avoid blocking readahead should also
check IOCB_NOWAIT.

Reply via email to