diff options
author | Jens Axboe <axboe@suse.de> | 2006-08-10 03:01:02 -0400 |
---|---|---|
committer | Jens Axboe <axboe@nelson.home.kernel.dk> | 2006-09-30 14:29:42 -0400 |
commit | 5404bc7a87b9949cf61e0174b21f80e73239ab25 (patch) | |
tree | 230c799aef2dcad8c64da55114508d28d2b30183 | |
parent | da20a20f3b5c175648fa797c899dd577e4dacb51 (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.c | 2 | ||||
-rw-r--r-- | include/linux/bio.h | 2 | ||||
-rw-r--r-- | include/linux/blkdev.h | 3 | ||||
-rw-r--r-- | include/linux/fs.h | 1 |
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 | ||
547 | static inline int blk_queue_full(struct request_queue *q, int rw) | 550 | static 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 | ||