From: Jens Axboe <axboe@kernel.dk>
To: Olof Johansson <olof@lixom.net>
Cc: tj@kernel.org, linux-kernel@vger.kernel.org, vgoyal@redhat.com,
torvalds@linux-foundation.org
Subject: Re: [REGRESSION] [PATCH] block: uninitialized ioc->nr_tasks triggers WARN_ON
Date: Wed, 01 Aug 2012 12:16:04 +0200 [thread overview]
Message-ID: <501901E4.7060005@kernel.dk> (raw)
In-Reply-To: <20120717213643.GA24726@quad.lixom.net>
On 07/17/2012 11:36 PM, Olof Johansson wrote:
> Hi,
>
> I'm using the old-fashioned 'dump' backup tool, and I noticed that it spews the
> below warning as of 3.5-rc1 and later (3.4 is fine):
>
> [ 10.886893] ------------[ cut here ]------------
> [ 10.886904] WARNING: at include/linux/iocontext.h:140 copy_process+0x1488/0x1560()
> [ 10.886905] Hardware name: Bochs
> [ 10.886906] Modules linked in:
> [ 10.886908] Pid: 2430, comm: dump Not tainted 3.5.0-rc7+ #27
> [ 10.886908] Call Trace:
> [ 10.886911] [<ffffffff8107ce8a>] warn_slowpath_common+0x7a/0xb0
> [ 10.886912] [<ffffffff8107ced5>] warn_slowpath_null+0x15/0x20
> [ 10.886913] [<ffffffff8107c088>] copy_process+0x1488/0x1560
> [ 10.886914] [<ffffffff8107c244>] do_fork+0xb4/0x340
> [ 10.886918] [<ffffffff8108effa>] ? recalc_sigpending+0x1a/0x50
> [ 10.886919] [<ffffffff8108f6b2>] ? __set_task_blocked+0x32/0x80
> [ 10.886920] [<ffffffff81091afa>] ? __set_current_blocked+0x3a/0x60
> [ 10.886923] [<ffffffff81051db3>] sys_clone+0x23/0x30
> [ 10.886925] [<ffffffff8179bd73>] stub_clone+0x13/0x20
> [ 10.886927] [<ffffffff8179baa2>] ? system_call_fastpath+0x16/0x1b
> [ 10.886928] ---[ end trace 32a14af7ee6a590b ]---
>
> Reproducing is easy, I can hit it on a KVM system with a very basic
> config (x86_64 make defconfig + enable the drivers needed). To hit it,
> just install dump (on debian/ubuntu, not sure what the package might be
> called on Fedora), and:
>
> dump -o -f /tmp/foo /
>
> You'll see the warning in dmesg once it forks off the I/O process and
> starts dumping filesystem contents.
>
> I bisected it down to the following commit:
>
> commit f6e8d01bee036460e03bd4f6a79d014f98ba712e
> Author: Tejun Heo <tj@kernel.org>
> Date: Mon Mar 5 13:15:26 2012 -0800
>
> block: add io_context->active_ref
>
> Currently ioc->nr_tasks is used to decide two things - whether an ioc
> is done issuing IOs and whether it's shared by multiple tasks. This
> patch separate out the first into ioc->active_ref, which is acquired
> and released using {get|put}_io_context_active() respectively.
>
> This will be used to associate bio's with a given task. This patch
> doesn't introduce any visible behavior change.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Cc: Vivek Goyal <vgoyal@redhat.com>
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>
>
> It seems like the init of ioc->nr_tasks was removed in that patch,
> so it starts out at 0 instead of 1.
>
> Tejun, is the right thing here to add back the init, or should something else
> be done?
>
> The below patch removes the warning, but I haven't done any more extensive
> testing on it.
>
>
> Signed-off-by: Olof Johansson <olof@lixom.net>
>
> diff --git a/block/blk-ioc.c b/block/blk-ioc.c
> index 893b800..fab4cdd 100644
> --- a/block/blk-ioc.c
> +++ b/block/blk-ioc.c
> @@ -244,6 +244,7 @@ int create_task_io_context(struct task_struct *task, gfp_t gfp_flags, int node)
>
> /* initialize */
> atomic_long_set(&ioc->refcount, 1);
> + atomic_set(&ioc->nr_tasks, 1);
> atomic_set(&ioc->active_ref, 1);
> spin_lock_init(&ioc->lock);
> INIT_RADIX_TREE(&ioc->icq_tree, GFP_ATOMIC | __GFP_HIGH);
Thanks Olof, analysis (and patch) look correct. Applied for 3.6.
--
Jens Axboe
prev parent reply other threads:[~2012-08-01 10:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-17 21:36 [REGRESSION] [PATCH] block: uninitialized ioc->nr_tasks triggers WARN_ON Olof Johansson
2012-07-17 22:24 ` Tejun Heo
2012-07-24 13:35 ` Maxim V. Patlasov
2012-07-24 18:18 ` Tejun Heo
2012-08-01 10:16 ` Jens Axboe [this message]
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=501901E4.7060005@kernel.dk \
--to=axboe@kernel.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=olof@lixom.net \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=vgoyal@redhat.com \
/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.