From: Mike Snitzer <snitzer@redhat.com>
To: Keith Busch <keith.busch@intel.com>
Cc: Christoph Hellwig <hch@infradead.org>,
Jun'ichi Nomura <j-nomura@ce.jp.nec.com>,
dm-devel@redhat.com
Subject: Re: [PATCHv2 0/4] blk-mq support for dm multipath
Date: Fri, 12 Dec 2014 21:08:33 -0500 [thread overview]
Message-ID: <20141213020833.GA21426@redhat.com> (raw)
In-Reply-To: <20141206060939.GB2110@redhat.com>
On Sat, Dec 06 2014 at 1:09am -0500,
Mike Snitzer <snitzer@redhat.com> wrote:
> On Sat, Dec 06 2014 at 12:53am -0500,
> Mike Snitzer <snitzer@redhat.com> wrote:
>
> > But in general this code needs _a lot_ more testing/review.
> > Sadly I cannot stage it for 3.19 inclusion.
>
> FYI, even though the mpath device is created without crashing it hangs
> when IO is issued to it (mkfs.xfs /dev/mapper/mpathi):
>
> kernel: mkfs.xfs D ffff88033fc34740 0 2792 2457 0x00000080
> kernel: ffff880319057cb8 0000000000000082 ffff880327e84c80 0000000000014740
> kernel: ffff880319057fd8 0000000000014740 ffff88032e644c80 ffff880327e84c80
> kernel: ffff88033fc35058 ffff88033ff940e8 ffff880319057d48 0000000000000082
> kernel: Call Trace:
> kernel: [<ffffffff81633a50>] ? bit_wait+0x50/0x50
> kernel: [<ffffffff8163325d>] io_schedule+0x9d/0x120
> kernel: [<ffffffff81633a7c>] bit_wait_io+0x2c/0x50
> kernel: [<ffffffff816337eb>] __wait_on_bit_lock+0x4b/0xb0
> kernel: [<ffffffff81166da9>] __lock_page_killable+0xb9/0xe0
> kernel: [<ffffffff810b1c20>] ? autoremove_wake_function+0x40/0x40
> kernel: [<ffffffff81168e48>] generic_file_read_iter+0x3e8/0x610
> kernel: [<ffffffff81213bf7>] blkdev_read_iter+0x37/0x40
> kernel: [<ffffffff811dba1b>] new_sync_read+0x8b/0xd0
> kernel: [<ffffffff811dc188>] vfs_read+0x98/0x170
> kernel: [<ffffffff811dce65>] SyS_read+0x55/0xd0
> kernel: [<ffffffff81637769>] system_call_fastpath+0x16/0x1b
>
> kernel: kdmwork-253:15 D ffff88033fc54740 0 2745 2 0x00000080
> kernel: ffff88031910bce8 0000000000000046 ffff88032cedb960 0000000000014740
> kernel: ffff88031910bfd8 0000000000014740 ffff88032e645610 ffff88032cedb960
> kernel: ffff88033fc55058 ffff880329565420 ffff880327c4f870 ffff880327c4f800
> kernel: Call Trace:
> kernel: [<ffffffff8163325d>] io_schedule+0x9d/0x120
> kernel: [<ffffffff812c47e8>] get_request+0x218/0x770
> kernel: [<ffffffff810b1be0>] ? prepare_to_wait_event+0xf0/0xf0
> kernel: [<ffffffff812c4dc7>] blk_get_request+0x87/0xe0
> kernel: [<ffffffffa0195bb1>] multipath_map+0x121/0x1b0 [dm_multipath]
> kernel: [<ffffffffa0001032>] map_tio_request+0x52/0x250 [dm_mod]
> kernel: [<ffffffff81090be2>] kthread_worker_fn+0x82/0x1d0
> kernel: [<ffffffff81090b60>] ? kthread_stop+0xe0/0xe0
> kernel: [<ffffffff81090818>] kthread+0xd8/0xf0
> kernel: [<ffffffff81090740>] ? kthread_create_on_node+0x1a0/0x1a0
> kernel: [<ffffffff816376bc>] ret_from_fork+0x7c/0xb0
> kernel: [<ffffffff81090740>] ? kthread_create_on_node+0x1a0/0x1a0
Pretty sure requests weren't completing due to deadlock because with non
blk-mq use-case special care _must_ be taken not to acquire the clone
request's queue lock in the completion path. See the comment in
drivers/md/dm.c:end_clone_request()
I couldn't come up with a way of salvaging having the old request-based
path use blk_get_request() in .map_mq and blk_put_request() in .unmap_rq
Instead I've gone the different direction of training DM core to
conditionally use either:
1) old-style request cloning in terms of a DM mempool
or
2) new-style blk_get_request+blk_put_request in dm-mpath target
2 is obviously used if the backing device is using blk-mq.
I've published a rebased patchset here (BUT I haven't tested the blk-mq
support yet.. I _think_ it should work but it could easily crash due to
some silly oversight. I'll test using virtio-blk in a guest on Monday):
https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/log/?h=dm-for-3.19-blk-mq
next prev parent reply other threads:[~2014-12-13 2:08 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-17 23:46 [PATCHv2 0/4] blk-mq support for dm multipath Keith Busch
2014-10-17 23:46 ` [PATCHv2 1/4] dm: prep initialized requests Keith Busch
2014-10-17 23:46 ` [PATCHv2 2/4] dm: Submit stacked requests in irq enabled context Keith Busch
2014-10-17 23:46 ` [PATCHv2 3/4] dm: Move request allocation to dm_target type Keith Busch
2014-10-17 23:46 ` [PATCHv2 4/4] block: blk-mq support for cloned requests Keith Busch
2014-10-28 18:13 ` [PATCHv2 0/4] blk-mq support for dm multipath Keith Busch
2014-10-28 18:26 ` Mike Snitzer
2014-12-05 23:25 ` Mike Snitzer
2014-12-05 23:33 ` Keith Busch
2014-12-06 0:35 ` Mike Snitzer
2014-12-06 5:53 ` Mike Snitzer
2014-12-06 6:09 ` Mike Snitzer
2014-12-13 2:08 ` Mike Snitzer [this message]
2014-10-28 18:48 ` Hannes Reinecke
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=20141213020833.GA21426@redhat.com \
--to=snitzer@redhat.com \
--cc=dm-devel@redhat.com \
--cc=hch@infradead.org \
--cc=j-nomura@ce.jp.nec.com \
--cc=keith.busch@intel.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.