btrfs: drop btrfs_device::can_discard to query directly
[linux-block.git] / fs / btrfs / volumes.h
1 /*
2  * Copyright (C) 2007 Oracle.  All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public
6  * License v2 as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public
14  * License along with this program; if not, write to the
15  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16  * Boston, MA 021110-1307, USA.
17  */
18
19 #ifndef __BTRFS_VOLUMES_
20 #define __BTRFS_VOLUMES_
21
22 #include <linux/bio.h>
23 #include <linux/sort.h>
24 #include <linux/btrfs.h>
25 #include "async-thread.h"
26
27 extern struct mutex uuid_mutex;
28
29 #define BTRFS_STRIPE_LEN        SZ_64K
30
31 struct buffer_head;
32 struct btrfs_pending_bios {
33         struct bio *head;
34         struct bio *tail;
35 };
36
37 /*
38  * Use sequence counter to get consistent device stat data on
39  * 32-bit processors.
40  */
41 #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
42 #include <linux/seqlock.h>
43 #define __BTRFS_NEED_DEVICE_DATA_ORDERED
44 #define btrfs_device_data_ordered_init(device)  \
45         seqcount_init(&device->data_seqcount)
46 #else
47 #define btrfs_device_data_ordered_init(device) do { } while (0)
48 #endif
49
50 struct btrfs_device {
51         struct list_head dev_list;
52         struct list_head dev_alloc_list;
53         struct btrfs_fs_devices *fs_devices;
54         struct btrfs_fs_info *fs_info;
55
56         struct rcu_string *name;
57
58         u64 generation;
59
60         spinlock_t io_lock ____cacheline_aligned;
61         int running_pending;
62         /* regular prio bios */
63         struct btrfs_pending_bios pending_bios;
64         /* sync bios */
65         struct btrfs_pending_bios pending_sync_bios;
66
67         struct block_device *bdev;
68
69         /* the mode sent to blkdev_get */
70         fmode_t mode;
71
72         int writeable;
73         int in_fs_metadata;
74         int missing;
75         int is_tgtdev_for_dev_replace;
76         blk_status_t last_flush_error;
77         int flush_bio_sent;
78
79 #ifdef __BTRFS_NEED_DEVICE_DATA_ORDERED
80         seqcount_t data_seqcount;
81 #endif
82
83         /* the internal btrfs device id */
84         u64 devid;
85
86         /* size of the device in memory */
87         u64 total_bytes;
88
89         /* size of the device on disk */
90         u64 disk_total_bytes;
91
92         /* bytes used */
93         u64 bytes_used;
94
95         /* optimal io alignment for this device */
96         u32 io_align;
97
98         /* optimal io width for this device */
99         u32 io_width;
100         /* type and info about this device */
101         u64 type;
102
103         /* minimal io size for this device */
104         u32 sector_size;
105
106         /* physical drive uuid (or lvm uuid) */
107         u8 uuid[BTRFS_UUID_SIZE];
108
109         /*
110          * size of the device on the current transaction
111          *
112          * This variant is update when committing the transaction,
113          * and protected by device_list_mutex
114          */
115         u64 commit_total_bytes;
116
117         /* bytes used on the current transaction */
118         u64 commit_bytes_used;
119         /*
120          * used to manage the device which is resized
121          *
122          * It is protected by chunk_lock.
123          */
124         struct list_head resized_list;
125
126         /* for sending down flush barriers */
127         struct bio *flush_bio;
128         struct completion flush_wait;
129
130         /* per-device scrub information */
131         struct scrub_ctx *scrub_device;
132
133         struct btrfs_work work;
134         struct rcu_head rcu;
135
136         /* readahead state */
137         spinlock_t reada_lock;
138         atomic_t reada_in_flight;
139         u64 reada_next;
140         struct reada_zone *reada_curr_zone;
141         struct radix_tree_root reada_zones;
142         struct radix_tree_root reada_extents;
143
144         /* disk I/O failure stats. For detailed description refer to
145          * enum btrfs_dev_stat_values in ioctl.h */
146         int dev_stats_valid;
147
148         /* Counter to record the change of device stats */
149         atomic_t dev_stats_ccnt;
150         atomic_t dev_stat_values[BTRFS_DEV_STAT_VALUES_MAX];
151 };
152
153 /*
154  * If we read those variants at the context of their own lock, we needn't
155  * use the following helpers, reading them directly is safe.
156  */
157 #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
158 #define BTRFS_DEVICE_GETSET_FUNCS(name)                                 \
159 static inline u64                                                       \
160 btrfs_device_get_##name(const struct btrfs_device *dev)                 \
161 {                                                                       \
162         u64 size;                                                       \
163         unsigned int seq;                                               \
164                                                                         \
165         do {                                                            \
166                 seq = read_seqcount_begin(&dev->data_seqcount);         \
167                 size = dev->name;                                       \
168         } while (read_seqcount_retry(&dev->data_seqcount, seq));        \
169         return size;                                                    \
170 }                                                                       \
171                                                                         \
172 static inline void                                                      \
173 btrfs_device_set_##name(struct btrfs_device *dev, u64 size)             \
174 {                                                                       \
175         preempt_disable();                                              \
176         write_seqcount_begin(&dev->data_seqcount);                      \
177         dev->name = size;                                               \
178         write_seqcount_end(&dev->data_seqcount);                        \
179         preempt_enable();                                               \
180 }
181 #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
182 #define BTRFS_DEVICE_GETSET_FUNCS(name)                                 \
183 static inline u64                                                       \
184 btrfs_device_get_##name(const struct btrfs_device *dev)                 \
185 {                                                                       \
186         u64 size;                                                       \
187                                                                         \
188         preempt_disable();                                              \
189         size = dev->name;                                               \
190         preempt_enable();                                               \
191         return size;                                                    \
192 }                                                                       \
193                                                                         \
194 static inline void                                                      \
195 btrfs_device_set_##name(struct btrfs_device *dev, u64 size)             \
196 {                                                                       \
197         preempt_disable();                                              \
198         dev->name = size;                                               \
199         preempt_enable();                                               \
200 }
201 #else
202 #define BTRFS_DEVICE_GETSET_FUNCS(name)                                 \
203 static inline u64                                                       \
204 btrfs_device_get_##name(const struct btrfs_device *dev)                 \
205 {                                                                       \
206         return dev->name;                                               \
207 }                                                                       \
208                                                                         \
209 static inline void                                                      \
210 btrfs_device_set_##name(struct btrfs_device *dev, u64 size)             \
211 {                                                                       \
212         dev->name = size;                                               \
213 }
214 #endif
215
216 BTRFS_DEVICE_GETSET_FUNCS(total_bytes);
217 BTRFS_DEVICE_GETSET_FUNCS(disk_total_bytes);
218 BTRFS_DEVICE_GETSET_FUNCS(bytes_used);
219
220 struct btrfs_fs_devices {
221         u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */
222
223         u64 num_devices;
224         u64 open_devices;
225         u64 rw_devices;
226         u64 missing_devices;
227         u64 total_rw_bytes;
228         u64 total_devices;
229         struct block_device *latest_bdev;
230
231         /* all of the devices in the FS, protected by a mutex
232          * so we can safely walk it to write out the supers without
233          * worrying about add/remove by the multi-device code.
234          * Scrubbing super can kick off supers writing by holding
235          * this mutex lock.
236          */
237         struct mutex device_list_mutex;
238         struct list_head devices;
239
240         struct list_head resized_devices;
241         /* devices not currently being allocated */
242         struct list_head alloc_list;
243         struct list_head list;
244
245         struct btrfs_fs_devices *seed;
246         int seeding;
247
248         int opened;
249
250         /* set when we find or add a device that doesn't have the
251          * nonrot flag set
252          */
253         int rotating;
254
255         struct btrfs_fs_info *fs_info;
256         /* sysfs kobjects */
257         struct kobject fsid_kobj;
258         struct kobject *device_dir_kobj;
259         struct completion kobj_unregister;
260 };
261
262 #define BTRFS_BIO_INLINE_CSUM_SIZE      64
263
264 /*
265  * we need the mirror number and stripe index to be passed around
266  * the call chain while we are processing end_io (especially errors).
267  * Really, what we need is a btrfs_bio structure that has this info
268  * and is properly sized with its stripe array, but we're not there
269  * quite yet.  We have our own btrfs bioset, and all of the bios
270  * we allocate are actually btrfs_io_bios.  We'll cram as much of
271  * struct btrfs_bio as we can into this over time.
272  */
273 typedef void (btrfs_io_bio_end_io_t) (struct btrfs_io_bio *bio, int err);
274 struct btrfs_io_bio {
275         unsigned int mirror_num;
276         unsigned int stripe_index;
277         u64 logical;
278         u8 *csum;
279         u8 csum_inline[BTRFS_BIO_INLINE_CSUM_SIZE];
280         u8 *csum_allocated;
281         btrfs_io_bio_end_io_t *end_io;
282         struct bvec_iter iter;
283         /*
284          * This member must come last, bio_alloc_bioset will allocate enough
285          * bytes for entire btrfs_io_bio but relies on bio being last.
286          */
287         struct bio bio;
288 };
289
290 static inline struct btrfs_io_bio *btrfs_io_bio(struct bio *bio)
291 {
292         return container_of(bio, struct btrfs_io_bio, bio);
293 }
294
295 struct btrfs_bio_stripe {
296         struct btrfs_device *dev;
297         u64 physical;
298         u64 length; /* only used for discard mappings */
299 };
300
301 struct btrfs_bio;
302 typedef void (btrfs_bio_end_io_t) (struct btrfs_bio *bio, int err);
303
304 struct btrfs_bio {
305         refcount_t refs;
306         atomic_t stripes_pending;
307         struct btrfs_fs_info *fs_info;
308         u64 map_type; /* get from map_lookup->type */
309         bio_end_io_t *end_io;
310         struct bio *orig_bio;
311         unsigned long flags;
312         void *private;
313         atomic_t error;
314         int max_errors;
315         int num_stripes;
316         int mirror_num;
317         int num_tgtdevs;
318         int *tgtdev_map;
319         /*
320          * logical block numbers for the start of each stripe
321          * The last one or two are p/q.  These are sorted,
322          * so raid_map[0] is the start of our full stripe
323          */
324         u64 *raid_map;
325         struct btrfs_bio_stripe stripes[];
326 };
327
328 struct btrfs_device_info {
329         struct btrfs_device *dev;
330         u64 dev_offset;
331         u64 max_avail;
332         u64 total_avail;
333 };
334
335 struct btrfs_raid_attr {
336         int sub_stripes;        /* sub_stripes info for map */
337         int dev_stripes;        /* stripes per dev */
338         int devs_max;           /* max devs to use */
339         int devs_min;           /* min devs needed */
340         int tolerated_failures; /* max tolerated fail devs */
341         int devs_increment;     /* ndevs has to be a multiple of this */
342         int ncopies;            /* how many copies to data has */
343 };
344
345 extern const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES];
346 extern const int btrfs_raid_mindev_error[BTRFS_NR_RAID_TYPES];
347 extern const u64 btrfs_raid_group[BTRFS_NR_RAID_TYPES];
348
349 struct map_lookup {
350         u64 type;
351         int io_align;
352         int io_width;
353         u64 stripe_len;
354         int num_stripes;
355         int sub_stripes;
356         struct btrfs_bio_stripe stripes[];
357 };
358
359 #define map_lookup_size(n) (sizeof(struct map_lookup) + \
360                             (sizeof(struct btrfs_bio_stripe) * (n)))
361
362 struct btrfs_balance_args;
363 struct btrfs_balance_progress;
364 struct btrfs_balance_control {
365         struct btrfs_fs_info *fs_info;
366
367         struct btrfs_balance_args data;
368         struct btrfs_balance_args meta;
369         struct btrfs_balance_args sys;
370
371         u64 flags;
372
373         struct btrfs_balance_progress stat;
374 };
375
376 enum btrfs_map_op {
377         BTRFS_MAP_READ,
378         BTRFS_MAP_WRITE,
379         BTRFS_MAP_DISCARD,
380         BTRFS_MAP_GET_READ_MIRRORS,
381 };
382
383 static inline enum btrfs_map_op btrfs_op(struct bio *bio)
384 {
385         switch (bio_op(bio)) {
386         case REQ_OP_DISCARD:
387                 return BTRFS_MAP_DISCARD;
388         case REQ_OP_WRITE:
389                 return BTRFS_MAP_WRITE;
390         default:
391                 WARN_ON_ONCE(1);
392         case REQ_OP_READ:
393                 return BTRFS_MAP_READ;
394         }
395 }
396
397 int btrfs_account_dev_extents_size(struct btrfs_device *device, u64 start,
398                                    u64 end, u64 *length);
399 void btrfs_get_bbio(struct btrfs_bio *bbio);
400 void btrfs_put_bbio(struct btrfs_bio *bbio);
401 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
402                     u64 logical, u64 *length,
403                     struct btrfs_bio **bbio_ret, int mirror_num);
404 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
405                      u64 logical, u64 *length,
406                      struct btrfs_bio **bbio_ret);
407 int btrfs_rmap_block(struct btrfs_fs_info *fs_info,
408                      u64 chunk_start, u64 physical, u64 devid,
409                      u64 **logical, int *naddrs, int *stripe_len);
410 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info);
411 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info);
412 int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
413                       struct btrfs_fs_info *fs_info, u64 type);
414 void btrfs_mapping_init(struct btrfs_mapping_tree *tree);
415 void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree);
416 blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio,
417                            int mirror_num, int async_submit);
418 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
419                        fmode_t flags, void *holder);
420 int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder,
421                           struct btrfs_fs_devices **fs_devices_ret);
422 int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
423 void btrfs_close_extra_devices(struct btrfs_fs_devices *fs_devices, int step);
424 void btrfs_assign_next_active_device(struct btrfs_fs_info *fs_info,
425                 struct btrfs_device *device, struct btrfs_device *this_dev);
426 int btrfs_find_device_missing_or_by_path(struct btrfs_fs_info *fs_info,
427                                          const char *device_path,
428                                          struct btrfs_device **device);
429 int btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, u64 devid,
430                                          const char *devpath,
431                                          struct btrfs_device **device);
432 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
433                                         const u64 *devid,
434                                         const u8 *uuid);
435 int btrfs_rm_device(struct btrfs_fs_info *fs_info,
436                     const char *device_path, u64 devid);
437 void btrfs_cleanup_fs_uuids(void);
438 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len);
439 int btrfs_grow_device(struct btrfs_trans_handle *trans,
440                       struct btrfs_device *device, u64 new_size);
441 struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid,
442                                        u8 *uuid, u8 *fsid);
443 int btrfs_shrink_device(struct btrfs_device *device, u64 new_size);
444 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *path);
445 int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,
446                                   const char *device_path,
447                                   struct btrfs_device *srcdev,
448                                   struct btrfs_device **device_out);
449 int btrfs_balance(struct btrfs_balance_control *bctl,
450                   struct btrfs_ioctl_balance_args *bargs);
451 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info);
452 int btrfs_recover_balance(struct btrfs_fs_info *fs_info);
453 int btrfs_pause_balance(struct btrfs_fs_info *fs_info);
454 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info);
455 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info);
456 int btrfs_check_uuid_tree(struct btrfs_fs_info *fs_info);
457 int btrfs_chunk_readonly(struct btrfs_fs_info *fs_info, u64 chunk_offset);
458 int find_free_dev_extent_start(struct btrfs_transaction *transaction,
459                          struct btrfs_device *device, u64 num_bytes,
460                          u64 search_start, u64 *start, u64 *max_avail);
461 int find_free_dev_extent(struct btrfs_trans_handle *trans,
462                          struct btrfs_device *device, u64 num_bytes,
463                          u64 *start, u64 *max_avail);
464 void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index);
465 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info,
466                         struct btrfs_ioctl_get_dev_stats *stats);
467 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info);
468 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info);
469 int btrfs_run_dev_stats(struct btrfs_trans_handle *trans,
470                         struct btrfs_fs_info *fs_info);
471 void btrfs_rm_dev_replace_remove_srcdev(struct btrfs_fs_info *fs_info,
472                                         struct btrfs_device *srcdev);
473 void btrfs_rm_dev_replace_free_srcdev(struct btrfs_fs_info *fs_info,
474                                       struct btrfs_device *srcdev);
475 void btrfs_destroy_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,
476                                       struct btrfs_device *tgtdev);
477 void btrfs_init_dev_replace_tgtdev_for_resume(struct btrfs_fs_info *fs_info,
478                                               struct btrfs_device *tgtdev);
479 void btrfs_scratch_superblocks(struct block_device *bdev, const char *device_path);
480 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info,
481                            u64 logical, u64 len);
482 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info,
483                                     u64 logical);
484 int btrfs_finish_chunk_alloc(struct btrfs_trans_handle *trans,
485                                 struct btrfs_fs_info *fs_info,
486                                 u64 chunk_offset, u64 chunk_size);
487 int btrfs_remove_chunk(struct btrfs_trans_handle *trans,
488                        struct btrfs_fs_info *fs_info, u64 chunk_offset);
489
490 static inline void btrfs_dev_stat_inc(struct btrfs_device *dev,
491                                       int index)
492 {
493         atomic_inc(dev->dev_stat_values + index);
494         /*
495          * This memory barrier orders stores updating statistics before stores
496          * updating dev_stats_ccnt.
497          *
498          * It pairs with smp_rmb() in btrfs_run_dev_stats().
499          */
500         smp_mb__before_atomic();
501         atomic_inc(&dev->dev_stats_ccnt);
502 }
503
504 static inline int btrfs_dev_stat_read(struct btrfs_device *dev,
505                                       int index)
506 {
507         return atomic_read(dev->dev_stat_values + index);
508 }
509
510 static inline int btrfs_dev_stat_read_and_reset(struct btrfs_device *dev,
511                                                 int index)
512 {
513         int ret;
514
515         ret = atomic_xchg(dev->dev_stat_values + index, 0);
516         /*
517          * atomic_xchg implies a full memory barriers as per atomic_t.txt:
518          * - RMW operations that have a return value are fully ordered;
519          *
520          * This implicit memory barriers is paired with the smp_rmb in
521          * btrfs_run_dev_stats
522          */
523         atomic_inc(&dev->dev_stats_ccnt);
524         return ret;
525 }
526
527 static inline void btrfs_dev_stat_set(struct btrfs_device *dev,
528                                       int index, unsigned long val)
529 {
530         atomic_set(dev->dev_stat_values + index, val);
531         /*
532          * This memory barrier orders stores updating statistics before stores
533          * updating dev_stats_ccnt.
534          *
535          * It pairs with smp_rmb() in btrfs_run_dev_stats().
536          */
537         smp_mb__before_atomic();
538         atomic_inc(&dev->dev_stats_ccnt);
539 }
540
541 static inline void btrfs_dev_stat_reset(struct btrfs_device *dev,
542                                         int index)
543 {
544         btrfs_dev_stat_set(dev, index, 0);
545 }
546
547 void btrfs_update_commit_device_size(struct btrfs_fs_info *fs_info);
548 void btrfs_update_commit_device_bytes_used(struct btrfs_fs_info *fs_info,
549                                         struct btrfs_transaction *transaction);
550
551 struct list_head *btrfs_get_fs_uuids(void);
552 void btrfs_set_fs_info_ptr(struct btrfs_fs_info *fs_info);
553 void btrfs_reset_fs_info_ptr(struct btrfs_fs_info *fs_info);
554
555 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info);
556
557 #endif