Blame view
fs/btrfs/volumes.h
6.33 KB
0b86a832a 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 Btrfs: Add suppor... |
21 |
|
cea9e4452 Change btrfs_map_... |
22 |
#include <linux/bio.h> |
b2117a39f btrfs: make the c... |
23 |
#include <linux/sort.h> |
8b7128429 Btrfs: Add async ... |
24 |
#include "async-thread.h" |
cea9e4452 Change btrfs_map_... |
25 |
|
b2117a39f btrfs: make the c... |
26 |
#define BTRFS_STRIPE_LEN (64 * 1024) |
f29844623 Btrfs: Write out ... |
27 |
struct buffer_head; |
ffbd517d5 Btrfs: use WRITE_... |
28 29 30 31 |
struct btrfs_pending_bios { struct bio *head; struct bio *tail; }; |
0b86a832a Btrfs: Add suppor... |
32 33 |
struct btrfs_device { struct list_head dev_list; |
b30757178 Btrfs: Add a spec... |
34 |
struct list_head dev_alloc_list; |
2b82032c3 Btrfs: Seed devic... |
35 |
struct btrfs_fs_devices *fs_devices; |
0b86a832a Btrfs: Add suppor... |
36 |
struct btrfs_root *dev_root; |
ffbd517d5 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 Btrfs: Add async ... |
42 |
int running_pending; |
dfe250206 Btrfs: Add mount ... |
43 |
u64 generation; |
b30757178 Btrfs: Add a spec... |
44 |
|
2b82032c3 Btrfs: Seed devic... |
45 |
int writeable; |
dfe250206 Btrfs: Add mount ... |
46 |
int in_fs_metadata; |
cd02dca56 Btrfs: account fo... |
47 |
int missing; |
d5e2003c2 Btrfs: detect wet... |
48 |
int can_discard; |
b30757178 Btrfs: Add a spec... |
49 |
|
8790d502e Btrfs: Add suppor... |
50 |
spinlock_t io_lock; |
0b86a832a Btrfs: Add suppor... |
51 52 |
struct block_device *bdev; |
d4d776299 block: clean up b... |
53 |
/* the mode sent to blkdev_get */ |
15916de83 Btrfs: Fixes for ... |
54 |
fmode_t mode; |
8a4b83cc8 Btrfs: Add suppor... |
55 |
char *name; |
0b86a832a Btrfs: Add suppor... |
56 57 58 59 60 |
/* the internal btrfs device id */ u64 devid; /* size of the device */ u64 total_bytes; |
d6397baee Btrfs: When shrin... |
61 62 |
/* size of the disk */ u64 disk_total_bytes; |
0b86a832a 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 Btrfs: Add suppor... |
74 75 |
/* type and info about this device */ u64 type; |
0b86a832a Btrfs: Add suppor... |
76 |
/* physical drive uuid (or lvm uuid) */ |
e17cade25 Btrfs: Add chunk ... |
77 |
u8 uuid[BTRFS_UUID_SIZE]; |
8b7128429 Btrfs: Add async ... |
78 |
|
a2de733c7 btrfs: scrub |
79 80 |
/* per-device scrub information */ struct scrub_dev *scrub_device; |
8b7128429 Btrfs: Add async ... |
81 |
struct btrfs_work work; |
1f78160ce Btrfs: using rcu ... |
82 83 |
struct rcu_head rcu; struct work_struct rcu_work; |
90519d66a 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 Btrfs: fix barrie... |
92 93 94 95 96 |
/* for sending down flush barriers */ struct bio *flush_bio; struct completion flush_wait; int nobarriers; |
0b86a832a Btrfs: Add suppor... |
97 |
}; |
8a4b83cc8 Btrfs: Add suppor... |
98 99 |
struct btrfs_fs_devices { u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ |
d4a789474 Btrfs: fix typos ... |
100 |
/* the device with this id has the most recent copy of the super */ |
8a4b83cc8 Btrfs: Add suppor... |
101 102 |
u64 latest_devid; u64 latest_trans; |
8a4b83cc8 Btrfs: Add suppor... |
103 |
u64 num_devices; |
a0af469b5 Fix btrfs_open_de... |
104 |
u64 open_devices; |
2b82032c3 Btrfs: Seed devic... |
105 |
u64 rw_devices; |
cd02dca56 Btrfs: account fo... |
106 |
u64 missing_devices; |
2b82032c3 Btrfs: Seed devic... |
107 |
u64 total_rw_bytes; |
d5e2003c2 Btrfs: detect wet... |
108 |
u64 num_can_discard; |
8a4b83cc8 Btrfs: Add suppor... |
109 |
struct block_device *latest_bdev; |
e5e9a5206 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 Btrfs: Add suppor... |
116 |
struct list_head devices; |
b30757178 Btrfs: Add a spec... |
117 118 119 |
/* devices not currently being allocated */ struct list_head alloc_list; |
8a4b83cc8 Btrfs: Add suppor... |
120 |
struct list_head list; |
2b82032c3 Btrfs: Seed devic... |
121 122 123 |
struct btrfs_fs_devices *seed; int seeding; |
2b82032c3 Btrfs: Seed devic... |
124 125 |
int opened; |
c289811cc 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 Btrfs: Add suppor... |
131 |
}; |
cea9e4452 Change btrfs_map_... |
132 133 134 |
struct btrfs_bio_stripe { struct btrfs_device *dev; u64 physical; |
fce3bb9a1 Btrfs: make btrfs... |
135 |
u64 length; /* only used for discard mappings */ |
cea9e4452 Change btrfs_map_... |
136 |
}; |
a1d3c4786 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 Change btrfs_map_... |
141 142 |
atomic_t stripes_pending; bio_end_io_t *end_io; |
7d2b4daa6 Btrfs: Fix the mu... |
143 |
struct bio *orig_bio; |
cea9e4452 Change btrfs_map_... |
144 |
void *private; |
a236aed14 Btrfs: Deal with ... |
145 146 |
atomic_t error; int max_errors; |
cea9e4452 Change btrfs_map_... |
147 |
int num_stripes; |
a1d3c4786 btrfs: btrfs_mult... |
148 |
int mirror_num; |
cea9e4452 Change btrfs_map_... |
149 150 |
struct btrfs_bio_stripe stripes[]; }; |
b2117a39f btrfs: make the c... |
151 152 153 154 |
struct btrfs_device_info { struct btrfs_device *dev; u64 dev_offset; u64 max_avail; |
73c5de005 btrfs: quasi-roun... |
155 |
u64 total_avail; |
b2117a39f btrfs: make the c... |
156 |
}; |
1abe9b8a1 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 btrfs: scrub |
167 168 |
#define map_lookup_size(n) (sizeof(struct map_lookup) + \ (sizeof(struct btrfs_bio_stripe) * (n))) |
6d07bcec9 btrfs: fix wrong ... |
169 170 |
int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start, u64 end, u64 *length); |
a1d3c4786 btrfs: btrfs_mult... |
171 |
#define btrfs_bio_size(n) (sizeof(struct btrfs_bio) + \ |
cea9e4452 Change btrfs_map_... |
172 |
(sizeof(struct btrfs_bio_stripe) * (n))) |
0b86a832a Btrfs: Add suppor... |
173 174 |
int btrfs_alloc_dev_extent(struct btrfs_trans_handle *trans, struct btrfs_device *device, |
e17cade25 Btrfs: Add chunk ... |
175 |
u64 chunk_tree, u64 chunk_objectid, |
2b82032c3 Btrfs: Seed devic... |
176 |
u64 chunk_offset, u64 start, u64 num_bytes); |
cea9e4452 Change btrfs_map_... |
177 178 |
int btrfs_map_block(struct btrfs_mapping_tree *map_tree, int rw, u64 logical, u64 *length, |
a1d3c4786 btrfs: btrfs_mult... |
179 |
struct btrfs_bio **bbio_ret, int mirror_num); |
a512bbf85 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 Btrfs: shared see... |
183 |
int btrfs_read_sys_array(struct btrfs_root *root); |
0b86a832a Btrfs: Add suppor... |
184 185 |
int btrfs_read_chunk_tree(struct btrfs_root *root); int btrfs_alloc_chunk(struct btrfs_trans_handle *trans, |
2b82032c3 Btrfs: Seed devic... |
186 |
struct btrfs_root *extent_root, u64 type); |
0b86a832a 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 Btrfs: Retry meta... |
189 |
int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio, |
8b7128429 Btrfs: Add async ... |
190 |
int mirror_num, int async_submit); |
8a4b83cc8 Btrfs: Add suppor... |
191 |
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, |
97288f2c7 Btrfs: corret fmo... |
192 193 |
fmode_t flags, void *holder); int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, |
8a4b83cc8 Btrfs: Add suppor... |
194 195 |
struct btrfs_fs_devices **fs_devices_ret); int btrfs_close_devices(struct btrfs_fs_devices *fs_devices); |
dfe250206 Btrfs: Add mount ... |
196 |
int btrfs_close_extra_devices(struct btrfs_fs_devices *fs_devices); |
8a4b83cc8 Btrfs: Add suppor... |
197 198 199 |
int btrfs_add_device(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_device *device); |
a061fc8da Btrfs: Add suppor... |
200 |
int btrfs_rm_device(struct btrfs_root *root, char *device_path); |
8a4b83cc8 Btrfs: Add suppor... |
201 |
int btrfs_cleanup_fs_uuids(void); |
f188591e9 Btrfs: Retry meta... |
202 |
int btrfs_num_copies(struct btrfs_mapping_tree *map_tree, u64 logical, u64 len); |
8f18cf133 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 Btrfs: Seed devic... |
206 |
u8 *uuid, u8 *fsid); |
8f18cf133 Btrfs: Make the r... |
207 |
int btrfs_shrink_device(struct btrfs_device *device, u64 new_size); |
788f20eb5 Btrfs: Add new io... |
208 |
int btrfs_init_new_device(struct btrfs_root *root, char *path); |
ec44a35cb Btrfs: Add balanc... |
209 |
int btrfs_balance(struct btrfs_root *dev_root); |
2b82032c3 Btrfs: Seed devic... |
210 |
int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset); |
ba1bf4818 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 Btrfs: Add suppor... |
214 |
#endif |