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}