From: Tejun Heo <tj@kernel.org> To: axboe@kernel.dk, tytso@mit.edu, djwong@us.ibm.com, shli@kernel.org, neilb@suse.de, adilger.kernel@dilger.ca, jack@suse.cz, snitzer@redhat.com, linux-kernel@vger.kernel.org, kmannth@us.ibm.com, cmm@us.ibm.com, linux-ext4@vger.kernel.org, rwheeler@redhat.com, hch@lst.de, josef@redhat.com Cc: Tejun Heo <tj@kernel.org> Subject: [PATCH 1/3] block: add REQ_FLUSH_SEQ Date: Fri, 21 Jan 2011 16:59:56 +0100 [thread overview] Message-ID: <1295625598-15203-2-git-send-email-tj@kernel.org> (raw) In-Reply-To: <1295625598-15203-1-git-send-email-tj@kernel.org> 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: Tejun Heo <tj@kernel.org> --- block/blk-core.c | 4 ++-- block/blk-flush.c | 1 + block/blk.h | 2 +- include/linux/blk_types.h | 2 ++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 2f4002f..22e0b4f 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -151,7 +151,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)) @@ -1804,7 +1804,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; diff --git a/block/blk-flush.c b/block/blk-flush.c index 54b123d..8592869 100644 --- a/block/blk-flush.c +++ b/block/blk-flush.c @@ -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; } diff --git a/block/blk.h b/block/blk.h index 2db8f32..9d2ee8f 100644 --- a/block/blk.h +++ b/block/blk.h @@ -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) diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 46ad519..dddedfc 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -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) -- 1.7.1
WARNING: multiple messages have this Message-ID (diff)
From: Tejun Heo <tj@kernel.org> To: axboe@kernel.dk, tytso@mit.edu, djwong@us.ibm.com, shli@kernel.org, neilb@suse.de, adilger.kernel@dilger.ca, jack@suse.cz, snitzer@redhat.com, linux-kernel@vger.kernel.org, kmannth@us Cc: Tejun Heo <tj@kernel.org> Subject: [PATCH 1/3] block: add REQ_FLUSH_SEQ Date: Fri, 21 Jan 2011 16:59:56 +0100 [thread overview] Message-ID: <1295625598-15203-2-git-send-email-tj@kernel.org> (raw) In-Reply-To: <1295625598-15203-1-git-send-email-tj@kernel.org> 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: Tejun Heo <tj@kernel.org> --- block/blk-core.c | 4 ++-- block/blk-flush.c | 1 + block/blk.h | 2 +- include/linux/blk_types.h | 2 ++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 2f4002f..22e0b4f 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -151,7 +151,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)) @@ -1804,7 +1804,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; diff --git a/block/blk-flush.c b/block/blk-flush.c index 54b123d..8592869 100644 --- a/block/blk-flush.c +++ b/block/blk-flush.c @@ -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; } diff --git a/block/blk.h b/block/blk.h index 2db8f32..9d2ee8f 100644 --- a/block/blk.h +++ b/block/blk.h @@ -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) diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 46ad519..dddedfc 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -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) -- 1.7.1
next prev parent reply other threads:[~2011-01-21 16:00 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-01-21 15:59 [PATCHSET] block: reimplement FLUSH/FUA to support merge Tejun Heo 2011-01-21 15:59 ` Tejun Heo 2011-01-21 15:59 ` Tejun Heo [this message] 2011-01-21 15:59 ` [PATCH 1/3] block: add REQ_FLUSH_SEQ Tejun Heo 2011-01-21 15:59 ` [PATCH 2/3] block: improve flush bio completion Tejun Heo 2011-01-21 15:59 ` Tejun Heo 2011-01-21 15:59 ` [PATCH 3/3] block: reimplement FLUSH/FUA to support merge Tejun Heo 2011-01-21 18:56 ` Vivek Goyal 2011-01-21 19:19 ` Vivek Goyal 2011-01-23 10:25 ` Tejun Heo 2011-01-23 10:29 ` Tejun Heo 2011-01-24 20:31 ` Darrick J. Wong 2011-01-25 10:21 ` Tejun Heo 2011-01-25 11:39 ` Jens Axboe 2011-03-23 23:37 ` Darrick J. Wong 2011-01-25 22:56 ` Darrick J. Wong 2011-01-22 0:49 ` Mike Snitzer 2011-01-23 10:31 ` Tejun Heo 2011-01-25 20:46 ` Vivek Goyal 2011-01-25 21:04 ` Mike Snitzer 2011-01-23 10:48 ` [PATCH UPDATED " Tejun Heo 2011-01-23 10:48 ` Tejun Heo 2011-01-25 20:41 ` [KNOWN BUGGY RFC PATCH 4/3] block: skip elevator initialization for flush requests Mike Snitzer 2011-01-25 20:41 ` Mike Snitzer 2011-01-25 21:55 ` Mike Snitzer 2011-01-26 5:27 ` [RFC PATCH 4/3] block: skip elevator initialization for flush requests -- was never BUGGY relative to upstream Mike Snitzer 2011-01-26 10:03 ` [KNOWN BUGGY RFC PATCH 4/3] block: skip elevator initialization for flush requests Tejun Heo 2011-01-26 10:05 ` Tejun Heo 2011-02-01 17:38 ` [RFC " Mike Snitzer 2011-02-01 18:52 ` Tejun Heo 2011-02-01 22:46 ` [PATCH v2 1/2] " Mike Snitzer 2011-02-02 21:51 ` Vivek Goyal 2011-02-02 22:06 ` Mike Snitzer 2011-02-02 22:55 ` [PATCH v3 1/2] block: skip elevator data " Mike Snitzer 2011-02-03 9:28 ` Tejun Heo 2011-02-03 14:48 ` [PATCH v4 " Mike Snitzer 2011-02-03 13:24 ` [PATCH v3 " Jens Axboe 2011-02-03 13:38 ` Tejun Heo 2011-02-04 15:04 ` Vivek Goyal 2011-02-04 15:08 ` Tejun Heo 2011-02-04 16:58 ` [PATCH v5 " Mike Snitzer 2011-02-03 14:54 ` [PATCH v3 " Mike Snitzer 2011-02-01 22:46 ` [PATCH v2 2/2] block: share request flush fields with elevator_private Mike Snitzer 2011-02-01 22:46 ` Mike Snitzer 2011-02-02 21:52 ` Vivek Goyal 2011-02-03 9:24 ` Tejun Heo 2011-02-11 10:08 ` Jens Axboe 2011-01-21 15:59 ` [PATCH 3/3] block: reimplement FLUSH/FUA to support merge Tejun Heo
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1295625598-15203-2-git-send-email-tj@kernel.org \ --to=tj@kernel.org \ --cc=adilger.kernel@dilger.ca \ --cc=axboe@kernel.dk \ --cc=cmm@us.ibm.com \ --cc=djwong@us.ibm.com \ --cc=hch@lst.de \ --cc=jack@suse.cz \ --cc=josef@redhat.com \ --cc=kmannth@us.ibm.com \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=neilb@suse.de \ --cc=rwheeler@redhat.com \ --cc=shli@kernel.org \ --cc=snitzer@redhat.com \ --cc=tytso@mit.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.