]> Pileus Git - ~andy/linux/commitdiff
Merge branch 'blk-mq/core' into for-3.13/core
authorJens Axboe <axboe@kernel.dk>
Fri, 8 Nov 2013 16:08:12 +0000 (09:08 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 8 Nov 2013 16:08:12 +0000 (09:08 -0700)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Conflicts:
block/blk-timeout.c

1  2 
block/blk-core.c
block/blk-timeout.c
drivers/scsi/sd.c
include/linux/bio.h

index 25f13479f552562bc2e406f3ebed2bf150e93fe9,936876ab662dffcbb3c0f23f8819debbdf90b348..8bdd0121212a51a1dba3c568c5a6a3e070447318
@@@ -644,15 -611,17 +611,19 @@@ struct request_queue *blk_alloc_queue_n
        q->bypass_depth = 1;
        __set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
  
+       init_waitqueue_head(&q->mq_freeze_wq);
        if (blkcg_init_queue(q))
 -              goto fail_id;
 +              goto fail_bdi;
  
        return q;
  
 +fail_bdi:
 +      bdi_destroy(&q->backing_dev_info);
  fail_id:
        ida_simple_remove(&blk_queue_ida, q->id);
+ fail_c:
+       percpu_counter_destroy(&q->mq_usage_counter);
  fail_q:
        kmem_cache_free(blk_requestq_cachep, q);
        return NULL;
@@@ -1428,10 -1401,8 +1411,11 @@@ bool blk_attempt_plug_merge(struct requ
        struct blk_plug *plug;
        struct request *rq;
        bool ret = false;
+       struct list_head *plug_list;
  
 +      if (blk_queue_nomerges(q))
 +              goto out;
 +
        plug = current->plug;
        if (!plug)
                goto out;
index abf725c655fc0ecece67e80990e9fca92bf87c48,22846cf3595abbb4d93faeef52c4e2de81a740bf..bba81c9348e1cca630fc9d2515f27633d997c03a
@@@ -88,11 -89,18 +89,19 @@@ static void blk_rq_timed_out(struct req
                ret = q->rq_timed_out_fn(req);
        switch (ret) {
        case BLK_EH_HANDLED:
-               __blk_complete_request(req);
+               /* Can we use req->errors here? */
+               if (q->mq_ops)
+                       blk_mq_complete_request(req, req->errors);
+               else
+                       __blk_complete_request(req);
                break;
        case BLK_EH_RESET_TIMER:
-               blk_add_timer(req);
 -              blk_clear_rq_complete(req);
+               if (q->mq_ops)
+                       blk_mq_add_timer(req);
+               else
+                       blk_add_timer(req);
++
 +              blk_clear_rq_complete(req);
                break;
        case BLK_EH_NOT_HANDLED:
                /*
Simple merge
Simple merge