Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1576590

Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body immediately

From Paolo Valente <paolo.valente@linaro.org>
Newsgroups linux.kernel
Subject Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body immediately
Date 2017-02-08 14:50 +0100
Message-ID <t8xZ0-7EC-11@gated-at.bofh.it> (permalink)
References <t8hUd-5Qz-5@gated-at.bofh.it> <t8lOa-8hG-33@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


> Il giorno 07 feb 2017, alle ore 22:45, Omar Sandoval <osandov@osandov.com> ha scritto:
> 
> On Tue, Feb 07, 2017 at 06:33:46PM +0100, Paolo Valente wrote:
>> Hi,
>> this patch is meant to show that, if the  body of the hook exit_icq is executed
>> from inside that hook, and not as deferred work, then a circular deadlock
>> occurs.
>> 
>> It happens if, on a CPU
>> - the body of icq_exit takes the scheduler lock,
>> - it does so from inside the exit_icq hook, which is invoked with the queue
>>  lock held
>> 
>> while, on another CPU
>> - bfq_bio_merge, after taking the scheduler lock, invokes bfq_bic_lookup,
>>  which, in its turn, takes the queue lock. bfq_bic_lookup needs to take such a
>>  lock, because it invokes ioc_lookup_icq.
>> 
>> For more details, here is a lockdep report, right before the deadlock did occur.
>> 
>> [   44.059877] ======================================================
>> [   44.124922] [ INFO: possible circular locking dependency detected ]
>> [   44.125795] 4.10.0-rc5-bfq-mq+ #38 Not tainted
>> [   44.126414] -------------------------------------------------------
>> [   44.127291] sync/2043 is trying to acquire lock:
>> [   44.128918]  (&(&bfqd->lock)->rlock){-.-...}, at: [<ffffffff90484195>] bfq_exit_icq_bfqq+0x55/0x140
>> [   44.134052]
>> [   44.134052] but task is already holding lock:
>> [   44.134868]  (&(&q->__queue_lock)->rlock){-.....}, at: [<ffffffff9044738e>] put_io_context_active+0x6e/0xc0
> 
> Hey, Paolo,
> 
> I only briefly skimmed the code, but what are you using the queue_lock
> for? You should just use your scheduler lock everywhere. blk-mq doesn't
> use the queue lock, so the scheduler is the only thing you need mutual
> exclusion against.

Hi Omar,
the cause of the problem is that the hook functions bfq_request_merge
and bfq_allow_bio_merge invoke, directly or through other functions,
the function bfq_bic_lookup, which, in its turn, invokes
ioc_lookup_icq.  The latter must be invoked with the queue lock held.
In particular the offending lines in bfq_bic_lookup are:

		spin_lock_irqsave(q->queue_lock, flags);
		icq = icq_to_bic(ioc_lookup_icq(ioc, q));
		spin_unlock_irqrestore(q->queue_lock, flags);

Maybe I'm missing something and we can avoid taking this lock?

Thanks,
Paolo

> I'm guessing if you stopped using that, your locking
> issues would go away.

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

[PATCH] bfq-mq: cause deadlock by executing exit_icq body immediately Paolo Valente <paolo.valente@linaro.org> - 2017-02-07 18:40 +0100
  Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body  immediately Omar Sandoval <osandov@osandov.com> - 2017-02-07 22:50 +0100
    Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body  immediately Omar Sandoval <osandov@osandov.com> - 2017-02-08 11:50 +0100
      Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body immediately Paolo Valente <paolo.valente@linaro.org> - 2017-02-08 12:00 +0100
        Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body  immediately Omar Sandoval <osandov@osandov.com> - 2017-02-08 18:30 +0100
          Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body immediately Paolo Valente <paolo.valente@linaro.org> - 2017-02-10 14:10 +0100
            Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body  immediately Jens Axboe <axboe@kernel.dk> - 2017-02-10 17:20 +0100
    Re: [PATCH] bfq-mq: cause deadlock by executing exit_icq body immediately Paolo Valente <paolo.valente@linaro.org> - 2017-02-08 14:50 +0100

csiph-web