From: Nikolay Borisov <kernel@kyup.com>
To: Theodore Ts'o <tytso@mit.edu>, 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: Fri, 5 Aug 2016 09:29:59 +0300 [thread overview]
Message-ID: <57A43267.7030608@kyup.com> (raw)
In-Reply-To: <20160804205845.GC10933@thunk.org>
On 08/04/2016 11:58 PM, Theodore Ts'o wrote:
> 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.
Is errors=continue the default option if nothing specifically is
specified at mount time, since I don't have this set explicitly:
/dev/vda / ext4 rw,relatime,data=ordered 0 0
>
> 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
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2016-08-05 6:30 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
2016-08-05 6:29 ` Nikolay Borisov [this message]
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=57A43267.7030608@kyup.com \
--to=kernel@kyup.com \
--cc=jack@suse.com \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/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.