request.c (858a0d7eb5300b5f620d98ab3c4b96c9d5f19131) | request.c (dc3b17cc8bf21307c7e076e7c778d5db756f7871) |
---|---|
1/* 2 * Main bcache entry point - handle a read or a write request and decide what to 3 * do with it; the make_request functions are called by the block layer. 4 * 5 * Copyright 2010, 2011 Kent Overstreet <kent.overstreet@gmail.com> 6 * Copyright 2012 Google, Inc. 7 */ 8 --- 652 unchanged lines hidden (view full) --- 661 662 s->iop.c = d->c; 663 s->iop.bio = NULL; 664 s->iop.inode = d->id; 665 s->iop.write_point = hash_long((unsigned long) current, 16); 666 s->iop.write_prio = 0; 667 s->iop.error = 0; 668 s->iop.flags = 0; | 1/* 2 * Main bcache entry point - handle a read or a write request and decide what to 3 * do with it; the make_request functions are called by the block layer. 4 * 5 * Copyright 2010, 2011 Kent Overstreet <kent.overstreet@gmail.com> 6 * Copyright 2012 Google, Inc. 7 */ 8 --- 652 unchanged lines hidden (view full) --- 661 662 s->iop.c = d->c; 663 s->iop.bio = NULL; 664 s->iop.inode = d->id; 665 s->iop.write_point = hash_long((unsigned long) current, 16); 666 s->iop.write_prio = 0; 667 s->iop.error = 0; 668 s->iop.flags = 0; |
669 s->iop.flush_journal = (bio->bi_opf & (REQ_PREFLUSH|REQ_FUA)) != 0; | 669 s->iop.flush_journal = op_is_flush(bio->bi_opf); |
670 s->iop.wq = bcache_wq; 671 672 return s; 673} 674 675/* Cached devices */ 676 677static void cached_dev_bio_complete(struct closure *cl) --- 326 unchanged lines hidden (view full) --- 1004 1005static int cached_dev_congested(void *data, int bits) 1006{ 1007 struct bcache_device *d = data; 1008 struct cached_dev *dc = container_of(d, struct cached_dev, disk); 1009 struct request_queue *q = bdev_get_queue(dc->bdev); 1010 int ret = 0; 1011 | 670 s->iop.wq = bcache_wq; 671 672 return s; 673} 674 675/* Cached devices */ 676 677static void cached_dev_bio_complete(struct closure *cl) --- 326 unchanged lines hidden (view full) --- 1004 1005static int cached_dev_congested(void *data, int bits) 1006{ 1007 struct bcache_device *d = data; 1008 struct cached_dev *dc = container_of(d, struct cached_dev, disk); 1009 struct request_queue *q = bdev_get_queue(dc->bdev); 1010 int ret = 0; 1011 |
1012 if (bdi_congested(&q->backing_dev_info, bits)) | 1012 if (bdi_congested(q->backing_dev_info, bits)) |
1013 return 1; 1014 1015 if (cached_dev_get(dc)) { 1016 unsigned i; 1017 struct cache *ca; 1018 1019 for_each_cache(ca, d->c, i) { 1020 q = bdev_get_queue(ca->bdev); | 1013 return 1; 1014 1015 if (cached_dev_get(dc)) { 1016 unsigned i; 1017 struct cache *ca; 1018 1019 for_each_cache(ca, d->c, i) { 1020 q = bdev_get_queue(ca->bdev); |
1021 ret |= bdi_congested(&q->backing_dev_info, bits); | 1021 ret |= bdi_congested(q->backing_dev_info, bits); |
1022 } 1023 1024 cached_dev_put(dc); 1025 } 1026 1027 return ret; 1028} 1029 1030void bch_cached_dev_request_init(struct cached_dev *dc) 1031{ 1032 struct gendisk *g = dc->disk.disk; 1033 1034 g->queue->make_request_fn = cached_dev_make_request; | 1022 } 1023 1024 cached_dev_put(dc); 1025 } 1026 1027 return ret; 1028} 1029 1030void bch_cached_dev_request_init(struct cached_dev *dc) 1031{ 1032 struct gendisk *g = dc->disk.disk; 1033 1034 g->queue->make_request_fn = cached_dev_make_request; |
1035 g->queue->backing_dev_info.congested_fn = cached_dev_congested; | 1035 g->queue->backing_dev_info->congested_fn = cached_dev_congested; |
1036 dc->disk.cache_miss = cached_dev_cache_miss; 1037 dc->disk.ioctl = cached_dev_ioctl; 1038} 1039 1040/* Flash backed devices */ 1041 1042static int flash_dev_cache_miss(struct btree *b, struct search *s, 1043 struct bio *bio, unsigned sectors) --- 76 unchanged lines hidden (view full) --- 1120 struct bcache_device *d = data; 1121 struct request_queue *q; 1122 struct cache *ca; 1123 unsigned i; 1124 int ret = 0; 1125 1126 for_each_cache(ca, d->c, i) { 1127 q = bdev_get_queue(ca->bdev); | 1036 dc->disk.cache_miss = cached_dev_cache_miss; 1037 dc->disk.ioctl = cached_dev_ioctl; 1038} 1039 1040/* Flash backed devices */ 1041 1042static int flash_dev_cache_miss(struct btree *b, struct search *s, 1043 struct bio *bio, unsigned sectors) --- 76 unchanged lines hidden (view full) --- 1120 struct bcache_device *d = data; 1121 struct request_queue *q; 1122 struct cache *ca; 1123 unsigned i; 1124 int ret = 0; 1125 1126 for_each_cache(ca, d->c, i) { 1127 q = bdev_get_queue(ca->bdev); |
1128 ret |= bdi_congested(&q->backing_dev_info, bits); | 1128 ret |= bdi_congested(q->backing_dev_info, bits); |
1129 } 1130 1131 return ret; 1132} 1133 1134void bch_flash_dev_request_init(struct bcache_device *d) 1135{ 1136 struct gendisk *g = d->disk; 1137 1138 g->queue->make_request_fn = flash_dev_make_request; | 1129 } 1130 1131 return ret; 1132} 1133 1134void bch_flash_dev_request_init(struct bcache_device *d) 1135{ 1136 struct gendisk *g = d->disk; 1137 1138 g->queue->make_request_fn = flash_dev_make_request; |
1139 g->queue->backing_dev_info.congested_fn = flash_dev_congested; | 1139 g->queue->backing_dev_info->congested_fn = flash_dev_congested; |
1140 d->cache_miss = flash_dev_cache_miss; 1141 d->ioctl = flash_dev_ioctl; 1142} 1143 1144void bch_request_exit(void) 1145{ 1146 if (bch_search_cache) 1147 kmem_cache_destroy(bch_search_cache); 1148} 1149 1150int __init bch_request_init(void) 1151{ 1152 bch_search_cache = KMEM_CACHE(search, 0); 1153 if (!bch_search_cache) 1154 return -ENOMEM; 1155 1156 return 0; 1157} | 1140 d->cache_miss = flash_dev_cache_miss; 1141 d->ioctl = flash_dev_ioctl; 1142} 1143 1144void bch_request_exit(void) 1145{ 1146 if (bch_search_cache) 1147 kmem_cache_destroy(bch_search_cache); 1148} 1149 1150int __init bch_request_init(void) 1151{ 1152 bch_search_cache = KMEM_CACHE(search, 0); 1153 if (!bch_search_cache) 1154 return -ENOMEM; 1155 1156 return 0; 1157} |