Skip to content

Commit

Permalink
block: adjust tagging function queue bit locking
Browse files Browse the repository at this point in the history
For most initialization purposes, calling blk_queue_init_tags() without
the queue lock held is OK. Only if called for resizing an existing map
must the lock be held. Ditto for tag cleanup, the maps are reference
counted.

So switch the general queue flag setting to the unlocked variant, but
retain the locked variant for resizing.

Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Jens Axboe committed May 7, 2008
1 parent bf0f970 commit aa94b53
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions block/blk-tag.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ void __blk_queue_free_tags(struct request_queue *q)
__blk_free_tags(bqt);

q->queue_tags = NULL;
queue_flag_clear(QUEUE_FLAG_QUEUED, q);
queue_flag_clear_unlocked(QUEUE_FLAG_QUEUED, q);
}

/**
Expand Down Expand Up @@ -98,7 +98,7 @@ EXPORT_SYMBOL(blk_free_tags);
**/
void blk_queue_free_tags(struct request_queue *q)
{
queue_flag_clear(QUEUE_FLAG_QUEUED, q);
queue_flag_clear_unlocked(QUEUE_FLAG_QUEUED, q);
}
EXPORT_SYMBOL(blk_queue_free_tags);

Expand Down Expand Up @@ -171,6 +171,9 @@ EXPORT_SYMBOL(blk_init_tags);
* @q: the request queue for the device
* @depth: the maximum queue depth supported
* @tags: the tag to use
*
* Queue lock must be held here if the function is called to resize an
* existing map.
**/
int blk_queue_init_tags(struct request_queue *q, int depth,
struct blk_queue_tag *tags)
Expand All @@ -197,7 +200,7 @@ int blk_queue_init_tags(struct request_queue *q, int depth,
* assign it, all done
*/
q->queue_tags = tags;
queue_flag_set(QUEUE_FLAG_QUEUED, q);
queue_flag_set_unlocked(QUEUE_FLAG_QUEUED, q);
INIT_LIST_HEAD(&q->tag_busy_list);
return 0;
fail:
Expand Down

0 comments on commit aa94b53

Please sign in to comment.