Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / block / blk-flush.c
index 1eec9cb..1777346 100644 (file)
@@ -136,6 +136,17 @@ static void blk_flush_queue_rq(struct request *rq, bool add_front)
        blk_mq_add_to_requeue_list(rq, add_front, true);
 }
 
+static void blk_account_io_flush(struct request *rq)
+{
+       struct hd_struct *part = &rq->rq_disk->part0;
+
+       part_stat_lock();
+       part_stat_inc(part, ios[STAT_FLUSH]);
+       part_stat_add(part, nsecs[STAT_FLUSH],
+                     ktime_get_ns() - rq->start_time_ns);
+       part_stat_unlock();
+}
+
 /**
  * blk_flush_complete_seq - complete flush sequence
  * @rq: PREFLUSH/FUA request being sequenced
@@ -185,7 +196,7 @@ static void blk_flush_complete_seq(struct request *rq,
 
        case REQ_FSEQ_DONE:
                /*
-                * @rq was previously adjusted by blk_flush_issue() for
+                * @rq was previously adjusted by blk_insert_flush() for
                 * flush sequencing and may already have gone through the
                 * flush data request completion path.  Restore @rq for
                 * normal completion and end it.
@@ -212,6 +223,8 @@ static void flush_end_io(struct request *flush_rq, blk_status_t error)
        struct blk_flush_queue *fq = blk_get_flush_queue(q, flush_rq->mq_ctx);
        struct blk_mq_hw_ctx *hctx;
 
+       blk_account_io_flush(flush_rq);
+
        /* release the tag's ownership to the req cloned from */
        spin_lock_irqsave(&fq->mq_flush_lock, flags);