1cafe5635SKent Overstreet #ifndef _BCACHE_REQUEST_H_ 2cafe5635SKent Overstreet #define _BCACHE_REQUEST_H_ 3cafe5635SKent Overstreet 4cafe5635SKent Overstreet #include <linux/cgroup.h> 5cafe5635SKent Overstreet 6cafe5635SKent Overstreet struct search { 7cafe5635SKent Overstreet /* Stack frame for bio_complete */ 8cafe5635SKent Overstreet struct closure cl; 9b54d6934SKent Overstreet struct closure btree; 10cafe5635SKent Overstreet 11cafe5635SKent Overstreet struct bcache_device *d; 12c18536a7SKent Overstreet struct cache_set *c; 13cafe5635SKent Overstreet struct task_struct *task; 14cafe5635SKent Overstreet 15cafe5635SKent Overstreet struct bbio bio; 16cafe5635SKent Overstreet struct bio *orig_bio; 17cafe5635SKent Overstreet struct bio *cache_miss; 18c18536a7SKent Overstreet 19c18536a7SKent Overstreet /* Bio to be inserted into the cache */ 20c18536a7SKent Overstreet struct bio *cache_bio; 21cafe5635SKent Overstreet unsigned cache_bio_sectors; 22cafe5635SKent Overstreet 23c18536a7SKent Overstreet unsigned inode; 24c18536a7SKent Overstreet 25cafe5635SKent Overstreet unsigned recoverable:1; 26cafe5635SKent Overstreet unsigned unaligned_bvec:1; 27cafe5635SKent Overstreet 28cafe5635SKent Overstreet unsigned write:1; 29cafe5635SKent Overstreet unsigned writeback:1; 30cafe5635SKent Overstreet 31c18536a7SKent Overstreet unsigned csum:1; 32c18536a7SKent Overstreet unsigned bypass:1; 33c18536a7SKent Overstreet unsigned flush_journal:1; 34c18536a7SKent Overstreet 35c18536a7SKent Overstreet unsigned insert_data_done:1; 36*1b207d80SKent Overstreet unsigned replace:1; 37c18536a7SKent Overstreet 38c18536a7SKent Overstreet uint16_t write_prio; 39c18536a7SKent Overstreet 40cafe5635SKent Overstreet /* IO error returned to s->bio */ 41cafe5635SKent Overstreet short error; 42cafe5635SKent Overstreet unsigned long start_time; 43cafe5635SKent Overstreet 44cafe5635SKent Overstreet struct btree_op op; 450b93207aSKent Overstreet 460b93207aSKent Overstreet /* Anything past this point won't get zeroed in search_alloc() */ 470b93207aSKent Overstreet struct keylist insert_keys; 48*1b207d80SKent Overstreet BKEY_PADDED(replace_key); 49cafe5635SKent Overstreet }; 50cafe5635SKent Overstreet 51c37511b8SKent Overstreet unsigned bch_get_congested(struct cache_set *); 52a34a8bfdSKent Overstreet void bch_data_insert(struct closure *cl); 53cafe5635SKent Overstreet 54cafe5635SKent Overstreet void bch_open_buckets_free(struct cache_set *); 55cafe5635SKent Overstreet int bch_open_buckets_alloc(struct cache_set *); 56cafe5635SKent Overstreet 57cafe5635SKent Overstreet void bch_cached_dev_request_init(struct cached_dev *dc); 58cafe5635SKent Overstreet void bch_flash_dev_request_init(struct bcache_device *d); 59cafe5635SKent Overstreet 60cafe5635SKent Overstreet extern struct kmem_cache *bch_search_cache, *bch_passthrough_cache; 61cafe5635SKent Overstreet 62cafe5635SKent Overstreet struct bch_cgroup { 63cafe5635SKent Overstreet #ifdef CONFIG_CGROUP_BCACHE 64cafe5635SKent Overstreet struct cgroup_subsys_state css; 65cafe5635SKent Overstreet #endif 66cafe5635SKent Overstreet /* 67cafe5635SKent Overstreet * We subtract one from the index into bch_cache_modes[], so that 68cafe5635SKent Overstreet * default == -1; this makes it so the rest match up with d->cache_mode, 69cafe5635SKent Overstreet * and we use d->cache_mode if cgrp->cache_mode < 0 70cafe5635SKent Overstreet */ 71cafe5635SKent Overstreet short cache_mode; 72cafe5635SKent Overstreet bool verify; 73cafe5635SKent Overstreet struct cache_stat_collector stats; 74cafe5635SKent Overstreet }; 75cafe5635SKent Overstreet 76cafe5635SKent Overstreet struct bch_cgroup *bch_bio_to_cgroup(struct bio *bio); 77cafe5635SKent Overstreet 78cafe5635SKent Overstreet #endif /* _BCACHE_REQUEST_H_ */ 79