* Get a free request from @q.  This function may fail under memory
  * pressure or if @q is dead.
  *
- * Must be callled with @q->queue_lock held and,
- * Returns %NULL on failure, with @q->queue_lock held.
- * Returns !%NULL on success, with @q->queue_lock *not held*.
+ * Must be called with @q->queue_lock held and,
+ * Returns ERR_PTR on failure, with @q->queue_lock held.
+ * Returns request pointer on success, with @q->queue_lock *not held*.
  */
 static struct request *__get_request(struct request_list *rl, int rw_flags,
                                     struct bio *bio, gfp_t gfp_mask)
        int may_queue;
 
        if (unlikely(blk_queue_dying(q)))
-               return NULL;
+               return ERR_PTR(-ENODEV);
 
        may_queue = elv_may_queue(q, rw_flags);
        if (may_queue == ELV_MQUEUE_NO)
                                         * process is not a "batcher", and not
                                         * exempted by the IO scheduler
                                         */
-                                       return NULL;
+                                       return ERR_PTR(-ENOMEM);
                                }
                        }
                }
         * allocated with any setting of ->nr_requests
         */
        if (rl->count[is_sync] >= (3 * q->nr_requests / 2))
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        q->nr_rqs[is_sync]++;
        rl->count[is_sync]++;
 rq_starved:
        if (unlikely(rl->count[is_sync] == 0))
                rl->starved[is_sync] = 1;
-       return NULL;
+       return ERR_PTR(-ENOMEM);
 }
 
 /**
  * Get a free request from @q.  If %__GFP_WAIT is set in @gfp_mask, this
  * function keeps retrying under memory pressure and fails iff @q is dead.
  *
- * Must be callled with @q->queue_lock held and,
- * Returns %NULL on failure, with @q->queue_lock held.
- * Returns !%NULL on success, with @q->queue_lock *not held*.
+ * Must be called with @q->queue_lock held and,
+ * Returns ERR_PTR on failure, with @q->queue_lock held.
+ * Returns request pointer on success, with @q->queue_lock *not held*.
  */
 static struct request *get_request(struct request_queue *q, int rw_flags,
                                   struct bio *bio, gfp_t gfp_mask)
        rl = blk_get_rl(q, bio);        /* transferred to @rq on success */
 retry:
        rq = __get_request(rl, rw_flags, bio, gfp_mask);
-       if (rq)
+       if (!IS_ERR(rq))
                return rq;
 
        if (!(gfp_mask & __GFP_WAIT) || unlikely(blk_queue_dying(q))) {
                blk_put_rl(rl);
-               return NULL;
+               return rq;
        }
 
        /* wait on @rl and retry */
 
        spin_lock_irq(q->queue_lock);
        rq = get_request(q, rw, NULL, gfp_mask);
-       if (!rq)
+       if (IS_ERR(rq))
                spin_unlock_irq(q->queue_lock);
        /* q->queue_lock is unlocked at this point */
 
 {
        struct request *rq = blk_get_request(q, bio_data_dir(bio), gfp_mask);
 
-       if (unlikely(!rq))
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(rq))
+               return rq;
 
        blk_rq_set_block_pc(rq);
 
         * Returns with the queue unlocked.
         */
        req = get_request(q, rw_flags, bio, GFP_NOIO);
-       if (unlikely(!req)) {
-               bio_endio(bio, -ENODEV);        /* @q is dead */
+       if (IS_ERR(req)) {
+               bio_endio(bio, PTR_ERR(req));   /* @q is dead */
                goto out_unlock;
        }
 
 
        struct blk_mq_hw_ctx *hctx;
        struct request *rq;
        struct blk_mq_alloc_data alloc_data;
+       int ret;
 
-       if (blk_mq_queue_enter(q))
-               return NULL;
+       ret = blk_mq_queue_enter(q);
+       if (ret)
+               return ERR_PTR(ret);
 
        ctx = blk_mq_get_ctx(q);
        hctx = q->mq_ops->map_queue(q, ctx->cpu);
                ctx = alloc_data.ctx;
        }
        blk_mq_put_ctx(ctx);
+       if (!rq)
+               return ERR_PTR(-EWOULDBLOCK);
        return rq;
 }
 EXPORT_SYMBOL(blk_mq_alloc_request);
 
         * map scatter-gather elements separately and string them to request
         */
        rq = blk_get_request(q, rw, GFP_KERNEL);
-       if (!rq)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(rq))
+               return rq;
        blk_rq_set_block_pc(rq);
 
        ret = blk_fill_sgv4_hdr_rq(q, rq, hdr, bd, has_write_perm);
                }
 
                next_rq = blk_get_request(q, READ, GFP_KERNEL);
-               if (!next_rq) {
-                       ret = -ENOMEM;
+               if (IS_ERR(next_rq)) {
+                       ret = PTR_ERR(next_rq);
                        goto out;
                }
                rq->next_rq = next_rq;
 
                at_head = 1;
 
        rq = blk_get_request(q, writing ? WRITE : READ, GFP_KERNEL);
-       if (!rq)
-               return -ENOMEM;
+       if (IS_ERR(rq))
+               return PTR_ERR(rq);
        blk_rq_set_block_pc(rq);
 
        if (blk_fill_sghdr_rq(q, rq, hdr, mode)) {
        }
 
        rq = blk_get_request(q, in_len ? WRITE : READ, __GFP_WAIT);
-       if (!rq) {
-               err = -ENODEV;
+       if (IS_ERR(rq)) {
+               err = PTR_ERR(rq);
                goto error_free_buffer;
        }
 
        int err;
 
        rq = blk_get_request(q, WRITE, __GFP_WAIT);
-       if (!rq)
-               return -ENODEV;
+       if (IS_ERR(rq))
+               return PTR_ERR(rq);
        blk_rq_set_block_pc(rq);
        rq->timeout = BLK_DEFAULT_SG_TIMEOUT;
        rq->cmd[0] = cmd;
 
        int err = 0;
 
        rq = blk_get_request(disk->gd->queue, READ, __GFP_WAIT);
-       if (!rq)
-               return -ENODEV;
+       if (IS_ERR(rq))
+               return PTR_ERR(rq);
 
        rq->cmd_type = REQ_TYPE_SPECIAL;
        rq->special = func;
 
 
        rq = blk_get_request(q, (cgc->data_direction == CGC_DATA_WRITE) ?
                             WRITE : READ, __GFP_WAIT);
-       if (!rq)
-               return -ENODEV;
+       if (IS_ERR(rq))
+               return PTR_ERR(rq);
        blk_rq_set_block_pc(rq);
 
        if (cgc->buflen) {
 
                return NULL;
 
        rq = blk_get_request(host->oob_q, WRITE /* bogus */, GFP_KERNEL);
-       if (!rq) {
+       if (IS_ERR(rq)) {
                spin_lock_irqsave(&host->lock, flags);
                carm_put_request(host, crq);
                spin_unlock_irqrestore(&host->lock, flags);
 
                len = nr * CD_FRAMESIZE_RAW;
 
                rq = blk_get_request(q, READ, GFP_KERNEL);
-               if (!rq) {
-                       ret = -ENOMEM;
+               if (IS_ERR(rq)) {
+                       ret = PTR_ERR(rq);
                        break;
                }
                blk_rq_set_block_pc(rq);
 
         * timeout has expired, so power management will be reenabled.
         */
        rq = blk_get_request(q, READ, GFP_NOWAIT);
-       if (unlikely(!rq))
+       if (IS_ERR(rq))
                goto out;
 
        rq->cmd[0] = REQ_UNPARK_HEADS;
 
 
        rq = blk_get_request(q, rw, GFP_NOIO);
 
-       if (!rq) {
+       if (IS_ERR(rq)) {
                sdev_printk(KERN_INFO, sdev,
                            "%s: blk_get_request failed\n", __func__);
                return NULL;
 
 
        rq = blk_get_request(sdev->request_queue,
                        (cmd != INQUIRY) ? WRITE : READ, GFP_NOIO);
-       if (!rq) {
+       if (IS_ERR(rq)) {
                sdev_printk(KERN_INFO, sdev, "get_req: blk_get_request failed");
                return NULL;
        }
 
 
 retry:
        req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO);
-       if (!req)
+       if (IS_ERR(req))
                return SCSI_DH_RES_TEMP_UNAVAIL;
 
        blk_rq_set_block_pc(req);
        struct request *req;
 
        req = blk_get_request(h->sdev->request_queue, WRITE, GFP_ATOMIC);
-       if (!req)
+       if (IS_ERR(req))
                return SCSI_DH_RES_TEMP_UNAVAIL;
 
        blk_rq_set_block_pc(req);
 
 
        rq = blk_get_request(q, rw, GFP_NOIO);
 
-       if (!rq) {
+       if (IS_ERR(rq)) {
                sdev_printk(KERN_INFO, sdev,
                                "get_rdac_req: blk_get_request failed.\n");
                return NULL;
 
                struct request *req;
 
                req = blk_get_request(q, has_write ? WRITE : READ, flags);
-               if (unlikely(!req))
-                       return ERR_PTR(-ENOMEM);
+               if (IS_ERR(req))
+                       return req;
 
                blk_rq_set_block_pc(req);
                return req;
 
        int write = (data_direction == DMA_TO_DEVICE);
 
        req = blk_get_request(SRpnt->stp->device->request_queue, write, GFP_KERNEL);
-       if (!req)
+       if (IS_ERR(req))
                return DRIVER_ERROR << 24;
 
        blk_rq_set_block_pc(req);
 
         * request becomes available
         */
        req = blk_get_request(sdev->request_queue, READ, GFP_KERNEL);
-       if (!req)
+       if (IS_ERR(req))
                return;
 
        blk_rq_set_block_pc(req);
 
        int ret = DRIVER_ERROR << 24;
 
        req = blk_get_request(sdev->request_queue, write, __GFP_WAIT);
-       if (!req)
+       if (IS_ERR(req))
                return ret;
        blk_rq_set_block_pc(req);
 
 
        }
 
        rq = blk_get_request(q, rw, GFP_ATOMIC);
-       if (!rq) {
+       if (IS_ERR(rq)) {
                kfree(long_cmdp);
-               return -ENOMEM;
+               return PTR_ERR(rq);
        }
 
        blk_rq_set_block_pc(rq);
 
 
        req = blk_get_request(SRpnt->stp->device->request_queue, write,
                              GFP_KERNEL);
-       if (!req)
+       if (IS_ERR(req))
                return DRIVER_ERROR << 24;
 
        blk_rq_set_block_pc(req);
 
                req = blk_get_request(pdv->pdv_sd->request_queue,
                                (data_direction == DMA_TO_DEVICE),
                                GFP_KERNEL);
-               if (!req) {
+               if (IS_ERR(req)) {
                        pr_err("PSCSI: blk_get_request() failed\n");
                        ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
                        goto fail;