Blame view

fs/btrfs/volumes.h 6.33 KB
0b86a832a   Chris Mason   Btrfs: Add suppor...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  /*
   * Copyright (C) 2007 Oracle.  All rights reserved.
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public
   * License v2 as published by the Free Software Foundation.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * General Public License for more details.
   *
   * You should have received a copy of the GNU General Public
   * License along with this program; if not, write to the
   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   * Boston, MA 021110-1307, USA.
   */
  
  #ifndef __BTRFS_VOLUMES_
  #define __BTRFS_VOLUMES_
8790d502e   Chris Mason   Btrfs: Add suppor...
21

cea9e4452   Chris Mason   Change btrfs_map_...
22
  #include <linux/bio.h>
b2117a39f   Miao Xie   btrfs: make the c...
23
  #include <linux/sort.h>
8b7128429   Chris Mason   Btrfs: Add async ...
24
  #include "async-thread.h"
cea9e4452   Chris Mason   Change btrfs_map_...
25

b2117a39f   Miao Xie   btrfs: make the c...
26
  #define BTRFS_STRIPE_LEN	(64 * 1024)
f29844623   Chris Mason   Btrfs: Write out ...
27
  struct buffer_head;
ffbd517d5   Chris Mason   Btrfs: use WRITE_...
28
29
30
31
  struct btrfs_pending_bios {
  	struct bio *head;
  	struct bio *tail;
  };
0b86a832a   Chris Mason   Btrfs: Add suppor...
32
33
  struct btrfs_device {
  	struct list_head dev_list;
b30757178   Chris Mason   Btrfs: Add a spec...
34
  	struct list_head dev_alloc_list;
2b82032c3   Yan Zheng   Btrfs: Seed devic...
35
  	struct btrfs_fs_devices *fs_devices;
0b86a832a   Chris Mason   Btrfs: Add suppor...
36
  	struct btrfs_root *dev_root;
ffbd517d5   Chris Mason   Btrfs: use WRITE_...
37
38
39
40
41
  
  	/* regular prio bios */
  	struct btrfs_pending_bios pending_bios;
  	/* WRITE_SYNC bios */
  	struct btrfs_pending_bios pending_sync_bios;
8b7128429   Chris Mason   Btrfs: Add async ...
42
  	int running_pending;
dfe250206   Chris Mason   Btrfs: Add mount ...
43
  	u64 generation;
b30757178   Chris Mason   Btrfs: Add a spec...
44

2b82032c3   Yan Zheng   Btrfs: Seed devic...
45
  	int writeable;
dfe250206   Chris Mason   Btrfs: Add mount ...
46
  	int in_fs_metadata;
cd02dca56   Chris Mason   Btrfs: account fo...
47
  	int missing;
d5e2003c2   Josef Bacik   Btrfs: detect wet...
48
  	int can_discard;
b30757178   Chris Mason   Btrfs: Add a spec...
49

8790d502e   Chris Mason   Btrfs: Add suppor...
50
  	spinlock_t io_lock;
0b86a832a   Chris Mason   Btrfs: Add suppor...
51
52
  
  	struct block_device *bdev;
d4d776299   Tejun Heo   block: clean up b...
53
  	/* the mode sent to blkdev_get */
15916de83   Chris Mason   Btrfs: Fixes for ...
54
  	fmode_t mode;
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
55
  	char *name;
0b86a832a   Chris Mason   Btrfs: Add suppor...
56
57
58
59
60
  	/* the internal btrfs device id */
  	u64 devid;
  
  	/* size of the device */
  	u64 total_bytes;
d6397baee   Chris Ball   Btrfs: When shrin...
61
62
  	/* size of the disk */
  	u64 disk_total_bytes;
0b86a832a   Chris Mason   Btrfs: Add suppor...
63
64
65
66
67
68
69
70
71
72
73
  	/* bytes used */
  	u64 bytes_used;
  
  	/* optimal io alignment for this device */
  	u32 io_align;
  
  	/* optimal io width for this device */
  	u32 io_width;
  
  	/* minimal io size for this device */
  	u32 sector_size;
0b86a832a   Chris Mason   Btrfs: Add suppor...
74
75
  	/* type and info about this device */
  	u64 type;
0b86a832a   Chris Mason   Btrfs: Add suppor...
76
  	/* physical drive uuid (or lvm uuid) */
e17cade25   Chris Mason   Btrfs: Add chunk ...
77
  	u8 uuid[BTRFS_UUID_SIZE];
8b7128429   Chris Mason   Btrfs: Add async ...
78

a2de733c7   Arne Jansen   btrfs: scrub
79
80
  	/* per-device scrub information */
  	struct scrub_dev *scrub_device;
8b7128429   Chris Mason   Btrfs: Add async ...
81
  	struct btrfs_work work;
1f78160ce   Xiao Guangrong   Btrfs: using rcu ...
82
83
  	struct rcu_head rcu;
  	struct work_struct rcu_work;
90519d66a   Arne Jansen   btrfs: state info...
84
85
86
87
88
89
90
91
  
  	/* readahead state */
  	spinlock_t reada_lock;
  	atomic_t reada_in_flight;
  	u64 reada_next;
  	struct reada_zone *reada_curr_zone;
  	struct radix_tree_root reada_zones;
  	struct radix_tree_root reada_extents;
387125fc7   Chris Mason   Btrfs: fix barrie...
92
93
94
95
96
  
  	/* for sending down flush barriers */
  	struct bio *flush_bio;
  	struct completion flush_wait;
  	int nobarriers;
0b86a832a   Chris Mason   Btrfs: Add suppor...
97
  };
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
98
99
  struct btrfs_fs_devices {
  	u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */
d4a789474   Wu Fengguang   Btrfs: fix typos ...
100
  	/* the device with this id has the most recent copy of the super */
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
101
102
  	u64 latest_devid;
  	u64 latest_trans;
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
103
  	u64 num_devices;
a0af469b5   Chris Mason   Fix btrfs_open_de...
104
  	u64 open_devices;
2b82032c3   Yan Zheng   Btrfs: Seed devic...
105
  	u64 rw_devices;
cd02dca56   Chris Mason   Btrfs: account fo...
106
  	u64 missing_devices;
2b82032c3   Yan Zheng   Btrfs: Seed devic...
107
  	u64 total_rw_bytes;
d5e2003c2   Josef Bacik   Btrfs: detect wet...
108
  	u64 num_can_discard;
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
109
  	struct block_device *latest_bdev;
e5e9a5206   Chris Mason   Btrfs: avoid race...
110
111
112
113
114
115
  
  	/* all of the devices in the FS, protected by a mutex
  	 * so we can safely walk it to write out the supers without
  	 * worrying about add/remove by the multi-device code
  	 */
  	struct mutex device_list_mutex;
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
116
  	struct list_head devices;
b30757178   Chris Mason   Btrfs: Add a spec...
117
118
119
  
  	/* devices not currently being allocated */
  	struct list_head alloc_list;
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
120
  	struct list_head list;
2b82032c3   Yan Zheng   Btrfs: Seed devic...
121
122
123
  
  	struct btrfs_fs_devices *seed;
  	int seeding;
2b82032c3   Yan Zheng   Btrfs: Seed devic...
124
125
  
  	int opened;
c289811cc   Chris Mason   Btrfs: autodetect...
126
127
128
129
130
  
  	/* set when we find or add a device that doesn't have the
  	 * nonrot flag set
  	 */
  	int rotating;
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
131
  };
cea9e4452   Chris Mason   Change btrfs_map_...
132
133
134
  struct btrfs_bio_stripe {
  	struct btrfs_device *dev;
  	u64 physical;
fce3bb9a1   Li Dongyang   Btrfs: make btrfs...
135
  	u64 length; /* only used for discard mappings */
cea9e4452   Chris Mason   Change btrfs_map_...
136
  };
a1d3c4786   Jan Schmidt   btrfs: btrfs_mult...
137
138
139
140
  struct btrfs_bio;
  typedef void (btrfs_bio_end_io_t) (struct btrfs_bio *bio, int err);
  
  struct btrfs_bio {
cea9e4452   Chris Mason   Change btrfs_map_...
141
142
  	atomic_t stripes_pending;
  	bio_end_io_t *end_io;
7d2b4daa6   Chris Mason   Btrfs: Fix the mu...
143
  	struct bio *orig_bio;
cea9e4452   Chris Mason   Change btrfs_map_...
144
  	void *private;
a236aed14   Chris Mason   Btrfs: Deal with ...
145
146
  	atomic_t error;
  	int max_errors;
cea9e4452   Chris Mason   Change btrfs_map_...
147
  	int num_stripes;
a1d3c4786   Jan Schmidt   btrfs: btrfs_mult...
148
  	int mirror_num;
cea9e4452   Chris Mason   Change btrfs_map_...
149
150
  	struct btrfs_bio_stripe stripes[];
  };
b2117a39f   Miao Xie   btrfs: make the c...
151
152
153
154
  struct btrfs_device_info {
  	struct btrfs_device *dev;
  	u64 dev_offset;
  	u64 max_avail;
73c5de005   Arne Jansen   btrfs: quasi-roun...
155
  	u64 total_avail;
b2117a39f   Miao Xie   btrfs: make the c...
156
  };
1abe9b8a1   liubo   Btrfs: add initia...
157
158
159
160
161
162
163
164
165
166
  struct map_lookup {
  	u64 type;
  	int io_align;
  	int io_width;
  	int stripe_len;
  	int sector_size;
  	int num_stripes;
  	int sub_stripes;
  	struct btrfs_bio_stripe stripes[];
  };
a2de733c7   Arne Jansen   btrfs: scrub
167
168
  #define map_lookup_size(n) (sizeof(struct map_lookup) + \
  			    (sizeof(struct btrfs_bio_stripe) * (n)))
6d07bcec9   Miao Xie   btrfs: fix wrong ...
169
170
  int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start,
  				   u64 end, u64 *length);
a1d3c4786   Jan Schmidt   btrfs: btrfs_mult...
171
  #define btrfs_bio_size(n) (sizeof(struct btrfs_bio) + \
cea9e4452   Chris Mason   Change btrfs_map_...
172
  			    (sizeof(struct btrfs_bio_stripe) * (n)))
0b86a832a   Chris Mason   Btrfs: Add suppor...
173
174
  int btrfs_alloc_dev_extent(struct btrfs_trans_handle *trans,
  			   struct btrfs_device *device,
e17cade25   Chris Mason   Btrfs: Add chunk ...
175
  			   u64 chunk_tree, u64 chunk_objectid,
2b82032c3   Yan Zheng   Btrfs: Seed devic...
176
  			   u64 chunk_offset, u64 start, u64 num_bytes);
cea9e4452   Chris Mason   Change btrfs_map_...
177
178
  int btrfs_map_block(struct btrfs_mapping_tree *map_tree, int rw,
  		    u64 logical, u64 *length,
a1d3c4786   Jan Schmidt   btrfs: btrfs_mult...
179
  		    struct btrfs_bio **bbio_ret, int mirror_num);
a512bbf85   Yan Zheng   Btrfs: superblock...
180
181
182
  int btrfs_rmap_block(struct btrfs_mapping_tree *map_tree,
  		     u64 chunk_start, u64 physical, u64 devid,
  		     u64 **logical, int *naddrs, int *stripe_len);
e4404d6e8   Yan Zheng   Btrfs: shared see...
183
  int btrfs_read_sys_array(struct btrfs_root *root);
0b86a832a   Chris Mason   Btrfs: Add suppor...
184
185
  int btrfs_read_chunk_tree(struct btrfs_root *root);
  int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
2b82032c3   Yan Zheng   Btrfs: Seed devic...
186
  		      struct btrfs_root *extent_root, u64 type);
0b86a832a   Chris Mason   Btrfs: Add suppor...
187
188
  void btrfs_mapping_init(struct btrfs_mapping_tree *tree);
  void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree);
f188591e9   Chris Mason   Btrfs: Retry meta...
189
  int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio,
8b7128429   Chris Mason   Btrfs: Add async ...
190
  		  int mirror_num, int async_submit);
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
191
  int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
97288f2c7   Christoph Hellwig   Btrfs: corret fmo...
192
193
  		       fmode_t flags, void *holder);
  int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder,
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
194
195
  			  struct btrfs_fs_devices **fs_devices_ret);
  int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
dfe250206   Chris Mason   Btrfs: Add mount ...
196
  int btrfs_close_extra_devices(struct btrfs_fs_devices *fs_devices);
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
197
198
199
  int btrfs_add_device(struct btrfs_trans_handle *trans,
  		     struct btrfs_root *root,
  		     struct btrfs_device *device);
a061fc8da   Chris Mason   Btrfs: Add suppor...
200
  int btrfs_rm_device(struct btrfs_root *root, char *device_path);
8a4b83cc8   Chris Mason   Btrfs: Add suppor...
201
  int btrfs_cleanup_fs_uuids(void);
f188591e9   Chris Mason   Btrfs: Retry meta...
202
  int btrfs_num_copies(struct btrfs_mapping_tree *map_tree, u64 logical, u64 len);
8f18cf133   Chris Mason   Btrfs: Make the r...
203
204
205
  int btrfs_grow_device(struct btrfs_trans_handle *trans,
  		      struct btrfs_device *device, u64 new_size);
  struct btrfs_device *btrfs_find_device(struct btrfs_root *root, u64 devid,
2b82032c3   Yan Zheng   Btrfs: Seed devic...
206
  				       u8 *uuid, u8 *fsid);
8f18cf133   Chris Mason   Btrfs: Make the r...
207
  int btrfs_shrink_device(struct btrfs_device *device, u64 new_size);
788f20eb5   Chris Mason   Btrfs: Add new io...
208
  int btrfs_init_new_device(struct btrfs_root *root, char *path);
ec44a35cb   Chris Mason   Btrfs: Add balanc...
209
  int btrfs_balance(struct btrfs_root *dev_root);
2b82032c3   Yan Zheng   Btrfs: Seed devic...
210
  int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset);
ba1bf4818   Josef Bacik   Btrfs: make balan...
211
212
213
  int find_free_dev_extent(struct btrfs_trans_handle *trans,
  			 struct btrfs_device *device, u64 num_bytes,
  			 u64 *start, u64 *max_avail);
0b86a832a   Chris Mason   Btrfs: Add suppor...
214
  #endif