aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@suse.de>2006-08-10 03:01:02 -0400
committerJens Axboe <axboe@nelson.home.kernel.dk>2006-09-30 14:29:42 -0400
commit5404bc7a87b9949cf61e0174b21f80e73239ab25 (patch)
tree230c799aef2dcad8c64da55114508d28d2b30183
parentda20a20f3b5c175648fa797c899dd577e4dacb51 (diff)
[PATCH] Allow file systems to differentiate between data and meta reads
We can use this information for making more intelligent priority decisions, and it will also be useful for blktrace. Signed-off-by: Jens Axboe <axboe@suse.de>
-rw-r--r--block/ll_rw_blk.c2
-rw-r--r--include/linux/bio.h2
-rw-r--r--include/linux/blkdev.h3
-rw-r--r--include/linux/fs.h1
4 files changed, 8 insertions, 0 deletions
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c
index e3980ec747c1..57992ae511c2 100644
--- a/block/ll_rw_blk.c
+++ b/block/ll_rw_blk.c
@@ -2884,6 +2884,8 @@ static void init_request_from_bio(struct request *req, struct bio *bio)
2884 2884
2885 if (bio_sync(bio)) 2885 if (bio_sync(bio))
2886 req->cmd_flags |= REQ_RW_SYNC; 2886 req->cmd_flags |= REQ_RW_SYNC;
2887 if (bio_rw_meta(bio))
2888 req->cmd_flags |= REQ_RW_META;
2887 2889
2888 req->errors = 0; 2890 req->errors = 0;
2889 req->hard_sector = req->sector = bio->bi_sector; 2891 req->hard_sector = req->sector = bio->bi_sector;
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 76bdaeab6f62..711c321a7011 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -148,6 +148,7 @@ struct bio {
148#define BIO_RW_BARRIER 2 148#define BIO_RW_BARRIER 2
149#define BIO_RW_FAILFAST 3 149#define BIO_RW_FAILFAST 3
150#define BIO_RW_SYNC 4 150#define BIO_RW_SYNC 4
151#define BIO_RW_META 5
151 152
152/* 153/*
153 * upper 16 bits of bi_rw define the io priority of this bio 154 * upper 16 bits of bi_rw define the io priority of this bio
@@ -178,6 +179,7 @@ struct bio {
178#define bio_sync(bio) ((bio)->bi_rw & (1 << BIO_RW_SYNC)) 179#define bio_sync(bio) ((bio)->bi_rw & (1 << BIO_RW_SYNC))
179#define bio_failfast(bio) ((bio)->bi_rw & (1 << BIO_RW_FAILFAST)) 180#define bio_failfast(bio) ((bio)->bi_rw & (1 << BIO_RW_FAILFAST))
180#define bio_rw_ahead(bio) ((bio)->bi_rw & (1 << BIO_RW_AHEAD)) 181#define bio_rw_ahead(bio) ((bio)->bi_rw & (1 << BIO_RW_AHEAD))
182#define bio_rw_meta(bio) ((bio)->bi_rw & (1 << BIO_RW_META))
181 183
182/* 184/*
183 * will die 185 * will die
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 5d8e288db163..2c01a90998a7 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -180,6 +180,7 @@ enum rq_flag_bits {
180 __REQ_ORDERED_COLOR, /* is before or after barrier */ 180 __REQ_ORDERED_COLOR, /* is before or after barrier */
181 __REQ_RW_SYNC, /* request is sync (O_DIRECT) */ 181 __REQ_RW_SYNC, /* request is sync (O_DIRECT) */
182 __REQ_ALLOCED, /* request came from our alloc pool */ 182 __REQ_ALLOCED, /* request came from our alloc pool */
183 __REQ_RW_META, /* metadata io request */
183 __REQ_NR_BITS, /* stops here */ 184 __REQ_NR_BITS, /* stops here */
184}; 185};
185 186
@@ -200,6 +201,7 @@ enum rq_flag_bits {
200#define REQ_ORDERED_COLOR (1 << __REQ_ORDERED_COLOR) 201#define REQ_ORDERED_COLOR (1 << __REQ_ORDERED_COLOR)
201#define REQ_RW_SYNC (1 << __REQ_RW_SYNC) 202#define REQ_RW_SYNC (1 << __REQ_RW_SYNC)
202#define REQ_ALLOCED (1 << __REQ_ALLOCED) 203#define REQ_ALLOCED (1 << __REQ_ALLOCED)
204#define REQ_RW_META (1 << __REQ_RW_META)
203 205
204#define BLK_MAX_CDB 16 206#define BLK_MAX_CDB 16
205 207
@@ -543,6 +545,7 @@ enum {
543 * We regard a request as sync, if it's a READ or a SYNC write. 545 * We regard a request as sync, if it's a READ or a SYNC write.
544 */ 546 */
545#define rq_is_sync(rq) (rq_data_dir((rq)) == READ || (rq)->cmd_flags & REQ_RW_SYNC) 547#define rq_is_sync(rq) (rq_data_dir((rq)) == READ || (rq)->cmd_flags & REQ_RW_SYNC)
548#define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META)
546 549
547static inline int blk_queue_full(struct request_queue *q, int rw) 550static inline int blk_queue_full(struct request_queue *q, int rw)
548{ 551{
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 9306f63bf77e..d68c37af4dfb 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -80,6 +80,7 @@ extern int dir_notify_enable;
80#define READA 2 /* read-ahead - don't block if no resources */ 80#define READA 2 /* read-ahead - don't block if no resources */
81#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ 81#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
82#define READ_SYNC (READ | (1 << BIO_RW_SYNC)) 82#define READ_SYNC (READ | (1 << BIO_RW_SYNC))
83#define READ_META (READ | (1 << BIO_RW_META))
83#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC)) 84#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC))
84#define WRITE_BARRIER ((1 << BIO_RW) | (1 << BIO_RW_BARRIER)) 85#define WRITE_BARRIER ((1 << BIO_RW) | (1 << BIO_RW_BARRIER))
85 86