Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 414b4ff5 authored by Tejun Heo's avatar Tejun Heo Committed by Jens Axboe
Browse files

block: add REQ_FLUSH_SEQ



rq == &q->flush_rq was used to determine whether a rq is part of a
flush sequence, which worked because all requests in a flush sequence
were sequenced using the single dedicated request.  This is about to
change, so introduce REQ_FLUSH_SEQ flag to distinguish flush sequence
requests.

This patch doesn't cause any behavior change.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent 3c0eee3f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
{
	struct request_queue *q = rq->q;

	if (&q->flush_rq != rq) {
	if (!(rq->cmd_flags & REQ_FLUSH_SEQ)) {
		if (error)
			clear_bit(BIO_UPTODATE, &bio->bi_flags);
		else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
@@ -1789,7 +1789,7 @@ static void blk_account_io_done(struct request *req)
	 * normal IO on queueing nor completion.  Accounting the
	 * containing request is enough.
	 */
	if (blk_do_io_stat(req) && req != &req->q->flush_rq) {
	if (blk_do_io_stat(req) && !(req->cmd_flags & REQ_FLUSH_SEQ)) {
		unsigned long duration = jiffies - req->start_time;
		const int rw = rq_data_dir(req);
		struct hd_struct *part;
+1 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ static struct request *queue_next_fseq(struct request_queue *q)
		BUG();
	}

	rq->cmd_flags |= REQ_FLUSH_SEQ;
	elv_insert(q, rq, ELEVATOR_INSERT_FRONT);
	return rq;
}
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ static inline struct request *__elv_next_request(struct request_queue *q)
		while (!list_empty(&q->queue_head)) {
			rq = list_entry_rq(q->queue_head.next);
			if (!(rq->cmd_flags & (REQ_FLUSH | REQ_FUA)) ||
			    rq == &q->flush_rq)
			    (rq->cmd_flags & REQ_FLUSH_SEQ))
				return rq;
			rq = blk_do_flush(q, rq);
			if (rq)
+2 −0
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ enum rq_flag_bits {
	__REQ_ALLOCED,		/* request came from our alloc pool */
	__REQ_COPY_USER,	/* contains copies of user pages */
	__REQ_FLUSH,		/* request for cache flush */
	__REQ_FLUSH_SEQ,	/* request for flush sequence */
	__REQ_IO_STAT,		/* account I/O stat */
	__REQ_MIXED_MERGE,	/* merge of different types, fail separately */
	__REQ_SECURE,		/* secure discard (used with __REQ_DISCARD) */
@@ -188,6 +189,7 @@ enum rq_flag_bits {
#define REQ_ALLOCED		(1 << __REQ_ALLOCED)
#define REQ_COPY_USER		(1 << __REQ_COPY_USER)
#define REQ_FLUSH		(1 << __REQ_FLUSH)
#define REQ_FLUSH_SEQ		(1 << __REQ_FLUSH_SEQ)
#define REQ_IO_STAT		(1 << __REQ_IO_STAT)
#define REQ_MIXED_MERGE		(1 << __REQ_MIXED_MERGE)
#define REQ_SECURE		(1 << __REQ_SECURE)