All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eryu Guan <eguan@redhat.com>
To: Jan Kara <jack@suse.cz>
Cc: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
	lczerner@redhat.com
Subject: Re: [v4.14-rc3 bug] scheduling while atomic in generic/451 test on extN
Date: Fri, 13 Oct 2017 13:51:26 +0800	[thread overview]
Message-ID: <20171013055126.GO10593@eguan.usersys.redhat.com> (raw)
In-Reply-To: <20171012191815.GB32738@quack2.suse.cz>

On Thu, Oct 12, 2017 at 09:18:15PM +0200, Jan Kara wrote:
> On Fri 13-10-17 00:57:07, Eryu Guan wrote:
> > On Thu, Oct 12, 2017 at 05:07:40PM +0200, Jan Kara wrote:
> > > Hi Eryu!
> > > 
> > > On Thu 05-10-17 14:07:00, Eryu Guan wrote:
> > > > I hit "scheduling while atomic" bug by running fstests generic/451 on
> > > > extN filesystems in v4.14-rc3 testing, but it didn't reproduce for me on
> > > > every host I tried, but I've seen it multiple times on multiple hosts. A
> > > > test vm of mine with 4 vcpus and 8G memory reproduced the bug reliably,
> > > > while a bare metal host with 8 cpus and 8G mem couldn't.
> > > > 
> > > > This is due to commit 332391a9935d ("fs: Fix page cache inconsistency
> > > > when mixing buffered and AIO DIO"), which defers AIO DIO io completion
> > > > to a workqueue if the inode has mapped pages and does page cache
> > > > invalidation in process context. I think that the problem is that the
> > > > pages can be mapped after the dio->inode->i_mapping->nrpages check, so
> > > > we're doing page cache invalidation, which could sleep, in interrupt
> > > > context, thus "scheduling while atomic" bug happens.
> > > > 
> > > > Defering all AIO DIO completion to workqueue unconditionally (as what
> > > > the iomap based path does) fixed the problem for me. But there're
> > > > performance concerns to do so in the original discussions.
> > > > 
> > > > https://www.spinics.net/lists/linux-fsdevel/msg112669.html
> > > 
> > > Thanks for report and the detailed analysis. I think your analysis is
> > > correct and the nrpages check in dio_bio_end_aio() is racy. My solution to
> > > this would be to pass to dio_complete() as an argument whether invalidation
> > > is required or not (and set it to true for deferred completion and to false
> > > when we decide not to defer completion since nrpages is 0 at that moment).
> > > Lukas?
> > 
> > But wouldn't that bring the original bug back? i.e. read the stale data
> > from pagecache, because it's possible that we need to invalidate the
> > caches but we didn't.
> 
> I don't think so. dio_bio_end_aio() gets called when the storage has
> acknowledged the data is stored. Thus once that is invoked, if we establish
> new page cache page, it will be loaded with new data and thus we won't
> carry stale data in it.

I think you're right, I missed that. Thanks for the explanation!

Eryu

> 
> 								Honza
> -- 
> Jan Kara <jack@suse.com>
> SUSE Labs, CR

  reply	other threads:[~2017-10-13  5:51 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-05  6:07 [v4.14-rc3 bug] scheduling while atomic in generic/451 test on extN Eryu Guan
2017-10-05  6:07 ` Eryu Guan
2017-10-12 15:07 ` Jan Kara
2017-10-12 15:07   ` Jan Kara
2017-10-12 16:57   ` Eryu Guan
2017-10-12 19:18     ` Jan Kara
2017-10-13  5:51       ` Eryu Guan [this message]
2017-10-13 10:28   ` Lukas Czerner
2017-10-13 10:28     ` Lukas Czerner
2017-10-13 13:22     ` Lukas Czerner
2017-10-13 13:22       ` Lukas Czerner
2017-10-16  8:17       ` Jan Kara

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=20171013055126.GO10593@eguan.usersys.redhat.com \
    --to=eguan@redhat.com \
    --cc=jack@suse.cz \
    --cc=lczerner@redhat.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    /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.