aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Ma <boyu.mt@taobao.com>2011-10-24 10:11:30 -0400
committerJens Axboe <axboe@kernel.dk>2011-10-24 10:11:30 -0400
commit9562ad9ab36df7ccef920d119f3b5100025db95f (patch)
treeb5e32ca469cbefca4122c1a08db80cdb12e655fb
parente890413af4c2dfebf5432ef30cc70cb11dad3213 (diff)
block: Remove the control of complete cpu from bio.
bio originally has the functionality to set the complete cpu, but it is broken. Chirstoph said that "This code is unused, and from the all the discussions lately pretty obviously broken. The only thing keeping it serves is creating more confusion and possibly more bugs." And Jens replied with "We can kill bio_set_completion_cpu(). I'm fine with leaving cpu control to the request based drivers, they are the only ones that can toggle the setting anyway". So this patch tries to remove all the work of controling complete cpu from a bio. Cc: Shaohua Li <shaohua.li@intel.com> Cc: Christoph Hellwig <hch@infradead.org> Signed-off-by: Tao Ma <boyu.mt@taobao.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/blk-core.c4
-rw-r--r--drivers/md/raid1.c1
-rw-r--r--fs/bio.c1
-rw-r--r--include/linux/bio.h8
-rw-r--r--include/linux/blk_types.h11
5 files changed, 5 insertions, 20 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index 7e1523521c70..da697936d220 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1276,7 +1276,6 @@ out:
1276 1276
1277void init_request_from_bio(struct request *req, struct bio *bio) 1277void init_request_from_bio(struct request *req, struct bio *bio)
1278{ 1278{
1279 req->cpu = bio->bi_comp_cpu;
1280 req->cmd_type = REQ_TYPE_FS; 1279 req->cmd_type = REQ_TYPE_FS;
1281 1280
1282 req->cmd_flags |= bio->bi_rw & REQ_COMMON_MASK; 1281 req->cmd_flags |= bio->bi_rw & REQ_COMMON_MASK;
@@ -1362,8 +1361,7 @@ get_rq:
1362 */ 1361 */
1363 init_request_from_bio(req, bio); 1362 init_request_from_bio(req, bio);
1364 1363
1365 if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) || 1364 if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags))
1366 bio_flagged(bio, BIO_CPU_AFFINE))
1367 req->cpu = raw_smp_processor_id(); 1365 req->cpu = raw_smp_processor_id();
1368 1366
1369 plug = current->plug; 1367 plug = current->plug;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index d4ddfa627301..2948a520f7ba 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2172,7 +2172,6 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
2172 bio->bi_next = NULL; 2172 bio->bi_next = NULL;
2173 bio->bi_flags &= ~(BIO_POOL_MASK-1); 2173 bio->bi_flags &= ~(BIO_POOL_MASK-1);
2174 bio->bi_flags |= 1 << BIO_UPTODATE; 2174 bio->bi_flags |= 1 << BIO_UPTODATE;
2175 bio->bi_comp_cpu = -1;
2176 bio->bi_rw = READ; 2175 bio->bi_rw = READ;
2177 bio->bi_vcnt = 0; 2176 bio->bi_vcnt = 0;
2178 bio->bi_idx = 0; 2177 bio->bi_idx = 0;
diff --git a/fs/bio.c b/fs/bio.c
index 9bfade8a609b..41c93c722244 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -255,7 +255,6 @@ void bio_init(struct bio *bio)
255{ 255{
256 memset(bio, 0, sizeof(*bio)); 256 memset(bio, 0, sizeof(*bio));
257 bio->bi_flags = 1 << BIO_UPTODATE; 257 bio->bi_flags = 1 << BIO_UPTODATE;
258 bio->bi_comp_cpu = -1;
259 atomic_set(&bio->bi_cnt, 1); 258 atomic_set(&bio->bi_cnt, 1);
260} 259}
261EXPORT_SYMBOL(bio_init); 260EXPORT_SYMBOL(bio_init);
diff --git a/include/linux/bio.h b/include/linux/bio.h
index ce33e6868a2f..a3c071c9e189 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -269,14 +269,6 @@ extern void bvec_free_bs(struct bio_set *, struct bio_vec *, unsigned int);
269extern unsigned int bvec_nr_vecs(unsigned short idx); 269extern unsigned int bvec_nr_vecs(unsigned short idx);
270 270
271/* 271/*
272 * Allow queuer to specify a completion CPU for this bio
273 */
274static inline void bio_set_completion_cpu(struct bio *bio, unsigned int cpu)
275{
276 bio->bi_comp_cpu = cpu;
277}
278
279/*
280 * bio_set is used to allow other portions of the IO system to 272 * bio_set is used to allow other portions of the IO system to
281 * allocate their own private memory pools for bio and iovec structures. 273 * allocate their own private memory pools for bio and iovec structures.
282 * These memory pools in turn all allocate from the bio_slab 274 * These memory pools in turn all allocate from the bio_slab
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index 71fc53bb8f1c..4053cbd4490e 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -59,8 +59,6 @@ struct bio {
59 59
60 unsigned int bi_max_vecs; /* max bvl_vecs we can hold */ 60 unsigned int bi_max_vecs; /* max bvl_vecs we can hold */
61 61
62 unsigned int bi_comp_cpu; /* completion CPU */
63
64 atomic_t bi_cnt; /* pin count */ 62 atomic_t bi_cnt; /* pin count */
65 63
66 struct bio_vec *bi_io_vec; /* the actual vec list */ 64 struct bio_vec *bi_io_vec; /* the actual vec list */
@@ -93,11 +91,10 @@ struct bio {
93#define BIO_BOUNCED 5 /* bio is a bounce bio */ 91#define BIO_BOUNCED 5 /* bio is a bounce bio */
94#define BIO_USER_MAPPED 6 /* contains user pages */ 92#define BIO_USER_MAPPED 6 /* contains user pages */
95#define BIO_EOPNOTSUPP 7 /* not supported */ 93#define BIO_EOPNOTSUPP 7 /* not supported */
96#define BIO_CPU_AFFINE 8 /* complete bio on same CPU as submitted */ 94#define BIO_NULL_MAPPED 8 /* contains invalid user pages */
97#define BIO_NULL_MAPPED 9 /* contains invalid user pages */ 95#define BIO_FS_INTEGRITY 9 /* fs owns integrity data, not block layer */
98#define BIO_FS_INTEGRITY 10 /* fs owns integrity data, not block layer */ 96#define BIO_QUIET 10 /* Make BIO Quiet */
99#define BIO_QUIET 11 /* Make BIO Quiet */ 97#define BIO_MAPPED_INTEGRITY 11/* integrity metadata has been remapped */
100#define BIO_MAPPED_INTEGRITY 12/* integrity metadata has been remapped */
101#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag))) 98#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
102 99
103/* 100/*