request.h 1.7 KB
Newer Older
K
Kent Overstreet 已提交
1 2 3 4 5 6 7 8
#ifndef _BCACHE_REQUEST_H_
#define _BCACHE_REQUEST_H_

#include <linux/cgroup.h>

struct search {
	/* Stack frame for bio_complete */
	struct closure		cl;
K
Kent Overstreet 已提交
9
	struct closure		btree;
K
Kent Overstreet 已提交
10 11

	struct bcache_device	*d;
K
Kent Overstreet 已提交
12
	struct cache_set	*c;
K
Kent Overstreet 已提交
13 14 15 16 17
	struct task_struct	*task;

	struct bbio		bio;
	struct bio		*orig_bio;
	struct bio		*cache_miss;
K
Kent Overstreet 已提交
18 19 20

	/* Bio to be inserted into the cache */
	struct bio		*cache_bio;
K
Kent Overstreet 已提交
21 22
	unsigned		cache_bio_sectors;

K
Kent Overstreet 已提交
23 24
	unsigned		inode;

K
Kent Overstreet 已提交
25 26 27 28 29 30
	unsigned		recoverable:1;
	unsigned		unaligned_bvec:1;

	unsigned		write:1;
	unsigned		writeback:1;

K
Kent Overstreet 已提交
31 32 33 34 35
	unsigned		csum:1;
	unsigned		bypass:1;
	unsigned		flush_journal:1;

	unsigned		insert_data_done:1;
K
Kent Overstreet 已提交
36
	unsigned		replace:1;
37
	unsigned		insert_collision:1;
K
Kent Overstreet 已提交
38 39 40

	uint16_t		write_prio;

K
Kent Overstreet 已提交
41 42 43 44 45
	/* IO error returned to s->bio */
	short			error;
	unsigned long		start_time;

	struct btree_op		op;
46 47 48

	/* Anything past this point won't get zeroed in search_alloc() */
	struct keylist		insert_keys;
K
Kent Overstreet 已提交
49
	BKEY_PADDED(replace_key);
K
Kent Overstreet 已提交
50 51
};

K
Kent Overstreet 已提交
52
unsigned bch_get_congested(struct cache_set *);
53
void bch_data_insert(struct closure *cl);
K
Kent Overstreet 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

void bch_open_buckets_free(struct cache_set *);
int bch_open_buckets_alloc(struct cache_set *);

void bch_cached_dev_request_init(struct cached_dev *dc);
void bch_flash_dev_request_init(struct bcache_device *d);

extern struct kmem_cache *bch_search_cache, *bch_passthrough_cache;

struct bch_cgroup {
#ifdef CONFIG_CGROUP_BCACHE
	struct cgroup_subsys_state	css;
#endif
	/*
	 * We subtract one from the index into bch_cache_modes[], so that
	 * default == -1; this makes it so the rest match up with d->cache_mode,
	 * and we use d->cache_mode if cgrp->cache_mode < 0
	 */
	short				cache_mode;
	bool				verify;
	struct cache_stat_collector	stats;
};

struct bch_cgroup *bch_bio_to_cgroup(struct bio *bio);

#endif /* _BCACHE_REQUEST_H_ */