From: Theodore Ts'o <tytso@mit.edu>
To: Jan Kara <jack@suse.cz>
Cc: Nikolay Borisov <kernel@kyup.com>, Jan Kara <jack@suse.com>,
linux-ext4 <linux-ext4@vger.kernel.org>
Subject: Re: Sleeping function called in invalid context
Date: Thu, 4 Aug 2016 16:58:45 -0400 [thread overview]
Message-ID: <20160804205845.GC10933@thunk.org> (raw)
In-Reply-To: <20160804160550.GA12861@quack2.suse.cz>
On Thu, Aug 04, 2016 at 06:05:50PM +0200, Jan Kara wrote:
> On Wed 03-08-16 10:22:03, Nikolay Borisov wrote:
> > While doing some testing on today's checkout of Linus' master branch I
> > got the following:
>
> >
> > [ 9.302725] BUG: sleeping function called from invalid context at ./include/linux/buffer_head.h:358
> > [ 9.304403] in_atomic(): 1, irqs_disabled(): 0, pid: 1718, name: mount
> > [ 9.305633] 8 locks held by mount/1718:
>
> Yeah, this looks like a regression cause by commit 4743f83990614af "ext4:
> Fix WARN_ON_ONCE in ext4_commit_super()". Arguably that cure is worse than
> the disease but OTOH calling ext4_commit_super() from an atomic context
> (like __ext4_grp_locked_error() does) sucks as well.
>
> I'm not sure what the right fix is here. The cleanest would probably be to
> always drop group lock in __ext4_grp_locked_error() and make sure we always
> properly bail out of mballoc code on such error. But that's a non-trivial
> amount of work. Not sure if other ext4 people have opinion on this?
The easist way to fix this is defer the ext4_commit_super() to a
workqueue. We only need this in the errors=continue case, and in that
scenario we're not in a hurry when the superblock gets written out.
In fact, we probably want to be doing this for all of the
errors=continue cases when we want to save the error state to the
superblock, so we can do the update properly using the journal,
instead of calling ext4_commit_super() which just force writes the
block.
(Of course, if the journal is aborted we'll need to fall back to using
ext4_commit_super, of course.)
- Ted
next prev parent reply other threads:[~2016-08-04 20:59 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-03 7:22 Sleeping function called in invalid context Nikolay Borisov
2016-08-04 16:05 ` Jan Kara
2016-08-04 20:58 ` Theodore Ts'o [this message]
2016-08-05 6:29 ` Nikolay Borisov
2016-08-05 14:56 ` Theodore Ts'o
2016-08-05 17:06 ` Darrick J. Wong
2016-08-11 19:52 ` Andreas Dilger
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=20160804205845.GC10933@thunk.org \
--to=tytso@mit.edu \
--cc=jack@suse.com \
--cc=jack@suse.cz \
--cc=kernel@kyup.com \
--cc=linux-ext4@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.