Re: [PATCH 2/7] block: Document more locking requirements

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2017-11-30 at 20:03 -0700, Jens Axboe wrote:
> On 11/30/2017 05:08 PM, Bart Van Assche wrote:
> > This patch does not change any functionality.
> 
> Unless these actually found real bugs, I think it's pointless.
> Add a comment.
 
Hello Jens,

As you know lockdep_assert_held() statements are verified at runtime with
LOCKDEP enabled but comments not. Hence my preference for lockdep_assert_held()
over source code comments.

> And this:
>
> > @@ -1003,9 +1007,14 @@ bool blk_mq_get_driver_tag(struct request *rq, struct blk_mq_hw_ctx **hctx,
> >  static int blk_mq_dispatch_wake(wait_queue_entry_t *wait, unsigned mode,
> >  				int flags, void *key)
> >  {
> > -	struct blk_mq_hw_ctx *hctx;
> > +	struct blk_mq_hw_ctx *hctx =
> > +		container_of(wait, struct blk_mq_hw_ctx, dispatch_wait);
> > +
> > +#ifdef CONFIG_LOCKDEP
> > +	struct sbq_wait_state *ws = bt_wait_ptr(&hctx->tags->bitmap_tags, hctx);
> >  
> > -	hctx = container_of(wait, struct blk_mq_hw_ctx, dispatch_wait);
> > +	lockdep_assert_held(&ws->wait.lock);
> > +#endif
> 
> we're definitely not doing.

Can you explain me why you think the above is wrong? My understanding is
that the call chain for the above function is as follows:

blk_mq_tag_wakeup_all()
-> sbitmap_queue_wake_all()
  -> wake_up()
    -> __wake_up()
      -> __wake_up_common_lock()
        -> spin_lock_irqsave(&wq_head->lock, flags);
        -> __wake_up_common()
          -> list_for_each_entry_safe_from(curr, next, &wq_head->head, entry)
          ->   ret = curr->func(curr, mode, wake_flags, key)
        -> spin_unlock_irqrestore(&wq_head->lock, flags);

In other words, blk_mq_dispatch_wake() is called with the wait queue head
lock held.

Bart.




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux