On 2019/09/25 15:24, Ming Lei wrote:
> Commit c48dac137a62 ("block: don't hold q->sysfs_lock in elevator_init_mq")
> removes q->sysfs_lock from elevator_init_mq(), but forgot to deal with
> lockdep_assert_held() called in blk_mq_sched_free_requests() which is
> run in failure path of elevator_init_mq().
> 
> blk_mq_sched_free_requests() is called in the following 3 functions:
> 
>       elevator_init_mq()
>       elevator_exit()
>       blk_cleanup_queue()
> 
> In blk_cleanup_queue(), blk_mq_sched_free_requests() is followed exactly
> by 'mutex_lock(&q->sysfs_lock)'.
> 
> So moving the lockdep_assert_held() from blk_mq_sched_free_requests()
> into elevator_exit() for fixing the report by syzbot.
> 
> Cc: Bart Van Assche <[email protected]>
> Cc: Damien Le Moal <[email protected]>
> Reported-by: [email protected]
> Fixed: c48dac137a62 ("block: don't hold q->sysfs_lock in elevator_init_mq")
> Signed-off-by: Ming Lei <[email protected]>
> ---
>  block/blk-mq-sched.c | 2 --
>  block/blk.h          | 2 ++
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
> index c9d183d6c499..ca22afd47b3d 100644
> --- a/block/blk-mq-sched.c
> +++ b/block/blk-mq-sched.c
> @@ -555,8 +555,6 @@ void blk_mq_sched_free_requests(struct request_queue *q)
>       struct blk_mq_hw_ctx *hctx;
>       int i;
>  
> -     lockdep_assert_held(&q->sysfs_lock);
> -
>       queue_for_each_hw_ctx(q, hctx, i) {
>               if (hctx->sched_tags)
>                       blk_mq_free_rqs(q->tag_set, hctx->sched_tags, i);
> diff --git a/block/blk.h b/block/blk.h
> index ed347f7a97b1..25773d668ec0 100644
> --- a/block/blk.h
> +++ b/block/blk.h
> @@ -194,6 +194,8 @@ void elv_unregister_queue(struct request_queue *q);
>  static inline void elevator_exit(struct request_queue *q,
>               struct elevator_queue *e)
>  {
> +     lockdep_assert_held(&q->sysfs_lock);
> +
>       blk_mq_sched_free_requests(q);
>       __elevator_exit(q, e);
>  }
> 

Reviewed-by: Damien Le Moal <[email protected]>

-- 
Damien Le Moal
Western Digital Research

Reply via email to