scsi: ufs: remove the duplicated checking for supporting clkscaling
[platform/kernel/linux-rpi.git] / block / blk-mq-tag.c
index f8de2db..54c8436 100644 (file)
@@ -106,6 +106,7 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
        struct sbq_wait_state *ws;
        DEFINE_WAIT(wait);
        unsigned int tag_offset;
+       bool drop_ctx;
        int tag;
 
        if (data->flags & BLK_MQ_REQ_RESERVED) {
@@ -128,6 +129,7 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
                return BLK_MQ_TAG_FAIL;
 
        ws = bt_wait_ptr(bt, data->hctx);
+       drop_ctx = data->ctx == NULL;
        do {
                prepare_to_wait(&ws->wait, &wait, TASK_UNINTERRUPTIBLE);
 
@@ -150,7 +152,8 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
                if (tag != -1)
                        break;
 
-               blk_mq_put_ctx(data->ctx);
+               if (data->ctx)
+                       blk_mq_put_ctx(data->ctx);
 
                io_schedule();
 
@@ -166,6 +169,9 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data)
                ws = bt_wait_ptr(bt, data->hctx);
        } while (1);
 
+       if (drop_ctx && data->ctx)
+               blk_mq_put_ctx(data->ctx);
+
        finish_wait(&ws->wait, &wait);
 
 found_tag: