Thread (8 messages) 8 messages, 3 authors, 2018-12-18

Re: Upcoming merge window

From: Mike Snitzer <hidden>
Date: 2018-12-18 03:45:44
Subsystem: block layer, the rest · Maintainers: Jens Axboe, Linus Torvalds

On Mon, Dec 17 2018 at  7:26pm -0500,
Jens Axboe [off-list ref] wrote:
On 12/17/18 5:16 PM, Jens Axboe wrote:
quoted
On 12/17/18 4:49 PM, Jens Axboe wrote:
quoted
On 12/17/18 4:27 PM, Jens Axboe wrote:
quoted
On 12/17/18 4:16 PM, Bart Van Assche wrote:
quoted
On Mon, 2018-12-17 at 11:28 -0700, Jens Axboe wrote:
quoted
As I'm sure you're all aware, the merge window is coming up. This time
it happens to coincide with that is a holiday for most. My plan is to
send in an EARLY pull request to Linus, Thursday at the latest. If you're
sitting on anything that should go in with the initial merge, then I need
to have it ASAP.

I'll do a later pull about a week in with things that were missed, but
I'm really hoping to make that fixes only. Any driver updates etc should
go in now.
Hi Jens,

If I run blktests/srp/002 against Linus' master branch then that test passes,
no matter how many times I run that test. If I run that test against your
for-next branch however (commit 6a252f2772c0) then that test hangs. The output
of my list-pending-block-requests script is as follows when the hang occurs:
Ugh, I'll try and run that here again, that test is unfortunately such a pain
to run and requires me to manually install multipath libs (and remember to
uninstall before rebooting, or udev fails?).

I'll take a look!
Looks like what Ming was talking about. CC'ing Ming and Mike. Lots of
kworkers are stuck like this:

[  252.310187] kworker/2:19    D14072  8147      2 0x80000000
[  252.316803] Workqueue: dio/dm-2 dio_aio_complete_work
[  252.322925] Call Trace:
[  252.326137]  ? __schedule+0x231/0x5f0
[  252.330703]  schedule+0x2a/0x80
[  252.334689]  rwsem_down_write_failed+0x204/0x320
[  252.340330]  ? generic_make_request_checks+0x55/0x370
[  252.346542]  ? call_rwsem_down_write_failed+0x13/0x20
[  252.352669]  call_rwsem_down_write_failed+0x13/0x20
[  252.358601]  down_write+0x1b/0x30
[  252.362781]  __generic_file_fsync+0x3e/0xb0
[  252.367933]  ext4_sync_file+0xcc/0x2e0
[  252.372599]  dio_complete+0x1c4/0x210
[  252.377168]  process_one_work+0x1cb/0x350
[  252.382915]  worker_thread+0x28/0x3c0
[  252.387482]  ? process_one_work+0x350/0x350
[  252.392632]  kthread+0x107/0x120
[  252.396717]  ? kthread_park+0x80/0x80
[  252.401285]  ret_from_fork+0x1f/0x30

Where did this regression come from? This was passing just fine
recently.
Looks like this is the offending commit:

commit c4576aed8d85d808cd6443bda58393d525207d01
Author: Mike Snitzer [off-list ref]
Date:   Tue Dec 11 09:10:26 2018 -0500

    dm: fix request-based dm's use of dm_wait_for_completion
Yep confirmed, reverted that on top and it passes. dm-2 has plenty of
requests that are allocated and pending dispatch, so the md_in_flight()
will return true. Mike, should it be checking for allocated requests or
in-flight?
I thought we could just check for allocated (as blk_mq_check_busy() does
now) but clearly that is too broad a scope because I tested your
suggestion and it allows the srp/002 test to pass:
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 6847f014606b..edbf4bb1b3e8 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -812,7 +812,7 @@ static bool blk_mq_check_busy(struct blk_mq_hw_ctx *hctx, struct request *rq,
         * If we find a request, we know the queue is busy. Return false
         * to stop the iteration.
         */
-       if (rq->q == hctx->queue) {
+       if (rq->state == MQ_RQ_IN_FLIGHT && rq->q == hctx->queue) {
                bool *busy = priv;

                *busy = true;
blk_mq_check_busy() was introduced for DM to user as a replacement for
its own inflight accounting it was doing:
  ae879912 blk-mq: provide a helper to check if a queue is busy

So nothing else is currently calling it, but if you'd prefer to rename
the functions to reflect the narrower MQ_RQ_IN_FLIGHT check that is fine
by me (e.g. blk_mq_check_inflight and blk_mq_queue_has_inflight).

Mike
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help