Merge tag 'for-5.16-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
[platform/kernel/linux-starfive.git] / fs / btrfs / volumes.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2007 Oracle.  All rights reserved.
4  */
5
6 #include <linux/sched.h>
7 #include <linux/sched/mm.h>
8 #include <linux/bio.h>
9 #include <linux/slab.h>
10 #include <linux/blkdev.h>
11 #include <linux/ratelimit.h>
12 #include <linux/kthread.h>
13 #include <linux/raid/pq.h>
14 #include <linux/semaphore.h>
15 #include <linux/uuid.h>
16 #include <linux/list_sort.h>
17 #include <linux/namei.h>
18 #include "misc.h"
19 #include "ctree.h"
20 #include "extent_map.h"
21 #include "disk-io.h"
22 #include "transaction.h"
23 #include "print-tree.h"
24 #include "volumes.h"
25 #include "raid56.h"
26 #include "async-thread.h"
27 #include "check-integrity.h"
28 #include "rcu-string.h"
29 #include "dev-replace.h"
30 #include "sysfs.h"
31 #include "tree-checker.h"
32 #include "space-info.h"
33 #include "block-group.h"
34 #include "discard.h"
35 #include "zoned.h"
36
37 const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = {
38         [BTRFS_RAID_RAID10] = {
39                 .sub_stripes    = 2,
40                 .dev_stripes    = 1,
41                 .devs_max       = 0,    /* 0 == as many as possible */
42                 .devs_min       = 2,
43                 .tolerated_failures = 1,
44                 .devs_increment = 2,
45                 .ncopies        = 2,
46                 .nparity        = 0,
47                 .raid_name      = "raid10",
48                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID10,
49                 .mindev_error   = BTRFS_ERROR_DEV_RAID10_MIN_NOT_MET,
50         },
51         [BTRFS_RAID_RAID1] = {
52                 .sub_stripes    = 1,
53                 .dev_stripes    = 1,
54                 .devs_max       = 2,
55                 .devs_min       = 2,
56                 .tolerated_failures = 1,
57                 .devs_increment = 2,
58                 .ncopies        = 2,
59                 .nparity        = 0,
60                 .raid_name      = "raid1",
61                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID1,
62                 .mindev_error   = BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET,
63         },
64         [BTRFS_RAID_RAID1C3] = {
65                 .sub_stripes    = 1,
66                 .dev_stripes    = 1,
67                 .devs_max       = 3,
68                 .devs_min       = 3,
69                 .tolerated_failures = 2,
70                 .devs_increment = 3,
71                 .ncopies        = 3,
72                 .nparity        = 0,
73                 .raid_name      = "raid1c3",
74                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID1C3,
75                 .mindev_error   = BTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET,
76         },
77         [BTRFS_RAID_RAID1C4] = {
78                 .sub_stripes    = 1,
79                 .dev_stripes    = 1,
80                 .devs_max       = 4,
81                 .devs_min       = 4,
82                 .tolerated_failures = 3,
83                 .devs_increment = 4,
84                 .ncopies        = 4,
85                 .nparity        = 0,
86                 .raid_name      = "raid1c4",
87                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID1C4,
88                 .mindev_error   = BTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET,
89         },
90         [BTRFS_RAID_DUP] = {
91                 .sub_stripes    = 1,
92                 .dev_stripes    = 2,
93                 .devs_max       = 1,
94                 .devs_min       = 1,
95                 .tolerated_failures = 0,
96                 .devs_increment = 1,
97                 .ncopies        = 2,
98                 .nparity        = 0,
99                 .raid_name      = "dup",
100                 .bg_flag        = BTRFS_BLOCK_GROUP_DUP,
101                 .mindev_error   = 0,
102         },
103         [BTRFS_RAID_RAID0] = {
104                 .sub_stripes    = 1,
105                 .dev_stripes    = 1,
106                 .devs_max       = 0,
107                 .devs_min       = 1,
108                 .tolerated_failures = 0,
109                 .devs_increment = 1,
110                 .ncopies        = 1,
111                 .nparity        = 0,
112                 .raid_name      = "raid0",
113                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID0,
114                 .mindev_error   = 0,
115         },
116         [BTRFS_RAID_SINGLE] = {
117                 .sub_stripes    = 1,
118                 .dev_stripes    = 1,
119                 .devs_max       = 1,
120                 .devs_min       = 1,
121                 .tolerated_failures = 0,
122                 .devs_increment = 1,
123                 .ncopies        = 1,
124                 .nparity        = 0,
125                 .raid_name      = "single",
126                 .bg_flag        = 0,
127                 .mindev_error   = 0,
128         },
129         [BTRFS_RAID_RAID5] = {
130                 .sub_stripes    = 1,
131                 .dev_stripes    = 1,
132                 .devs_max       = 0,
133                 .devs_min       = 2,
134                 .tolerated_failures = 1,
135                 .devs_increment = 1,
136                 .ncopies        = 1,
137                 .nparity        = 1,
138                 .raid_name      = "raid5",
139                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID5,
140                 .mindev_error   = BTRFS_ERROR_DEV_RAID5_MIN_NOT_MET,
141         },
142         [BTRFS_RAID_RAID6] = {
143                 .sub_stripes    = 1,
144                 .dev_stripes    = 1,
145                 .devs_max       = 0,
146                 .devs_min       = 3,
147                 .tolerated_failures = 2,
148                 .devs_increment = 1,
149                 .ncopies        = 1,
150                 .nparity        = 2,
151                 .raid_name      = "raid6",
152                 .bg_flag        = BTRFS_BLOCK_GROUP_RAID6,
153                 .mindev_error   = BTRFS_ERROR_DEV_RAID6_MIN_NOT_MET,
154         },
155 };
156
157 /*
158  * Convert block group flags (BTRFS_BLOCK_GROUP_*) to btrfs_raid_types, which
159  * can be used as index to access btrfs_raid_array[].
160  */
161 enum btrfs_raid_types __attribute_const__ btrfs_bg_flags_to_raid_index(u64 flags)
162 {
163         if (flags & BTRFS_BLOCK_GROUP_RAID10)
164                 return BTRFS_RAID_RAID10;
165         else if (flags & BTRFS_BLOCK_GROUP_RAID1)
166                 return BTRFS_RAID_RAID1;
167         else if (flags & BTRFS_BLOCK_GROUP_RAID1C3)
168                 return BTRFS_RAID_RAID1C3;
169         else if (flags & BTRFS_BLOCK_GROUP_RAID1C4)
170                 return BTRFS_RAID_RAID1C4;
171         else if (flags & BTRFS_BLOCK_GROUP_DUP)
172                 return BTRFS_RAID_DUP;
173         else if (flags & BTRFS_BLOCK_GROUP_RAID0)
174                 return BTRFS_RAID_RAID0;
175         else if (flags & BTRFS_BLOCK_GROUP_RAID5)
176                 return BTRFS_RAID_RAID5;
177         else if (flags & BTRFS_BLOCK_GROUP_RAID6)
178                 return BTRFS_RAID_RAID6;
179
180         return BTRFS_RAID_SINGLE; /* BTRFS_BLOCK_GROUP_SINGLE */
181 }
182
183 const char *btrfs_bg_type_to_raid_name(u64 flags)
184 {
185         const int index = btrfs_bg_flags_to_raid_index(flags);
186
187         if (index >= BTRFS_NR_RAID_TYPES)
188                 return NULL;
189
190         return btrfs_raid_array[index].raid_name;
191 }
192
193 /*
194  * Fill @buf with textual description of @bg_flags, no more than @size_buf
195  * bytes including terminating null byte.
196  */
197 void btrfs_describe_block_groups(u64 bg_flags, char *buf, u32 size_buf)
198 {
199         int i;
200         int ret;
201         char *bp = buf;
202         u64 flags = bg_flags;
203         u32 size_bp = size_buf;
204
205         if (!flags) {
206                 strcpy(bp, "NONE");
207                 return;
208         }
209
210 #define DESCRIBE_FLAG(flag, desc)                                               \
211         do {                                                            \
212                 if (flags & (flag)) {                                   \
213                         ret = snprintf(bp, size_bp, "%s|", (desc));     \
214                         if (ret < 0 || ret >= size_bp)                  \
215                                 goto out_overflow;                      \
216                         size_bp -= ret;                                 \
217                         bp += ret;                                      \
218                         flags &= ~(flag);                               \
219                 }                                                       \
220         } while (0)
221
222         DESCRIBE_FLAG(BTRFS_BLOCK_GROUP_DATA, "data");
223         DESCRIBE_FLAG(BTRFS_BLOCK_GROUP_SYSTEM, "system");
224         DESCRIBE_FLAG(BTRFS_BLOCK_GROUP_METADATA, "metadata");
225
226         DESCRIBE_FLAG(BTRFS_AVAIL_ALLOC_BIT_SINGLE, "single");
227         for (i = 0; i < BTRFS_NR_RAID_TYPES; i++)
228                 DESCRIBE_FLAG(btrfs_raid_array[i].bg_flag,
229                               btrfs_raid_array[i].raid_name);
230 #undef DESCRIBE_FLAG
231
232         if (flags) {
233                 ret = snprintf(bp, size_bp, "0x%llx|", flags);
234                 size_bp -= ret;
235         }
236
237         if (size_bp < size_buf)
238                 buf[size_buf - size_bp - 1] = '\0'; /* remove last | */
239
240         /*
241          * The text is trimmed, it's up to the caller to provide sufficiently
242          * large buffer
243          */
244 out_overflow:;
245 }
246
247 static int init_first_rw_device(struct btrfs_trans_handle *trans);
248 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info);
249 static void btrfs_dev_stat_print_on_error(struct btrfs_device *dev);
250 static void btrfs_dev_stat_print_on_load(struct btrfs_device *device);
251 static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
252                              enum btrfs_map_op op,
253                              u64 logical, u64 *length,
254                              struct btrfs_io_context **bioc_ret,
255                              int mirror_num, int need_raid_map);
256
257 /*
258  * Device locking
259  * ==============
260  *
261  * There are several mutexes that protect manipulation of devices and low-level
262  * structures like chunks but not block groups, extents or files
263  *
264  * uuid_mutex (global lock)
265  * ------------------------
266  * protects the fs_uuids list that tracks all per-fs fs_devices, resulting from
267  * the SCAN_DEV ioctl registration or from mount either implicitly (the first
268  * device) or requested by the device= mount option
269  *
270  * the mutex can be very coarse and can cover long-running operations
271  *
272  * protects: updates to fs_devices counters like missing devices, rw devices,
273  * seeding, structure cloning, opening/closing devices at mount/umount time
274  *
275  * global::fs_devs - add, remove, updates to the global list
276  *
277  * does not protect: manipulation of the fs_devices::devices list in general
278  * but in mount context it could be used to exclude list modifications by eg.
279  * scan ioctl
280  *
281  * btrfs_device::name - renames (write side), read is RCU
282  *
283  * fs_devices::device_list_mutex (per-fs, with RCU)
284  * ------------------------------------------------
285  * protects updates to fs_devices::devices, ie. adding and deleting
286  *
287  * simple list traversal with read-only actions can be done with RCU protection
288  *
289  * may be used to exclude some operations from running concurrently without any
290  * modifications to the list (see write_all_supers)
291  *
292  * Is not required at mount and close times, because our device list is
293  * protected by the uuid_mutex at that point.
294  *
295  * balance_mutex
296  * -------------
297  * protects balance structures (status, state) and context accessed from
298  * several places (internally, ioctl)
299  *
300  * chunk_mutex
301  * -----------
302  * protects chunks, adding or removing during allocation, trim or when a new
303  * device is added/removed. Additionally it also protects post_commit_list of
304  * individual devices, since they can be added to the transaction's
305  * post_commit_list only with chunk_mutex held.
306  *
307  * cleaner_mutex
308  * -------------
309  * a big lock that is held by the cleaner thread and prevents running subvolume
310  * cleaning together with relocation or delayed iputs
311  *
312  *
313  * Lock nesting
314  * ============
315  *
316  * uuid_mutex
317  *   device_list_mutex
318  *     chunk_mutex
319  *   balance_mutex
320  *
321  *
322  * Exclusive operations
323  * ====================
324  *
325  * Maintains the exclusivity of the following operations that apply to the
326  * whole filesystem and cannot run in parallel.
327  *
328  * - Balance (*)
329  * - Device add
330  * - Device remove
331  * - Device replace (*)
332  * - Resize
333  *
334  * The device operations (as above) can be in one of the following states:
335  *
336  * - Running state
337  * - Paused state
338  * - Completed state
339  *
340  * Only device operations marked with (*) can go into the Paused state for the
341  * following reasons:
342  *
343  * - ioctl (only Balance can be Paused through ioctl)
344  * - filesystem remounted as read-only
345  * - filesystem unmounted and mounted as read-only
346  * - system power-cycle and filesystem mounted as read-only
347  * - filesystem or device errors leading to forced read-only
348  *
349  * The status of exclusive operation is set and cleared atomically.
350  * During the course of Paused state, fs_info::exclusive_operation remains set.
351  * A device operation in Paused or Running state can be canceled or resumed
352  * either by ioctl (Balance only) or when remounted as read-write.
353  * The exclusive status is cleared when the device operation is canceled or
354  * completed.
355  */
356
357 DEFINE_MUTEX(uuid_mutex);
358 static LIST_HEAD(fs_uuids);
359 struct list_head * __attribute_const__ btrfs_get_fs_uuids(void)
360 {
361         return &fs_uuids;
362 }
363
364 /*
365  * alloc_fs_devices - allocate struct btrfs_fs_devices
366  * @fsid:               if not NULL, copy the UUID to fs_devices::fsid
367  * @metadata_fsid:      if not NULL, copy the UUID to fs_devices::metadata_fsid
368  *
369  * Return a pointer to a new struct btrfs_fs_devices on success, or ERR_PTR().
370  * The returned struct is not linked onto any lists and can be destroyed with
371  * kfree() right away.
372  */
373 static struct btrfs_fs_devices *alloc_fs_devices(const u8 *fsid,
374                                                  const u8 *metadata_fsid)
375 {
376         struct btrfs_fs_devices *fs_devs;
377
378         fs_devs = kzalloc(sizeof(*fs_devs), GFP_KERNEL);
379         if (!fs_devs)
380                 return ERR_PTR(-ENOMEM);
381
382         mutex_init(&fs_devs->device_list_mutex);
383
384         INIT_LIST_HEAD(&fs_devs->devices);
385         INIT_LIST_HEAD(&fs_devs->alloc_list);
386         INIT_LIST_HEAD(&fs_devs->fs_list);
387         INIT_LIST_HEAD(&fs_devs->seed_list);
388         if (fsid)
389                 memcpy(fs_devs->fsid, fsid, BTRFS_FSID_SIZE);
390
391         if (metadata_fsid)
392                 memcpy(fs_devs->metadata_uuid, metadata_fsid, BTRFS_FSID_SIZE);
393         else if (fsid)
394                 memcpy(fs_devs->metadata_uuid, fsid, BTRFS_FSID_SIZE);
395
396         return fs_devs;
397 }
398
399 void btrfs_free_device(struct btrfs_device *device)
400 {
401         WARN_ON(!list_empty(&device->post_commit_list));
402         rcu_string_free(device->name);
403         extent_io_tree_release(&device->alloc_state);
404         bio_put(device->flush_bio);
405         btrfs_destroy_dev_zone_info(device);
406         kfree(device);
407 }
408
409 static void free_fs_devices(struct btrfs_fs_devices *fs_devices)
410 {
411         struct btrfs_device *device;
412         WARN_ON(fs_devices->opened);
413         while (!list_empty(&fs_devices->devices)) {
414                 device = list_entry(fs_devices->devices.next,
415                                     struct btrfs_device, dev_list);
416                 list_del(&device->dev_list);
417                 btrfs_free_device(device);
418         }
419         kfree(fs_devices);
420 }
421
422 void __exit btrfs_cleanup_fs_uuids(void)
423 {
424         struct btrfs_fs_devices *fs_devices;
425
426         while (!list_empty(&fs_uuids)) {
427                 fs_devices = list_entry(fs_uuids.next,
428                                         struct btrfs_fs_devices, fs_list);
429                 list_del(&fs_devices->fs_list);
430                 free_fs_devices(fs_devices);
431         }
432 }
433
434 static noinline struct btrfs_fs_devices *find_fsid(
435                 const u8 *fsid, const u8 *metadata_fsid)
436 {
437         struct btrfs_fs_devices *fs_devices;
438
439         ASSERT(fsid);
440
441         /* Handle non-split brain cases */
442         list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
443                 if (metadata_fsid) {
444                         if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0
445                             && memcmp(metadata_fsid, fs_devices->metadata_uuid,
446                                       BTRFS_FSID_SIZE) == 0)
447                                 return fs_devices;
448                 } else {
449                         if (memcmp(fsid, fs_devices->fsid, BTRFS_FSID_SIZE) == 0)
450                                 return fs_devices;
451                 }
452         }
453         return NULL;
454 }
455
456 static struct btrfs_fs_devices *find_fsid_with_metadata_uuid(
457                                 struct btrfs_super_block *disk_super)
458 {
459
460         struct btrfs_fs_devices *fs_devices;
461
462         /*
463          * Handle scanned device having completed its fsid change but
464          * belonging to a fs_devices that was created by first scanning
465          * a device which didn't have its fsid/metadata_uuid changed
466          * at all and the CHANGING_FSID_V2 flag set.
467          */
468         list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
469                 if (fs_devices->fsid_change &&
470                     memcmp(disk_super->metadata_uuid, fs_devices->fsid,
471                            BTRFS_FSID_SIZE) == 0 &&
472                     memcmp(fs_devices->fsid, fs_devices->metadata_uuid,
473                            BTRFS_FSID_SIZE) == 0) {
474                         return fs_devices;
475                 }
476         }
477         /*
478          * Handle scanned device having completed its fsid change but
479          * belonging to a fs_devices that was created by a device that
480          * has an outdated pair of fsid/metadata_uuid and
481          * CHANGING_FSID_V2 flag set.
482          */
483         list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
484                 if (fs_devices->fsid_change &&
485                     memcmp(fs_devices->metadata_uuid,
486                            fs_devices->fsid, BTRFS_FSID_SIZE) != 0 &&
487                     memcmp(disk_super->metadata_uuid, fs_devices->metadata_uuid,
488                            BTRFS_FSID_SIZE) == 0) {
489                         return fs_devices;
490                 }
491         }
492
493         return find_fsid(disk_super->fsid, disk_super->metadata_uuid);
494 }
495
496
497 static int
498 btrfs_get_bdev_and_sb(const char *device_path, fmode_t flags, void *holder,
499                       int flush, struct block_device **bdev,
500                       struct btrfs_super_block **disk_super)
501 {
502         int ret;
503
504         *bdev = blkdev_get_by_path(device_path, flags, holder);
505
506         if (IS_ERR(*bdev)) {
507                 ret = PTR_ERR(*bdev);
508                 goto error;
509         }
510
511         if (flush)
512                 sync_blockdev(*bdev);
513         ret = set_blocksize(*bdev, BTRFS_BDEV_BLOCKSIZE);
514         if (ret) {
515                 blkdev_put(*bdev, flags);
516                 goto error;
517         }
518         invalidate_bdev(*bdev);
519         *disk_super = btrfs_read_dev_super(*bdev);
520         if (IS_ERR(*disk_super)) {
521                 ret = PTR_ERR(*disk_super);
522                 blkdev_put(*bdev, flags);
523                 goto error;
524         }
525
526         return 0;
527
528 error:
529         *bdev = NULL;
530         return ret;
531 }
532
533 static bool device_path_matched(const char *path, struct btrfs_device *device)
534 {
535         int found;
536
537         rcu_read_lock();
538         found = strcmp(rcu_str_deref(device->name), path);
539         rcu_read_unlock();
540
541         return found == 0;
542 }
543
544 /*
545  *  Search and remove all stale (devices which are not mounted) devices.
546  *  When both inputs are NULL, it will search and release all stale devices.
547  *  path:       Optional. When provided will it release all unmounted devices
548  *              matching this path only.
549  *  skip_dev:   Optional. Will skip this device when searching for the stale
550  *              devices.
551  *  Return:     0 for success or if @path is NULL.
552  *              -EBUSY if @path is a mounted device.
553  *              -ENOENT if @path does not match any device in the list.
554  */
555 static int btrfs_free_stale_devices(const char *path,
556                                      struct btrfs_device *skip_device)
557 {
558         struct btrfs_fs_devices *fs_devices, *tmp_fs_devices;
559         struct btrfs_device *device, *tmp_device;
560         int ret = 0;
561
562         lockdep_assert_held(&uuid_mutex);
563
564         if (path)
565                 ret = -ENOENT;
566
567         list_for_each_entry_safe(fs_devices, tmp_fs_devices, &fs_uuids, fs_list) {
568
569                 mutex_lock(&fs_devices->device_list_mutex);
570                 list_for_each_entry_safe(device, tmp_device,
571                                          &fs_devices->devices, dev_list) {
572                         if (skip_device && skip_device == device)
573                                 continue;
574                         if (path && !device->name)
575                                 continue;
576                         if (path && !device_path_matched(path, device))
577                                 continue;
578                         if (fs_devices->opened) {
579                                 /* for an already deleted device return 0 */
580                                 if (path && ret != 0)
581                                         ret = -EBUSY;
582                                 break;
583                         }
584
585                         /* delete the stale device */
586                         fs_devices->num_devices--;
587                         list_del(&device->dev_list);
588                         btrfs_free_device(device);
589
590                         ret = 0;
591                 }
592                 mutex_unlock(&fs_devices->device_list_mutex);
593
594                 if (fs_devices->num_devices == 0) {
595                         btrfs_sysfs_remove_fsid(fs_devices);
596                         list_del(&fs_devices->fs_list);
597                         free_fs_devices(fs_devices);
598                 }
599         }
600
601         return ret;
602 }
603
604 /*
605  * This is only used on mount, and we are protected from competing things
606  * messing with our fs_devices by the uuid_mutex, thus we do not need the
607  * fs_devices->device_list_mutex here.
608  */
609 static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,
610                         struct btrfs_device *device, fmode_t flags,
611                         void *holder)
612 {
613         struct request_queue *q;
614         struct block_device *bdev;
615         struct btrfs_super_block *disk_super;
616         u64 devid;
617         int ret;
618
619         if (device->bdev)
620                 return -EINVAL;
621         if (!device->name)
622                 return -EINVAL;
623
624         ret = btrfs_get_bdev_and_sb(device->name->str, flags, holder, 1,
625                                     &bdev, &disk_super);
626         if (ret)
627                 return ret;
628
629         devid = btrfs_stack_device_id(&disk_super->dev_item);
630         if (devid != device->devid)
631                 goto error_free_page;
632
633         if (memcmp(device->uuid, disk_super->dev_item.uuid, BTRFS_UUID_SIZE))
634                 goto error_free_page;
635
636         device->generation = btrfs_super_generation(disk_super);
637
638         if (btrfs_super_flags(disk_super) & BTRFS_SUPER_FLAG_SEEDING) {
639                 if (btrfs_super_incompat_flags(disk_super) &
640                     BTRFS_FEATURE_INCOMPAT_METADATA_UUID) {
641                         pr_err(
642                 "BTRFS: Invalid seeding and uuid-changed device detected\n");
643                         goto error_free_page;
644                 }
645
646                 clear_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
647                 fs_devices->seeding = true;
648         } else {
649                 if (bdev_read_only(bdev))
650                         clear_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
651                 else
652                         set_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
653         }
654
655         q = bdev_get_queue(bdev);
656         if (!blk_queue_nonrot(q))
657                 fs_devices->rotating = true;
658
659         device->bdev = bdev;
660         clear_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
661         device->mode = flags;
662
663         fs_devices->open_devices++;
664         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state) &&
665             device->devid != BTRFS_DEV_REPLACE_DEVID) {
666                 fs_devices->rw_devices++;
667                 list_add_tail(&device->dev_alloc_list, &fs_devices->alloc_list);
668         }
669         btrfs_release_disk_super(disk_super);
670
671         return 0;
672
673 error_free_page:
674         btrfs_release_disk_super(disk_super);
675         blkdev_put(bdev, flags);
676
677         return -EINVAL;
678 }
679
680 /*
681  * Handle scanned device having its CHANGING_FSID_V2 flag set and the fs_devices
682  * being created with a disk that has already completed its fsid change. Such
683  * disk can belong to an fs which has its FSID changed or to one which doesn't.
684  * Handle both cases here.
685  */
686 static struct btrfs_fs_devices *find_fsid_inprogress(
687                                         struct btrfs_super_block *disk_super)
688 {
689         struct btrfs_fs_devices *fs_devices;
690
691         list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
692                 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid,
693                            BTRFS_FSID_SIZE) != 0 &&
694                     memcmp(fs_devices->metadata_uuid, disk_super->fsid,
695                            BTRFS_FSID_SIZE) == 0 && !fs_devices->fsid_change) {
696                         return fs_devices;
697                 }
698         }
699
700         return find_fsid(disk_super->fsid, NULL);
701 }
702
703
704 static struct btrfs_fs_devices *find_fsid_changed(
705                                         struct btrfs_super_block *disk_super)
706 {
707         struct btrfs_fs_devices *fs_devices;
708
709         /*
710          * Handles the case where scanned device is part of an fs that had
711          * multiple successful changes of FSID but currently device didn't
712          * observe it. Meaning our fsid will be different than theirs. We need
713          * to handle two subcases :
714          *  1 - The fs still continues to have different METADATA/FSID uuids.
715          *  2 - The fs is switched back to its original FSID (METADATA/FSID
716          *  are equal).
717          */
718         list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
719                 /* Changed UUIDs */
720                 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid,
721                            BTRFS_FSID_SIZE) != 0 &&
722                     memcmp(fs_devices->metadata_uuid, disk_super->metadata_uuid,
723                            BTRFS_FSID_SIZE) == 0 &&
724                     memcmp(fs_devices->fsid, disk_super->fsid,
725                            BTRFS_FSID_SIZE) != 0)
726                         return fs_devices;
727
728                 /* Unchanged UUIDs */
729                 if (memcmp(fs_devices->metadata_uuid, fs_devices->fsid,
730                            BTRFS_FSID_SIZE) == 0 &&
731                     memcmp(fs_devices->fsid, disk_super->metadata_uuid,
732                            BTRFS_FSID_SIZE) == 0)
733                         return fs_devices;
734         }
735
736         return NULL;
737 }
738
739 static struct btrfs_fs_devices *find_fsid_reverted_metadata(
740                                 struct btrfs_super_block *disk_super)
741 {
742         struct btrfs_fs_devices *fs_devices;
743
744         /*
745          * Handle the case where the scanned device is part of an fs whose last
746          * metadata UUID change reverted it to the original FSID. At the same
747          * time * fs_devices was first created by another constitutent device
748          * which didn't fully observe the operation. This results in an
749          * btrfs_fs_devices created with metadata/fsid different AND
750          * btrfs_fs_devices::fsid_change set AND the metadata_uuid of the
751          * fs_devices equal to the FSID of the disk.
752          */
753         list_for_each_entry(fs_devices, &fs_uuids, fs_list) {
754                 if (memcmp(fs_devices->fsid, fs_devices->metadata_uuid,
755                            BTRFS_FSID_SIZE) != 0 &&
756                     memcmp(fs_devices->metadata_uuid, disk_super->fsid,
757                            BTRFS_FSID_SIZE) == 0 &&
758                     fs_devices->fsid_change)
759                         return fs_devices;
760         }
761
762         return NULL;
763 }
764 /*
765  * Add new device to list of registered devices
766  *
767  * Returns:
768  * device pointer which was just added or updated when successful
769  * error pointer when failed
770  */
771 static noinline struct btrfs_device *device_list_add(const char *path,
772                            struct btrfs_super_block *disk_super,
773                            bool *new_device_added)
774 {
775         struct btrfs_device *device;
776         struct btrfs_fs_devices *fs_devices = NULL;
777         struct rcu_string *name;
778         u64 found_transid = btrfs_super_generation(disk_super);
779         u64 devid = btrfs_stack_device_id(&disk_super->dev_item);
780         bool has_metadata_uuid = (btrfs_super_incompat_flags(disk_super) &
781                 BTRFS_FEATURE_INCOMPAT_METADATA_UUID);
782         bool fsid_change_in_progress = (btrfs_super_flags(disk_super) &
783                                         BTRFS_SUPER_FLAG_CHANGING_FSID_V2);
784
785         if (fsid_change_in_progress) {
786                 if (!has_metadata_uuid)
787                         fs_devices = find_fsid_inprogress(disk_super);
788                 else
789                         fs_devices = find_fsid_changed(disk_super);
790         } else if (has_metadata_uuid) {
791                 fs_devices = find_fsid_with_metadata_uuid(disk_super);
792         } else {
793                 fs_devices = find_fsid_reverted_metadata(disk_super);
794                 if (!fs_devices)
795                         fs_devices = find_fsid(disk_super->fsid, NULL);
796         }
797
798
799         if (!fs_devices) {
800                 if (has_metadata_uuid)
801                         fs_devices = alloc_fs_devices(disk_super->fsid,
802                                                       disk_super->metadata_uuid);
803                 else
804                         fs_devices = alloc_fs_devices(disk_super->fsid, NULL);
805
806                 if (IS_ERR(fs_devices))
807                         return ERR_CAST(fs_devices);
808
809                 fs_devices->fsid_change = fsid_change_in_progress;
810
811                 mutex_lock(&fs_devices->device_list_mutex);
812                 list_add(&fs_devices->fs_list, &fs_uuids);
813
814                 device = NULL;
815         } else {
816                 struct btrfs_dev_lookup_args args = {
817                         .devid = devid,
818                         .uuid = disk_super->dev_item.uuid,
819                 };
820
821                 mutex_lock(&fs_devices->device_list_mutex);
822                 device = btrfs_find_device(fs_devices, &args);
823
824                 /*
825                  * If this disk has been pulled into an fs devices created by
826                  * a device which had the CHANGING_FSID_V2 flag then replace the
827                  * metadata_uuid/fsid values of the fs_devices.
828                  */
829                 if (fs_devices->fsid_change &&
830                     found_transid > fs_devices->latest_generation) {
831                         memcpy(fs_devices->fsid, disk_super->fsid,
832                                         BTRFS_FSID_SIZE);
833
834                         if (has_metadata_uuid)
835                                 memcpy(fs_devices->metadata_uuid,
836                                        disk_super->metadata_uuid,
837                                        BTRFS_FSID_SIZE);
838                         else
839                                 memcpy(fs_devices->metadata_uuid,
840                                        disk_super->fsid, BTRFS_FSID_SIZE);
841
842                         fs_devices->fsid_change = false;
843                 }
844         }
845
846         if (!device) {
847                 if (fs_devices->opened) {
848                         mutex_unlock(&fs_devices->device_list_mutex);
849                         return ERR_PTR(-EBUSY);
850                 }
851
852                 device = btrfs_alloc_device(NULL, &devid,
853                                             disk_super->dev_item.uuid);
854                 if (IS_ERR(device)) {
855                         mutex_unlock(&fs_devices->device_list_mutex);
856                         /* we can safely leave the fs_devices entry around */
857                         return device;
858                 }
859
860                 name = rcu_string_strdup(path, GFP_NOFS);
861                 if (!name) {
862                         btrfs_free_device(device);
863                         mutex_unlock(&fs_devices->device_list_mutex);
864                         return ERR_PTR(-ENOMEM);
865                 }
866                 rcu_assign_pointer(device->name, name);
867
868                 list_add_rcu(&device->dev_list, &fs_devices->devices);
869                 fs_devices->num_devices++;
870
871                 device->fs_devices = fs_devices;
872                 *new_device_added = true;
873
874                 if (disk_super->label[0])
875                         pr_info(
876         "BTRFS: device label %s devid %llu transid %llu %s scanned by %s (%d)\n",
877                                 disk_super->label, devid, found_transid, path,
878                                 current->comm, task_pid_nr(current));
879                 else
880                         pr_info(
881         "BTRFS: device fsid %pU devid %llu transid %llu %s scanned by %s (%d)\n",
882                                 disk_super->fsid, devid, found_transid, path,
883                                 current->comm, task_pid_nr(current));
884
885         } else if (!device->name || strcmp(device->name->str, path)) {
886                 /*
887                  * When FS is already mounted.
888                  * 1. If you are here and if the device->name is NULL that
889                  *    means this device was missing at time of FS mount.
890                  * 2. If you are here and if the device->name is different
891                  *    from 'path' that means either
892                  *      a. The same device disappeared and reappeared with
893                  *         different name. or
894                  *      b. The missing-disk-which-was-replaced, has
895                  *         reappeared now.
896                  *
897                  * We must allow 1 and 2a above. But 2b would be a spurious
898                  * and unintentional.
899                  *
900                  * Further in case of 1 and 2a above, the disk at 'path'
901                  * would have missed some transaction when it was away and
902                  * in case of 2a the stale bdev has to be updated as well.
903                  * 2b must not be allowed at all time.
904                  */
905
906                 /*
907                  * For now, we do allow update to btrfs_fs_device through the
908                  * btrfs dev scan cli after FS has been mounted.  We're still
909                  * tracking a problem where systems fail mount by subvolume id
910                  * when we reject replacement on a mounted FS.
911                  */
912                 if (!fs_devices->opened && found_transid < device->generation) {
913                         /*
914                          * That is if the FS is _not_ mounted and if you
915                          * are here, that means there is more than one
916                          * disk with same uuid and devid.We keep the one
917                          * with larger generation number or the last-in if
918                          * generation are equal.
919                          */
920                         mutex_unlock(&fs_devices->device_list_mutex);
921                         return ERR_PTR(-EEXIST);
922                 }
923
924                 /*
925                  * We are going to replace the device path for a given devid,
926                  * make sure it's the same device if the device is mounted
927                  */
928                 if (device->bdev) {
929                         int error;
930                         dev_t path_dev;
931
932                         error = lookup_bdev(path, &path_dev);
933                         if (error) {
934                                 mutex_unlock(&fs_devices->device_list_mutex);
935                                 return ERR_PTR(error);
936                         }
937
938                         if (device->bdev->bd_dev != path_dev) {
939                                 mutex_unlock(&fs_devices->device_list_mutex);
940                                 /*
941                                  * device->fs_info may not be reliable here, so
942                                  * pass in a NULL instead. This avoids a
943                                  * possible use-after-free when the fs_info and
944                                  * fs_info->sb are already torn down.
945                                  */
946                                 btrfs_warn_in_rcu(NULL,
947         "duplicate device %s devid %llu generation %llu scanned by %s (%d)",
948                                                   path, devid, found_transid,
949                                                   current->comm,
950                                                   task_pid_nr(current));
951                                 return ERR_PTR(-EEXIST);
952                         }
953                         btrfs_info_in_rcu(device->fs_info,
954         "devid %llu device path %s changed to %s scanned by %s (%d)",
955                                           devid, rcu_str_deref(device->name),
956                                           path, current->comm,
957                                           task_pid_nr(current));
958                 }
959
960                 name = rcu_string_strdup(path, GFP_NOFS);
961                 if (!name) {
962                         mutex_unlock(&fs_devices->device_list_mutex);
963                         return ERR_PTR(-ENOMEM);
964                 }
965                 rcu_string_free(device->name);
966                 rcu_assign_pointer(device->name, name);
967                 if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) {
968                         fs_devices->missing_devices--;
969                         clear_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state);
970                 }
971         }
972
973         /*
974          * Unmount does not free the btrfs_device struct but would zero
975          * generation along with most of the other members. So just update
976          * it back. We need it to pick the disk with largest generation
977          * (as above).
978          */
979         if (!fs_devices->opened) {
980                 device->generation = found_transid;
981                 fs_devices->latest_generation = max_t(u64, found_transid,
982                                                 fs_devices->latest_generation);
983         }
984
985         fs_devices->total_devices = btrfs_super_num_devices(disk_super);
986
987         mutex_unlock(&fs_devices->device_list_mutex);
988         return device;
989 }
990
991 static struct btrfs_fs_devices *clone_fs_devices(struct btrfs_fs_devices *orig)
992 {
993         struct btrfs_fs_devices *fs_devices;
994         struct btrfs_device *device;
995         struct btrfs_device *orig_dev;
996         int ret = 0;
997
998         lockdep_assert_held(&uuid_mutex);
999
1000         fs_devices = alloc_fs_devices(orig->fsid, NULL);
1001         if (IS_ERR(fs_devices))
1002                 return fs_devices;
1003
1004         fs_devices->total_devices = orig->total_devices;
1005
1006         list_for_each_entry(orig_dev, &orig->devices, dev_list) {
1007                 struct rcu_string *name;
1008
1009                 device = btrfs_alloc_device(NULL, &orig_dev->devid,
1010                                             orig_dev->uuid);
1011                 if (IS_ERR(device)) {
1012                         ret = PTR_ERR(device);
1013                         goto error;
1014                 }
1015
1016                 /*
1017                  * This is ok to do without rcu read locked because we hold the
1018                  * uuid mutex so nothing we touch in here is going to disappear.
1019                  */
1020                 if (orig_dev->name) {
1021                         name = rcu_string_strdup(orig_dev->name->str,
1022                                         GFP_KERNEL);
1023                         if (!name) {
1024                                 btrfs_free_device(device);
1025                                 ret = -ENOMEM;
1026                                 goto error;
1027                         }
1028                         rcu_assign_pointer(device->name, name);
1029                 }
1030
1031                 list_add(&device->dev_list, &fs_devices->devices);
1032                 device->fs_devices = fs_devices;
1033                 fs_devices->num_devices++;
1034         }
1035         return fs_devices;
1036 error:
1037         free_fs_devices(fs_devices);
1038         return ERR_PTR(ret);
1039 }
1040
1041 static void __btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices,
1042                                       struct btrfs_device **latest_dev)
1043 {
1044         struct btrfs_device *device, *next;
1045
1046         /* This is the initialized path, it is safe to release the devices. */
1047         list_for_each_entry_safe(device, next, &fs_devices->devices, dev_list) {
1048                 if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state)) {
1049                         if (!test_bit(BTRFS_DEV_STATE_REPLACE_TGT,
1050                                       &device->dev_state) &&
1051                             !test_bit(BTRFS_DEV_STATE_MISSING,
1052                                       &device->dev_state) &&
1053                             (!*latest_dev ||
1054                              device->generation > (*latest_dev)->generation)) {
1055                                 *latest_dev = device;
1056                         }
1057                         continue;
1058                 }
1059
1060                 /*
1061                  * We have already validated the presence of BTRFS_DEV_REPLACE_DEVID,
1062                  * in btrfs_init_dev_replace() so just continue.
1063                  */
1064                 if (device->devid == BTRFS_DEV_REPLACE_DEVID)
1065                         continue;
1066
1067                 if (device->bdev) {
1068                         blkdev_put(device->bdev, device->mode);
1069                         device->bdev = NULL;
1070                         fs_devices->open_devices--;
1071                 }
1072                 if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
1073                         list_del_init(&device->dev_alloc_list);
1074                         clear_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
1075                         fs_devices->rw_devices--;
1076                 }
1077                 list_del_init(&device->dev_list);
1078                 fs_devices->num_devices--;
1079                 btrfs_free_device(device);
1080         }
1081
1082 }
1083
1084 /*
1085  * After we have read the system tree and know devids belonging to this
1086  * filesystem, remove the device which does not belong there.
1087  */
1088 void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices)
1089 {
1090         struct btrfs_device *latest_dev = NULL;
1091         struct btrfs_fs_devices *seed_dev;
1092
1093         mutex_lock(&uuid_mutex);
1094         __btrfs_free_extra_devids(fs_devices, &latest_dev);
1095
1096         list_for_each_entry(seed_dev, &fs_devices->seed_list, seed_list)
1097                 __btrfs_free_extra_devids(seed_dev, &latest_dev);
1098
1099         fs_devices->latest_dev = latest_dev;
1100
1101         mutex_unlock(&uuid_mutex);
1102 }
1103
1104 static void btrfs_close_bdev(struct btrfs_device *device)
1105 {
1106         if (!device->bdev)
1107                 return;
1108
1109         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
1110                 sync_blockdev(device->bdev);
1111                 invalidate_bdev(device->bdev);
1112         }
1113
1114         blkdev_put(device->bdev, device->mode);
1115 }
1116
1117 static void btrfs_close_one_device(struct btrfs_device *device)
1118 {
1119         struct btrfs_fs_devices *fs_devices = device->fs_devices;
1120
1121         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state) &&
1122             device->devid != BTRFS_DEV_REPLACE_DEVID) {
1123                 list_del_init(&device->dev_alloc_list);
1124                 fs_devices->rw_devices--;
1125         }
1126
1127         if (device->devid == BTRFS_DEV_REPLACE_DEVID)
1128                 clear_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
1129
1130         if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) {
1131                 clear_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state);
1132                 fs_devices->missing_devices--;
1133         }
1134
1135         btrfs_close_bdev(device);
1136         if (device->bdev) {
1137                 fs_devices->open_devices--;
1138                 device->bdev = NULL;
1139         }
1140         clear_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
1141         btrfs_destroy_dev_zone_info(device);
1142
1143         device->fs_info = NULL;
1144         atomic_set(&device->dev_stats_ccnt, 0);
1145         extent_io_tree_release(&device->alloc_state);
1146
1147         /*
1148          * Reset the flush error record. We might have a transient flush error
1149          * in this mount, and if so we aborted the current transaction and set
1150          * the fs to an error state, guaranteeing no super blocks can be further
1151          * committed. However that error might be transient and if we unmount the
1152          * filesystem and mount it again, we should allow the mount to succeed
1153          * (btrfs_check_rw_degradable() should not fail) - if after mounting the
1154          * filesystem again we still get flush errors, then we will again abort
1155          * any transaction and set the error state, guaranteeing no commits of
1156          * unsafe super blocks.
1157          */
1158         device->last_flush_error = 0;
1159
1160         /* Verify the device is back in a pristine state  */
1161         ASSERT(!test_bit(BTRFS_DEV_STATE_FLUSH_SENT, &device->dev_state));
1162         ASSERT(!test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state));
1163         ASSERT(list_empty(&device->dev_alloc_list));
1164         ASSERT(list_empty(&device->post_commit_list));
1165         ASSERT(atomic_read(&device->reada_in_flight) == 0);
1166 }
1167
1168 static void close_fs_devices(struct btrfs_fs_devices *fs_devices)
1169 {
1170         struct btrfs_device *device, *tmp;
1171
1172         lockdep_assert_held(&uuid_mutex);
1173
1174         if (--fs_devices->opened > 0)
1175                 return;
1176
1177         list_for_each_entry_safe(device, tmp, &fs_devices->devices, dev_list)
1178                 btrfs_close_one_device(device);
1179
1180         WARN_ON(fs_devices->open_devices);
1181         WARN_ON(fs_devices->rw_devices);
1182         fs_devices->opened = 0;
1183         fs_devices->seeding = false;
1184         fs_devices->fs_info = NULL;
1185 }
1186
1187 void btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
1188 {
1189         LIST_HEAD(list);
1190         struct btrfs_fs_devices *tmp;
1191
1192         mutex_lock(&uuid_mutex);
1193         close_fs_devices(fs_devices);
1194         if (!fs_devices->opened)
1195                 list_splice_init(&fs_devices->seed_list, &list);
1196
1197         list_for_each_entry_safe(fs_devices, tmp, &list, seed_list) {
1198                 close_fs_devices(fs_devices);
1199                 list_del(&fs_devices->seed_list);
1200                 free_fs_devices(fs_devices);
1201         }
1202         mutex_unlock(&uuid_mutex);
1203 }
1204
1205 static int open_fs_devices(struct btrfs_fs_devices *fs_devices,
1206                                 fmode_t flags, void *holder)
1207 {
1208         struct btrfs_device *device;
1209         struct btrfs_device *latest_dev = NULL;
1210         struct btrfs_device *tmp_device;
1211
1212         flags |= FMODE_EXCL;
1213
1214         list_for_each_entry_safe(device, tmp_device, &fs_devices->devices,
1215                                  dev_list) {
1216                 int ret;
1217
1218                 ret = btrfs_open_one_device(fs_devices, device, flags, holder);
1219                 if (ret == 0 &&
1220                     (!latest_dev || device->generation > latest_dev->generation)) {
1221                         latest_dev = device;
1222                 } else if (ret == -ENODATA) {
1223                         fs_devices->num_devices--;
1224                         list_del(&device->dev_list);
1225                         btrfs_free_device(device);
1226                 }
1227         }
1228         if (fs_devices->open_devices == 0)
1229                 return -EINVAL;
1230
1231         fs_devices->opened = 1;
1232         fs_devices->latest_dev = latest_dev;
1233         fs_devices->total_rw_bytes = 0;
1234         fs_devices->chunk_alloc_policy = BTRFS_CHUNK_ALLOC_REGULAR;
1235         fs_devices->read_policy = BTRFS_READ_POLICY_PID;
1236
1237         return 0;
1238 }
1239
1240 static int devid_cmp(void *priv, const struct list_head *a,
1241                      const struct list_head *b)
1242 {
1243         const struct btrfs_device *dev1, *dev2;
1244
1245         dev1 = list_entry(a, struct btrfs_device, dev_list);
1246         dev2 = list_entry(b, struct btrfs_device, dev_list);
1247
1248         if (dev1->devid < dev2->devid)
1249                 return -1;
1250         else if (dev1->devid > dev2->devid)
1251                 return 1;
1252         return 0;
1253 }
1254
1255 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
1256                        fmode_t flags, void *holder)
1257 {
1258         int ret;
1259
1260         lockdep_assert_held(&uuid_mutex);
1261         /*
1262          * The device_list_mutex cannot be taken here in case opening the
1263          * underlying device takes further locks like open_mutex.
1264          *
1265          * We also don't need the lock here as this is called during mount and
1266          * exclusion is provided by uuid_mutex
1267          */
1268
1269         if (fs_devices->opened) {
1270                 fs_devices->opened++;
1271                 ret = 0;
1272         } else {
1273                 list_sort(NULL, &fs_devices->devices, devid_cmp);
1274                 ret = open_fs_devices(fs_devices, flags, holder);
1275         }
1276
1277         return ret;
1278 }
1279
1280 void btrfs_release_disk_super(struct btrfs_super_block *super)
1281 {
1282         struct page *page = virt_to_page(super);
1283
1284         put_page(page);
1285 }
1286
1287 static struct btrfs_super_block *btrfs_read_disk_super(struct block_device *bdev,
1288                                                        u64 bytenr, u64 bytenr_orig)
1289 {
1290         struct btrfs_super_block *disk_super;
1291         struct page *page;
1292         void *p;
1293         pgoff_t index;
1294
1295         /* make sure our super fits in the device */
1296         if (bytenr + PAGE_SIZE >= bdev_nr_bytes(bdev))
1297                 return ERR_PTR(-EINVAL);
1298
1299         /* make sure our super fits in the page */
1300         if (sizeof(*disk_super) > PAGE_SIZE)
1301                 return ERR_PTR(-EINVAL);
1302
1303         /* make sure our super doesn't straddle pages on disk */
1304         index = bytenr >> PAGE_SHIFT;
1305         if ((bytenr + sizeof(*disk_super) - 1) >> PAGE_SHIFT != index)
1306                 return ERR_PTR(-EINVAL);
1307
1308         /* pull in the page with our super */
1309         page = read_cache_page_gfp(bdev->bd_inode->i_mapping, index, GFP_KERNEL);
1310
1311         if (IS_ERR(page))
1312                 return ERR_CAST(page);
1313
1314         p = page_address(page);
1315
1316         /* align our pointer to the offset of the super block */
1317         disk_super = p + offset_in_page(bytenr);
1318
1319         if (btrfs_super_bytenr(disk_super) != bytenr_orig ||
1320             btrfs_super_magic(disk_super) != BTRFS_MAGIC) {
1321                 btrfs_release_disk_super(p);
1322                 return ERR_PTR(-EINVAL);
1323         }
1324
1325         if (disk_super->label[0] && disk_super->label[BTRFS_LABEL_SIZE - 1])
1326                 disk_super->label[BTRFS_LABEL_SIZE - 1] = 0;
1327
1328         return disk_super;
1329 }
1330
1331 int btrfs_forget_devices(const char *path)
1332 {
1333         int ret;
1334
1335         mutex_lock(&uuid_mutex);
1336         ret = btrfs_free_stale_devices(strlen(path) ? path : NULL, NULL);
1337         mutex_unlock(&uuid_mutex);
1338
1339         return ret;
1340 }
1341
1342 /*
1343  * Look for a btrfs signature on a device. This may be called out of the mount path
1344  * and we are not allowed to call set_blocksize during the scan. The superblock
1345  * is read via pagecache
1346  */
1347 struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags,
1348                                            void *holder)
1349 {
1350         struct btrfs_super_block *disk_super;
1351         bool new_device_added = false;
1352         struct btrfs_device *device = NULL;
1353         struct block_device *bdev;
1354         u64 bytenr, bytenr_orig;
1355         int ret;
1356
1357         lockdep_assert_held(&uuid_mutex);
1358
1359         /*
1360          * we would like to check all the supers, but that would make
1361          * a btrfs mount succeed after a mkfs from a different FS.
1362          * So, we need to add a special mount option to scan for
1363          * later supers, using BTRFS_SUPER_MIRROR_MAX instead
1364          */
1365         flags |= FMODE_EXCL;
1366
1367         bdev = blkdev_get_by_path(path, flags, holder);
1368         if (IS_ERR(bdev))
1369                 return ERR_CAST(bdev);
1370
1371         bytenr_orig = btrfs_sb_offset(0);
1372         ret = btrfs_sb_log_location_bdev(bdev, 0, READ, &bytenr);
1373         if (ret)
1374                 return ERR_PTR(ret);
1375
1376         disk_super = btrfs_read_disk_super(bdev, bytenr, bytenr_orig);
1377         if (IS_ERR(disk_super)) {
1378                 device = ERR_CAST(disk_super);
1379                 goto error_bdev_put;
1380         }
1381
1382         device = device_list_add(path, disk_super, &new_device_added);
1383         if (!IS_ERR(device)) {
1384                 if (new_device_added)
1385                         btrfs_free_stale_devices(path, device);
1386         }
1387
1388         btrfs_release_disk_super(disk_super);
1389
1390 error_bdev_put:
1391         blkdev_put(bdev, flags);
1392
1393         return device;
1394 }
1395
1396 /*
1397  * Try to find a chunk that intersects [start, start + len] range and when one
1398  * such is found, record the end of it in *start
1399  */
1400 static bool contains_pending_extent(struct btrfs_device *device, u64 *start,
1401                                     u64 len)
1402 {
1403         u64 physical_start, physical_end;
1404
1405         lockdep_assert_held(&device->fs_info->chunk_mutex);
1406
1407         if (!find_first_extent_bit(&device->alloc_state, *start,
1408                                    &physical_start, &physical_end,
1409                                    CHUNK_ALLOCATED, NULL)) {
1410
1411                 if (in_range(physical_start, *start, len) ||
1412                     in_range(*start, physical_start,
1413                              physical_end - physical_start)) {
1414                         *start = physical_end + 1;
1415                         return true;
1416                 }
1417         }
1418         return false;
1419 }
1420
1421 static u64 dev_extent_search_start(struct btrfs_device *device, u64 start)
1422 {
1423         switch (device->fs_devices->chunk_alloc_policy) {
1424         case BTRFS_CHUNK_ALLOC_REGULAR:
1425                 /*
1426                  * We don't want to overwrite the superblock on the drive nor
1427                  * any area used by the boot loader (grub for example), so we
1428                  * make sure to start at an offset of at least 1MB.
1429                  */
1430                 return max_t(u64, start, SZ_1M);
1431         case BTRFS_CHUNK_ALLOC_ZONED:
1432                 /*
1433                  * We don't care about the starting region like regular
1434                  * allocator, because we anyway use/reserve the first two zones
1435                  * for superblock logging.
1436                  */
1437                 return ALIGN(start, device->zone_info->zone_size);
1438         default:
1439                 BUG();
1440         }
1441 }
1442
1443 static bool dev_extent_hole_check_zoned(struct btrfs_device *device,
1444                                         u64 *hole_start, u64 *hole_size,
1445                                         u64 num_bytes)
1446 {
1447         u64 zone_size = device->zone_info->zone_size;
1448         u64 pos;
1449         int ret;
1450         bool changed = false;
1451
1452         ASSERT(IS_ALIGNED(*hole_start, zone_size));
1453
1454         while (*hole_size > 0) {
1455                 pos = btrfs_find_allocatable_zones(device, *hole_start,
1456                                                    *hole_start + *hole_size,
1457                                                    num_bytes);
1458                 if (pos != *hole_start) {
1459                         *hole_size = *hole_start + *hole_size - pos;
1460                         *hole_start = pos;
1461                         changed = true;
1462                         if (*hole_size < num_bytes)
1463                                 break;
1464                 }
1465
1466                 ret = btrfs_ensure_empty_zones(device, pos, num_bytes);
1467
1468                 /* Range is ensured to be empty */
1469                 if (!ret)
1470                         return changed;
1471
1472                 /* Given hole range was invalid (outside of device) */
1473                 if (ret == -ERANGE) {
1474                         *hole_start += *hole_size;
1475                         *hole_size = 0;
1476                         return true;
1477                 }
1478
1479                 *hole_start += zone_size;
1480                 *hole_size -= zone_size;
1481                 changed = true;
1482         }
1483
1484         return changed;
1485 }
1486
1487 /**
1488  * dev_extent_hole_check - check if specified hole is suitable for allocation
1489  * @device:     the device which we have the hole
1490  * @hole_start: starting position of the hole
1491  * @hole_size:  the size of the hole
1492  * @num_bytes:  the size of the free space that we need
1493  *
1494  * This function may modify @hole_start and @hole_size to reflect the suitable
1495  * position for allocation. Returns 1 if hole position is updated, 0 otherwise.
1496  */
1497 static bool dev_extent_hole_check(struct btrfs_device *device, u64 *hole_start,
1498                                   u64 *hole_size, u64 num_bytes)
1499 {
1500         bool changed = false;
1501         u64 hole_end = *hole_start + *hole_size;
1502
1503         for (;;) {
1504                 /*
1505                  * Check before we set max_hole_start, otherwise we could end up
1506                  * sending back this offset anyway.
1507                  */
1508                 if (contains_pending_extent(device, hole_start, *hole_size)) {
1509                         if (hole_end >= *hole_start)
1510                                 *hole_size = hole_end - *hole_start;
1511                         else
1512                                 *hole_size = 0;
1513                         changed = true;
1514                 }
1515
1516                 switch (device->fs_devices->chunk_alloc_policy) {
1517                 case BTRFS_CHUNK_ALLOC_REGULAR:
1518                         /* No extra check */
1519                         break;
1520                 case BTRFS_CHUNK_ALLOC_ZONED:
1521                         if (dev_extent_hole_check_zoned(device, hole_start,
1522                                                         hole_size, num_bytes)) {
1523                                 changed = true;
1524                                 /*
1525                                  * The changed hole can contain pending extent.
1526                                  * Loop again to check that.
1527                                  */
1528                                 continue;
1529                         }
1530                         break;
1531                 default:
1532                         BUG();
1533                 }
1534
1535                 break;
1536         }
1537
1538         return changed;
1539 }
1540
1541 /*
1542  * find_free_dev_extent_start - find free space in the specified device
1543  * @device:       the device which we search the free space in
1544  * @num_bytes:    the size of the free space that we need
1545  * @search_start: the position from which to begin the search
1546  * @start:        store the start of the free space.
1547  * @len:          the size of the free space. that we find, or the size
1548  *                of the max free space if we don't find suitable free space
1549  *
1550  * this uses a pretty simple search, the expectation is that it is
1551  * called very infrequently and that a given device has a small number
1552  * of extents
1553  *
1554  * @start is used to store the start of the free space if we find. But if we
1555  * don't find suitable free space, it will be used to store the start position
1556  * of the max free space.
1557  *
1558  * @len is used to store the size of the free space that we find.
1559  * But if we don't find suitable free space, it is used to store the size of
1560  * the max free space.
1561  *
1562  * NOTE: This function will search *commit* root of device tree, and does extra
1563  * check to ensure dev extents are not double allocated.
1564  * This makes the function safe to allocate dev extents but may not report
1565  * correct usable device space, as device extent freed in current transaction
1566  * is not reported as available.
1567  */
1568 static int find_free_dev_extent_start(struct btrfs_device *device,
1569                                 u64 num_bytes, u64 search_start, u64 *start,
1570                                 u64 *len)
1571 {
1572         struct btrfs_fs_info *fs_info = device->fs_info;
1573         struct btrfs_root *root = fs_info->dev_root;
1574         struct btrfs_key key;
1575         struct btrfs_dev_extent *dev_extent;
1576         struct btrfs_path *path;
1577         u64 hole_size;
1578         u64 max_hole_start;
1579         u64 max_hole_size;
1580         u64 extent_end;
1581         u64 search_end = device->total_bytes;
1582         int ret;
1583         int slot;
1584         struct extent_buffer *l;
1585
1586         search_start = dev_extent_search_start(device, search_start);
1587
1588         WARN_ON(device->zone_info &&
1589                 !IS_ALIGNED(num_bytes, device->zone_info->zone_size));
1590
1591         path = btrfs_alloc_path();
1592         if (!path)
1593                 return -ENOMEM;
1594
1595         max_hole_start = search_start;
1596         max_hole_size = 0;
1597
1598 again:
1599         if (search_start >= search_end ||
1600                 test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) {
1601                 ret = -ENOSPC;
1602                 goto out;
1603         }
1604
1605         path->reada = READA_FORWARD;
1606         path->search_commit_root = 1;
1607         path->skip_locking = 1;
1608
1609         key.objectid = device->devid;
1610         key.offset = search_start;
1611         key.type = BTRFS_DEV_EXTENT_KEY;
1612
1613         ret = btrfs_search_backwards(root, &key, path);
1614         if (ret < 0)
1615                 goto out;
1616
1617         while (1) {
1618                 l = path->nodes[0];
1619                 slot = path->slots[0];
1620                 if (slot >= btrfs_header_nritems(l)) {
1621                         ret = btrfs_next_leaf(root, path);
1622                         if (ret == 0)
1623                                 continue;
1624                         if (ret < 0)
1625                                 goto out;
1626
1627                         break;
1628                 }
1629                 btrfs_item_key_to_cpu(l, &key, slot);
1630
1631                 if (key.objectid < device->devid)
1632                         goto next;
1633
1634                 if (key.objectid > device->devid)
1635                         break;
1636
1637                 if (key.type != BTRFS_DEV_EXTENT_KEY)
1638                         goto next;
1639
1640                 if (key.offset > search_start) {
1641                         hole_size = key.offset - search_start;
1642                         dev_extent_hole_check(device, &search_start, &hole_size,
1643                                               num_bytes);
1644
1645                         if (hole_size > max_hole_size) {
1646                                 max_hole_start = search_start;
1647                                 max_hole_size = hole_size;
1648                         }
1649
1650                         /*
1651                          * If this free space is greater than which we need,
1652                          * it must be the max free space that we have found
1653                          * until now, so max_hole_start must point to the start
1654                          * of this free space and the length of this free space
1655                          * is stored in max_hole_size. Thus, we return
1656                          * max_hole_start and max_hole_size and go back to the
1657                          * caller.
1658                          */
1659                         if (hole_size >= num_bytes) {
1660                                 ret = 0;
1661                                 goto out;
1662                         }
1663                 }
1664
1665                 dev_extent = btrfs_item_ptr(l, slot, struct btrfs_dev_extent);
1666                 extent_end = key.offset + btrfs_dev_extent_length(l,
1667                                                                   dev_extent);
1668                 if (extent_end > search_start)
1669                         search_start = extent_end;
1670 next:
1671                 path->slots[0]++;
1672                 cond_resched();
1673         }
1674
1675         /*
1676          * At this point, search_start should be the end of
1677          * allocated dev extents, and when shrinking the device,
1678          * search_end may be smaller than search_start.
1679          */
1680         if (search_end > search_start) {
1681                 hole_size = search_end - search_start;
1682                 if (dev_extent_hole_check(device, &search_start, &hole_size,
1683                                           num_bytes)) {
1684                         btrfs_release_path(path);
1685                         goto again;
1686                 }
1687
1688                 if (hole_size > max_hole_size) {
1689                         max_hole_start = search_start;
1690                         max_hole_size = hole_size;
1691                 }
1692         }
1693
1694         /* See above. */
1695         if (max_hole_size < num_bytes)
1696                 ret = -ENOSPC;
1697         else
1698                 ret = 0;
1699
1700 out:
1701         btrfs_free_path(path);
1702         *start = max_hole_start;
1703         if (len)
1704                 *len = max_hole_size;
1705         return ret;
1706 }
1707
1708 int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes,
1709                          u64 *start, u64 *len)
1710 {
1711         /* FIXME use last free of some kind */
1712         return find_free_dev_extent_start(device, num_bytes, 0, start, len);
1713 }
1714
1715 static int btrfs_free_dev_extent(struct btrfs_trans_handle *trans,
1716                           struct btrfs_device *device,
1717                           u64 start, u64 *dev_extent_len)
1718 {
1719         struct btrfs_fs_info *fs_info = device->fs_info;
1720         struct btrfs_root *root = fs_info->dev_root;
1721         int ret;
1722         struct btrfs_path *path;
1723         struct btrfs_key key;
1724         struct btrfs_key found_key;
1725         struct extent_buffer *leaf = NULL;
1726         struct btrfs_dev_extent *extent = NULL;
1727
1728         path = btrfs_alloc_path();
1729         if (!path)
1730                 return -ENOMEM;
1731
1732         key.objectid = device->devid;
1733         key.offset = start;
1734         key.type = BTRFS_DEV_EXTENT_KEY;
1735 again:
1736         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1737         if (ret > 0) {
1738                 ret = btrfs_previous_item(root, path, key.objectid,
1739                                           BTRFS_DEV_EXTENT_KEY);
1740                 if (ret)
1741                         goto out;
1742                 leaf = path->nodes[0];
1743                 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
1744                 extent = btrfs_item_ptr(leaf, path->slots[0],
1745                                         struct btrfs_dev_extent);
1746                 BUG_ON(found_key.offset > start || found_key.offset +
1747                        btrfs_dev_extent_length(leaf, extent) < start);
1748                 key = found_key;
1749                 btrfs_release_path(path);
1750                 goto again;
1751         } else if (ret == 0) {
1752                 leaf = path->nodes[0];
1753                 extent = btrfs_item_ptr(leaf, path->slots[0],
1754                                         struct btrfs_dev_extent);
1755         } else {
1756                 goto out;
1757         }
1758
1759         *dev_extent_len = btrfs_dev_extent_length(leaf, extent);
1760
1761         ret = btrfs_del_item(trans, root, path);
1762         if (ret == 0)
1763                 set_bit(BTRFS_TRANS_HAVE_FREE_BGS, &trans->transaction->flags);
1764 out:
1765         btrfs_free_path(path);
1766         return ret;
1767 }
1768
1769 static u64 find_next_chunk(struct btrfs_fs_info *fs_info)
1770 {
1771         struct extent_map_tree *em_tree;
1772         struct extent_map *em;
1773         struct rb_node *n;
1774         u64 ret = 0;
1775
1776         em_tree = &fs_info->mapping_tree;
1777         read_lock(&em_tree->lock);
1778         n = rb_last(&em_tree->map.rb_root);
1779         if (n) {
1780                 em = rb_entry(n, struct extent_map, rb_node);
1781                 ret = em->start + em->len;
1782         }
1783         read_unlock(&em_tree->lock);
1784
1785         return ret;
1786 }
1787
1788 static noinline int find_next_devid(struct btrfs_fs_info *fs_info,
1789                                     u64 *devid_ret)
1790 {
1791         int ret;
1792         struct btrfs_key key;
1793         struct btrfs_key found_key;
1794         struct btrfs_path *path;
1795
1796         path = btrfs_alloc_path();
1797         if (!path)
1798                 return -ENOMEM;
1799
1800         key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
1801         key.type = BTRFS_DEV_ITEM_KEY;
1802         key.offset = (u64)-1;
1803
1804         ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0);
1805         if (ret < 0)
1806                 goto error;
1807
1808         if (ret == 0) {
1809                 /* Corruption */
1810                 btrfs_err(fs_info, "corrupted chunk tree devid -1 matched");
1811                 ret = -EUCLEAN;
1812                 goto error;
1813         }
1814
1815         ret = btrfs_previous_item(fs_info->chunk_root, path,
1816                                   BTRFS_DEV_ITEMS_OBJECTID,
1817                                   BTRFS_DEV_ITEM_KEY);
1818         if (ret) {
1819                 *devid_ret = 1;
1820         } else {
1821                 btrfs_item_key_to_cpu(path->nodes[0], &found_key,
1822                                       path->slots[0]);
1823                 *devid_ret = found_key.offset + 1;
1824         }
1825         ret = 0;
1826 error:
1827         btrfs_free_path(path);
1828         return ret;
1829 }
1830
1831 /*
1832  * the device information is stored in the chunk root
1833  * the btrfs_device struct should be fully filled in
1834  */
1835 static int btrfs_add_dev_item(struct btrfs_trans_handle *trans,
1836                             struct btrfs_device *device)
1837 {
1838         int ret;
1839         struct btrfs_path *path;
1840         struct btrfs_dev_item *dev_item;
1841         struct extent_buffer *leaf;
1842         struct btrfs_key key;
1843         unsigned long ptr;
1844
1845         path = btrfs_alloc_path();
1846         if (!path)
1847                 return -ENOMEM;
1848
1849         key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
1850         key.type = BTRFS_DEV_ITEM_KEY;
1851         key.offset = device->devid;
1852
1853         btrfs_reserve_chunk_metadata(trans, true);
1854         ret = btrfs_insert_empty_item(trans, trans->fs_info->chunk_root, path,
1855                                       &key, sizeof(*dev_item));
1856         btrfs_trans_release_chunk_metadata(trans);
1857         if (ret)
1858                 goto out;
1859
1860         leaf = path->nodes[0];
1861         dev_item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_dev_item);
1862
1863         btrfs_set_device_id(leaf, dev_item, device->devid);
1864         btrfs_set_device_generation(leaf, dev_item, 0);
1865         btrfs_set_device_type(leaf, dev_item, device->type);
1866         btrfs_set_device_io_align(leaf, dev_item, device->io_align);
1867         btrfs_set_device_io_width(leaf, dev_item, device->io_width);
1868         btrfs_set_device_sector_size(leaf, dev_item, device->sector_size);
1869         btrfs_set_device_total_bytes(leaf, dev_item,
1870                                      btrfs_device_get_disk_total_bytes(device));
1871         btrfs_set_device_bytes_used(leaf, dev_item,
1872                                     btrfs_device_get_bytes_used(device));
1873         btrfs_set_device_group(leaf, dev_item, 0);
1874         btrfs_set_device_seek_speed(leaf, dev_item, 0);
1875         btrfs_set_device_bandwidth(leaf, dev_item, 0);
1876         btrfs_set_device_start_offset(leaf, dev_item, 0);
1877
1878         ptr = btrfs_device_uuid(dev_item);
1879         write_extent_buffer(leaf, device->uuid, ptr, BTRFS_UUID_SIZE);
1880         ptr = btrfs_device_fsid(dev_item);
1881         write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid,
1882                             ptr, BTRFS_FSID_SIZE);
1883         btrfs_mark_buffer_dirty(leaf);
1884
1885         ret = 0;
1886 out:
1887         btrfs_free_path(path);
1888         return ret;
1889 }
1890
1891 /*
1892  * Function to update ctime/mtime for a given device path.
1893  * Mainly used for ctime/mtime based probe like libblkid.
1894  *
1895  * We don't care about errors here, this is just to be kind to userspace.
1896  */
1897 static void update_dev_time(const char *device_path)
1898 {
1899         struct path path;
1900         struct timespec64 now;
1901         int ret;
1902
1903         ret = kern_path(device_path, LOOKUP_FOLLOW, &path);
1904         if (ret)
1905                 return;
1906
1907         now = current_time(d_inode(path.dentry));
1908         inode_update_time(d_inode(path.dentry), &now, S_MTIME | S_CTIME);
1909         path_put(&path);
1910 }
1911
1912 static int btrfs_rm_dev_item(struct btrfs_device *device)
1913 {
1914         struct btrfs_root *root = device->fs_info->chunk_root;
1915         int ret;
1916         struct btrfs_path *path;
1917         struct btrfs_key key;
1918         struct btrfs_trans_handle *trans;
1919
1920         path = btrfs_alloc_path();
1921         if (!path)
1922                 return -ENOMEM;
1923
1924         trans = btrfs_start_transaction(root, 0);
1925         if (IS_ERR(trans)) {
1926                 btrfs_free_path(path);
1927                 return PTR_ERR(trans);
1928         }
1929         key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
1930         key.type = BTRFS_DEV_ITEM_KEY;
1931         key.offset = device->devid;
1932
1933         btrfs_reserve_chunk_metadata(trans, false);
1934         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1935         btrfs_trans_release_chunk_metadata(trans);
1936         if (ret) {
1937                 if (ret > 0)
1938                         ret = -ENOENT;
1939                 btrfs_abort_transaction(trans, ret);
1940                 btrfs_end_transaction(trans);
1941                 goto out;
1942         }
1943
1944         ret = btrfs_del_item(trans, root, path);
1945         if (ret) {
1946                 btrfs_abort_transaction(trans, ret);
1947                 btrfs_end_transaction(trans);
1948         }
1949
1950 out:
1951         btrfs_free_path(path);
1952         if (!ret)
1953                 ret = btrfs_commit_transaction(trans);
1954         return ret;
1955 }
1956
1957 /*
1958  * Verify that @num_devices satisfies the RAID profile constraints in the whole
1959  * filesystem. It's up to the caller to adjust that number regarding eg. device
1960  * replace.
1961  */
1962 static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info,
1963                 u64 num_devices)
1964 {
1965         u64 all_avail;
1966         unsigned seq;
1967         int i;
1968
1969         do {
1970                 seq = read_seqbegin(&fs_info->profiles_lock);
1971
1972                 all_avail = fs_info->avail_data_alloc_bits |
1973                             fs_info->avail_system_alloc_bits |
1974                             fs_info->avail_metadata_alloc_bits;
1975         } while (read_seqretry(&fs_info->profiles_lock, seq));
1976
1977         for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
1978                 if (!(all_avail & btrfs_raid_array[i].bg_flag))
1979                         continue;
1980
1981                 if (num_devices < btrfs_raid_array[i].devs_min)
1982                         return btrfs_raid_array[i].mindev_error;
1983         }
1984
1985         return 0;
1986 }
1987
1988 static struct btrfs_device * btrfs_find_next_active_device(
1989                 struct btrfs_fs_devices *fs_devs, struct btrfs_device *device)
1990 {
1991         struct btrfs_device *next_device;
1992
1993         list_for_each_entry(next_device, &fs_devs->devices, dev_list) {
1994                 if (next_device != device &&
1995                     !test_bit(BTRFS_DEV_STATE_MISSING, &next_device->dev_state)
1996                     && next_device->bdev)
1997                         return next_device;
1998         }
1999
2000         return NULL;
2001 }
2002
2003 /*
2004  * Helper function to check if the given device is part of s_bdev / latest_dev
2005  * and replace it with the provided or the next active device, in the context
2006  * where this function called, there should be always be another device (or
2007  * this_dev) which is active.
2008  */
2009 void __cold btrfs_assign_next_active_device(struct btrfs_device *device,
2010                                             struct btrfs_device *next_device)
2011 {
2012         struct btrfs_fs_info *fs_info = device->fs_info;
2013
2014         if (!next_device)
2015                 next_device = btrfs_find_next_active_device(fs_info->fs_devices,
2016                                                             device);
2017         ASSERT(next_device);
2018
2019         if (fs_info->sb->s_bdev &&
2020                         (fs_info->sb->s_bdev == device->bdev))
2021                 fs_info->sb->s_bdev = next_device->bdev;
2022
2023         if (fs_info->fs_devices->latest_dev->bdev == device->bdev)
2024                 fs_info->fs_devices->latest_dev = next_device;
2025 }
2026
2027 /*
2028  * Return btrfs_fs_devices::num_devices excluding the device that's being
2029  * currently replaced.
2030  */
2031 static u64 btrfs_num_devices(struct btrfs_fs_info *fs_info)
2032 {
2033         u64 num_devices = fs_info->fs_devices->num_devices;
2034
2035         down_read(&fs_info->dev_replace.rwsem);
2036         if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) {
2037                 ASSERT(num_devices > 1);
2038                 num_devices--;
2039         }
2040         up_read(&fs_info->dev_replace.rwsem);
2041
2042         return num_devices;
2043 }
2044
2045 void btrfs_scratch_superblocks(struct btrfs_fs_info *fs_info,
2046                                struct block_device *bdev,
2047                                const char *device_path)
2048 {
2049         struct btrfs_super_block *disk_super;
2050         int copy_num;
2051
2052         if (!bdev)
2053                 return;
2054
2055         for (copy_num = 0; copy_num < BTRFS_SUPER_MIRROR_MAX; copy_num++) {
2056                 struct page *page;
2057                 int ret;
2058
2059                 disk_super = btrfs_read_dev_one_super(bdev, copy_num);
2060                 if (IS_ERR(disk_super))
2061                         continue;
2062
2063                 if (bdev_is_zoned(bdev)) {
2064                         btrfs_reset_sb_log_zones(bdev, copy_num);
2065                         continue;
2066                 }
2067
2068                 memset(&disk_super->magic, 0, sizeof(disk_super->magic));
2069
2070                 page = virt_to_page(disk_super);
2071                 set_page_dirty(page);
2072                 lock_page(page);
2073                 /* write_on_page() unlocks the page */
2074                 ret = write_one_page(page);
2075                 if (ret)
2076                         btrfs_warn(fs_info,
2077                                 "error clearing superblock number %d (%d)",
2078                                 copy_num, ret);
2079                 btrfs_release_disk_super(disk_super);
2080
2081         }
2082
2083         /* Notify udev that device has changed */
2084         btrfs_kobject_uevent(bdev, KOBJ_CHANGE);
2085
2086         /* Update ctime/mtime for device path for libblkid */
2087         update_dev_time(device_path);
2088 }
2089
2090 int btrfs_rm_device(struct btrfs_fs_info *fs_info,
2091                     struct btrfs_dev_lookup_args *args,
2092                     struct block_device **bdev, fmode_t *mode)
2093 {
2094         struct btrfs_device *device;
2095         struct btrfs_fs_devices *cur_devices;
2096         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
2097         u64 num_devices;
2098         int ret = 0;
2099
2100         /*
2101          * The device list in fs_devices is accessed without locks (neither
2102          * uuid_mutex nor device_list_mutex) as it won't change on a mounted
2103          * filesystem and another device rm cannot run.
2104          */
2105         num_devices = btrfs_num_devices(fs_info);
2106
2107         ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1);
2108         if (ret)
2109                 goto out;
2110
2111         device = btrfs_find_device(fs_info->fs_devices, args);
2112         if (!device) {
2113                 if (args->missing)
2114                         ret = BTRFS_ERROR_DEV_MISSING_NOT_FOUND;
2115                 else
2116                         ret = -ENOENT;
2117                 goto out;
2118         }
2119
2120         if (btrfs_pinned_by_swapfile(fs_info, device)) {
2121                 btrfs_warn_in_rcu(fs_info,
2122                   "cannot remove device %s (devid %llu) due to active swapfile",
2123                                   rcu_str_deref(device->name), device->devid);
2124                 ret = -ETXTBSY;
2125                 goto out;
2126         }
2127
2128         if (test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) {
2129                 ret = BTRFS_ERROR_DEV_TGT_REPLACE;
2130                 goto out;
2131         }
2132
2133         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state) &&
2134             fs_info->fs_devices->rw_devices == 1) {
2135                 ret = BTRFS_ERROR_DEV_ONLY_WRITABLE;
2136                 goto out;
2137         }
2138
2139         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
2140                 mutex_lock(&fs_info->chunk_mutex);
2141                 list_del_init(&device->dev_alloc_list);
2142                 device->fs_devices->rw_devices--;
2143                 mutex_unlock(&fs_info->chunk_mutex);
2144         }
2145
2146         ret = btrfs_shrink_device(device, 0);
2147         if (!ret)
2148                 btrfs_reada_remove_dev(device);
2149         if (ret)
2150                 goto error_undo;
2151
2152         /*
2153          * TODO: the superblock still includes this device in its num_devices
2154          * counter although write_all_supers() is not locked out. This
2155          * could give a filesystem state which requires a degraded mount.
2156          */
2157         ret = btrfs_rm_dev_item(device);
2158         if (ret)
2159                 goto error_undo;
2160
2161         clear_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
2162         btrfs_scrub_cancel_dev(device);
2163
2164         /*
2165          * the device list mutex makes sure that we don't change
2166          * the device list while someone else is writing out all
2167          * the device supers. Whoever is writing all supers, should
2168          * lock the device list mutex before getting the number of
2169          * devices in the super block (super_copy). Conversely,
2170          * whoever updates the number of devices in the super block
2171          * (super_copy) should hold the device list mutex.
2172          */
2173
2174         /*
2175          * In normal cases the cur_devices == fs_devices. But in case
2176          * of deleting a seed device, the cur_devices should point to
2177          * its own fs_devices listed under the fs_devices->seed_list.
2178          */
2179         cur_devices = device->fs_devices;
2180         mutex_lock(&fs_devices->device_list_mutex);
2181         list_del_rcu(&device->dev_list);
2182
2183         cur_devices->num_devices--;
2184         cur_devices->total_devices--;
2185         /* Update total_devices of the parent fs_devices if it's seed */
2186         if (cur_devices != fs_devices)
2187                 fs_devices->total_devices--;
2188
2189         if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state))
2190                 cur_devices->missing_devices--;
2191
2192         btrfs_assign_next_active_device(device, NULL);
2193
2194         if (device->bdev) {
2195                 cur_devices->open_devices--;
2196                 /* remove sysfs entry */
2197                 btrfs_sysfs_remove_device(device);
2198         }
2199
2200         num_devices = btrfs_super_num_devices(fs_info->super_copy) - 1;
2201         btrfs_set_super_num_devices(fs_info->super_copy, num_devices);
2202         mutex_unlock(&fs_devices->device_list_mutex);
2203
2204         /*
2205          * At this point, the device is zero sized and detached from the
2206          * devices list.  All that's left is to zero out the old supers and
2207          * free the device.
2208          *
2209          * We cannot call btrfs_close_bdev() here because we're holding the sb
2210          * write lock, and blkdev_put() will pull in the ->open_mutex on the
2211          * block device and it's dependencies.  Instead just flush the device
2212          * and let the caller do the final blkdev_put.
2213          */
2214         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
2215                 btrfs_scratch_superblocks(fs_info, device->bdev,
2216                                           device->name->str);
2217                 if (device->bdev) {
2218                         sync_blockdev(device->bdev);
2219                         invalidate_bdev(device->bdev);
2220                 }
2221         }
2222
2223         *bdev = device->bdev;
2224         *mode = device->mode;
2225         synchronize_rcu();
2226         btrfs_free_device(device);
2227
2228         /*
2229          * This can happen if cur_devices is the private seed devices list.  We
2230          * cannot call close_fs_devices() here because it expects the uuid_mutex
2231          * to be held, but in fact we don't need that for the private
2232          * seed_devices, we can simply decrement cur_devices->opened and then
2233          * remove it from our list and free the fs_devices.
2234          */
2235         if (cur_devices->num_devices == 0) {
2236                 list_del_init(&cur_devices->seed_list);
2237                 ASSERT(cur_devices->opened == 1);
2238                 cur_devices->opened--;
2239                 free_fs_devices(cur_devices);
2240         }
2241
2242 out:
2243         return ret;
2244
2245 error_undo:
2246         btrfs_reada_undo_remove_dev(device);
2247         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
2248                 mutex_lock(&fs_info->chunk_mutex);
2249                 list_add(&device->dev_alloc_list,
2250                          &fs_devices->alloc_list);
2251                 device->fs_devices->rw_devices++;
2252                 mutex_unlock(&fs_info->chunk_mutex);
2253         }
2254         goto out;
2255 }
2256
2257 void btrfs_rm_dev_replace_remove_srcdev(struct btrfs_device *srcdev)
2258 {
2259         struct btrfs_fs_devices *fs_devices;
2260
2261         lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex);
2262
2263         /*
2264          * in case of fs with no seed, srcdev->fs_devices will point
2265          * to fs_devices of fs_info. However when the dev being replaced is
2266          * a seed dev it will point to the seed's local fs_devices. In short
2267          * srcdev will have its correct fs_devices in both the cases.
2268          */
2269         fs_devices = srcdev->fs_devices;
2270
2271         list_del_rcu(&srcdev->dev_list);
2272         list_del(&srcdev->dev_alloc_list);
2273         fs_devices->num_devices--;
2274         if (test_bit(BTRFS_DEV_STATE_MISSING, &srcdev->dev_state))
2275                 fs_devices->missing_devices--;
2276
2277         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &srcdev->dev_state))
2278                 fs_devices->rw_devices--;
2279
2280         if (srcdev->bdev)
2281                 fs_devices->open_devices--;
2282 }
2283
2284 void btrfs_rm_dev_replace_free_srcdev(struct btrfs_device *srcdev)
2285 {
2286         struct btrfs_fs_devices *fs_devices = srcdev->fs_devices;
2287
2288         mutex_lock(&uuid_mutex);
2289
2290         btrfs_close_bdev(srcdev);
2291         synchronize_rcu();
2292         btrfs_free_device(srcdev);
2293
2294         /* if this is no devs we rather delete the fs_devices */
2295         if (!fs_devices->num_devices) {
2296                 /*
2297                  * On a mounted FS, num_devices can't be zero unless it's a
2298                  * seed. In case of a seed device being replaced, the replace
2299                  * target added to the sprout FS, so there will be no more
2300                  * device left under the seed FS.
2301                  */
2302                 ASSERT(fs_devices->seeding);
2303
2304                 list_del_init(&fs_devices->seed_list);
2305                 close_fs_devices(fs_devices);
2306                 free_fs_devices(fs_devices);
2307         }
2308         mutex_unlock(&uuid_mutex);
2309 }
2310
2311 void btrfs_destroy_dev_replace_tgtdev(struct btrfs_device *tgtdev)
2312 {
2313         struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices;
2314
2315         mutex_lock(&fs_devices->device_list_mutex);
2316
2317         btrfs_sysfs_remove_device(tgtdev);
2318
2319         if (tgtdev->bdev)
2320                 fs_devices->open_devices--;
2321
2322         fs_devices->num_devices--;
2323
2324         btrfs_assign_next_active_device(tgtdev, NULL);
2325
2326         list_del_rcu(&tgtdev->dev_list);
2327
2328         mutex_unlock(&fs_devices->device_list_mutex);
2329
2330         btrfs_scratch_superblocks(tgtdev->fs_info, tgtdev->bdev,
2331                                   tgtdev->name->str);
2332
2333         btrfs_close_bdev(tgtdev);
2334         synchronize_rcu();
2335         btrfs_free_device(tgtdev);
2336 }
2337
2338 /**
2339  * Populate args from device at path
2340  *
2341  * @fs_info:    the filesystem
2342  * @args:       the args to populate
2343  * @path:       the path to the device
2344  *
2345  * This will read the super block of the device at @path and populate @args with
2346  * the devid, fsid, and uuid.  This is meant to be used for ioctls that need to
2347  * lookup a device to operate on, but need to do it before we take any locks.
2348  * This properly handles the special case of "missing" that a user may pass in,
2349  * and does some basic sanity checks.  The caller must make sure that @path is
2350  * properly NUL terminated before calling in, and must call
2351  * btrfs_put_dev_args_from_path() in order to free up the temporary fsid and
2352  * uuid buffers.
2353  *
2354  * Return: 0 for success, -errno for failure
2355  */
2356 int btrfs_get_dev_args_from_path(struct btrfs_fs_info *fs_info,
2357                                  struct btrfs_dev_lookup_args *args,
2358                                  const char *path)
2359 {
2360         struct btrfs_super_block *disk_super;
2361         struct block_device *bdev;
2362         int ret;
2363
2364         if (!path || !path[0])
2365                 return -EINVAL;
2366         if (!strcmp(path, "missing")) {
2367                 args->missing = true;
2368                 return 0;
2369         }
2370
2371         args->uuid = kzalloc(BTRFS_UUID_SIZE, GFP_KERNEL);
2372         args->fsid = kzalloc(BTRFS_FSID_SIZE, GFP_KERNEL);
2373         if (!args->uuid || !args->fsid) {
2374                 btrfs_put_dev_args_from_path(args);
2375                 return -ENOMEM;
2376         }
2377
2378         ret = btrfs_get_bdev_and_sb(path, FMODE_READ, fs_info->bdev_holder, 0,
2379                                     &bdev, &disk_super);
2380         if (ret)
2381                 return ret;
2382         args->devid = btrfs_stack_device_id(&disk_super->dev_item);
2383         memcpy(args->uuid, disk_super->dev_item.uuid, BTRFS_UUID_SIZE);
2384         if (btrfs_fs_incompat(fs_info, METADATA_UUID))
2385                 memcpy(args->fsid, disk_super->metadata_uuid, BTRFS_FSID_SIZE);
2386         else
2387                 memcpy(args->fsid, disk_super->fsid, BTRFS_FSID_SIZE);
2388         btrfs_release_disk_super(disk_super);
2389         blkdev_put(bdev, FMODE_READ);
2390         return 0;
2391 }
2392
2393 /*
2394  * Only use this jointly with btrfs_get_dev_args_from_path() because we will
2395  * allocate our ->uuid and ->fsid pointers, everybody else uses local variables
2396  * that don't need to be freed.
2397  */
2398 void btrfs_put_dev_args_from_path(struct btrfs_dev_lookup_args *args)
2399 {
2400         kfree(args->uuid);
2401         kfree(args->fsid);
2402         args->uuid = NULL;
2403         args->fsid = NULL;
2404 }
2405
2406 struct btrfs_device *btrfs_find_device_by_devspec(
2407                 struct btrfs_fs_info *fs_info, u64 devid,
2408                 const char *device_path)
2409 {
2410         BTRFS_DEV_LOOKUP_ARGS(args);
2411         struct btrfs_device *device;
2412         int ret;
2413
2414         if (devid) {
2415                 args.devid = devid;
2416                 device = btrfs_find_device(fs_info->fs_devices, &args);
2417                 if (!device)
2418                         return ERR_PTR(-ENOENT);
2419                 return device;
2420         }
2421
2422         ret = btrfs_get_dev_args_from_path(fs_info, &args, device_path);
2423         if (ret)
2424                 return ERR_PTR(ret);
2425         device = btrfs_find_device(fs_info->fs_devices, &args);
2426         btrfs_put_dev_args_from_path(&args);
2427         if (!device)
2428                 return ERR_PTR(-ENOENT);
2429         return device;
2430 }
2431
2432 /*
2433  * does all the dirty work required for changing file system's UUID.
2434  */
2435 static int btrfs_prepare_sprout(struct btrfs_fs_info *fs_info)
2436 {
2437         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
2438         struct btrfs_fs_devices *old_devices;
2439         struct btrfs_fs_devices *seed_devices;
2440         struct btrfs_super_block *disk_super = fs_info->super_copy;
2441         struct btrfs_device *device;
2442         u64 super_flags;
2443
2444         lockdep_assert_held(&uuid_mutex);
2445         if (!fs_devices->seeding)
2446                 return -EINVAL;
2447
2448         /*
2449          * Private copy of the seed devices, anchored at
2450          * fs_info->fs_devices->seed_list
2451          */
2452         seed_devices = alloc_fs_devices(NULL, NULL);
2453         if (IS_ERR(seed_devices))
2454                 return PTR_ERR(seed_devices);
2455
2456         /*
2457          * It's necessary to retain a copy of the original seed fs_devices in
2458          * fs_uuids so that filesystems which have been seeded can successfully
2459          * reference the seed device from open_seed_devices. This also supports
2460          * multiple fs seed.
2461          */
2462         old_devices = clone_fs_devices(fs_devices);
2463         if (IS_ERR(old_devices)) {
2464                 kfree(seed_devices);
2465                 return PTR_ERR(old_devices);
2466         }
2467
2468         list_add(&old_devices->fs_list, &fs_uuids);
2469
2470         memcpy(seed_devices, fs_devices, sizeof(*seed_devices));
2471         seed_devices->opened = 1;
2472         INIT_LIST_HEAD(&seed_devices->devices);
2473         INIT_LIST_HEAD(&seed_devices->alloc_list);
2474         mutex_init(&seed_devices->device_list_mutex);
2475
2476         mutex_lock(&fs_devices->device_list_mutex);
2477         list_splice_init_rcu(&fs_devices->devices, &seed_devices->devices,
2478                               synchronize_rcu);
2479         list_for_each_entry(device, &seed_devices->devices, dev_list)
2480                 device->fs_devices = seed_devices;
2481
2482         fs_devices->seeding = false;
2483         fs_devices->num_devices = 0;
2484         fs_devices->open_devices = 0;
2485         fs_devices->missing_devices = 0;
2486         fs_devices->rotating = false;
2487         list_add(&seed_devices->seed_list, &fs_devices->seed_list);
2488
2489         generate_random_uuid(fs_devices->fsid);
2490         memcpy(fs_devices->metadata_uuid, fs_devices->fsid, BTRFS_FSID_SIZE);
2491         memcpy(disk_super->fsid, fs_devices->fsid, BTRFS_FSID_SIZE);
2492         mutex_unlock(&fs_devices->device_list_mutex);
2493
2494         super_flags = btrfs_super_flags(disk_super) &
2495                       ~BTRFS_SUPER_FLAG_SEEDING;
2496         btrfs_set_super_flags(disk_super, super_flags);
2497
2498         return 0;
2499 }
2500
2501 /*
2502  * Store the expected generation for seed devices in device items.
2503  */
2504 static int btrfs_finish_sprout(struct btrfs_trans_handle *trans)
2505 {
2506         BTRFS_DEV_LOOKUP_ARGS(args);
2507         struct btrfs_fs_info *fs_info = trans->fs_info;
2508         struct btrfs_root *root = fs_info->chunk_root;
2509         struct btrfs_path *path;
2510         struct extent_buffer *leaf;
2511         struct btrfs_dev_item *dev_item;
2512         struct btrfs_device *device;
2513         struct btrfs_key key;
2514         u8 fs_uuid[BTRFS_FSID_SIZE];
2515         u8 dev_uuid[BTRFS_UUID_SIZE];
2516         int ret;
2517
2518         path = btrfs_alloc_path();
2519         if (!path)
2520                 return -ENOMEM;
2521
2522         key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
2523         key.offset = 0;
2524         key.type = BTRFS_DEV_ITEM_KEY;
2525
2526         while (1) {
2527                 btrfs_reserve_chunk_metadata(trans, false);
2528                 ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
2529                 btrfs_trans_release_chunk_metadata(trans);
2530                 if (ret < 0)
2531                         goto error;
2532
2533                 leaf = path->nodes[0];
2534 next_slot:
2535                 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
2536                         ret = btrfs_next_leaf(root, path);
2537                         if (ret > 0)
2538                                 break;
2539                         if (ret < 0)
2540                                 goto error;
2541                         leaf = path->nodes[0];
2542                         btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
2543                         btrfs_release_path(path);
2544                         continue;
2545                 }
2546
2547                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
2548                 if (key.objectid != BTRFS_DEV_ITEMS_OBJECTID ||
2549                     key.type != BTRFS_DEV_ITEM_KEY)
2550                         break;
2551
2552                 dev_item = btrfs_item_ptr(leaf, path->slots[0],
2553                                           struct btrfs_dev_item);
2554                 args.devid = btrfs_device_id(leaf, dev_item);
2555                 read_extent_buffer(leaf, dev_uuid, btrfs_device_uuid(dev_item),
2556                                    BTRFS_UUID_SIZE);
2557                 read_extent_buffer(leaf, fs_uuid, btrfs_device_fsid(dev_item),
2558                                    BTRFS_FSID_SIZE);
2559                 args.uuid = dev_uuid;
2560                 args.fsid = fs_uuid;
2561                 device = btrfs_find_device(fs_info->fs_devices, &args);
2562                 BUG_ON(!device); /* Logic error */
2563
2564                 if (device->fs_devices->seeding) {
2565                         btrfs_set_device_generation(leaf, dev_item,
2566                                                     device->generation);
2567                         btrfs_mark_buffer_dirty(leaf);
2568                 }
2569
2570                 path->slots[0]++;
2571                 goto next_slot;
2572         }
2573         ret = 0;
2574 error:
2575         btrfs_free_path(path);
2576         return ret;
2577 }
2578
2579 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path)
2580 {
2581         struct btrfs_root *root = fs_info->dev_root;
2582         struct request_queue *q;
2583         struct btrfs_trans_handle *trans;
2584         struct btrfs_device *device;
2585         struct block_device *bdev;
2586         struct super_block *sb = fs_info->sb;
2587         struct rcu_string *name;
2588         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
2589         u64 orig_super_total_bytes;
2590         u64 orig_super_num_devices;
2591         int seeding_dev = 0;
2592         int ret = 0;
2593         bool locked = false;
2594
2595         if (sb_rdonly(sb) && !fs_devices->seeding)
2596                 return -EROFS;
2597
2598         bdev = blkdev_get_by_path(device_path, FMODE_WRITE | FMODE_EXCL,
2599                                   fs_info->bdev_holder);
2600         if (IS_ERR(bdev))
2601                 return PTR_ERR(bdev);
2602
2603         if (!btrfs_check_device_zone_type(fs_info, bdev)) {
2604                 ret = -EINVAL;
2605                 goto error;
2606         }
2607
2608         if (fs_devices->seeding) {
2609                 seeding_dev = 1;
2610                 down_write(&sb->s_umount);
2611                 mutex_lock(&uuid_mutex);
2612                 locked = true;
2613         }
2614
2615         sync_blockdev(bdev);
2616
2617         rcu_read_lock();
2618         list_for_each_entry_rcu(device, &fs_devices->devices, dev_list) {
2619                 if (device->bdev == bdev) {
2620                         ret = -EEXIST;
2621                         rcu_read_unlock();
2622                         goto error;
2623                 }
2624         }
2625         rcu_read_unlock();
2626
2627         device = btrfs_alloc_device(fs_info, NULL, NULL);
2628         if (IS_ERR(device)) {
2629                 /* we can safely leave the fs_devices entry around */
2630                 ret = PTR_ERR(device);
2631                 goto error;
2632         }
2633
2634         name = rcu_string_strdup(device_path, GFP_KERNEL);
2635         if (!name) {
2636                 ret = -ENOMEM;
2637                 goto error_free_device;
2638         }
2639         rcu_assign_pointer(device->name, name);
2640
2641         device->fs_info = fs_info;
2642         device->bdev = bdev;
2643
2644         ret = btrfs_get_dev_zone_info(device);
2645         if (ret)
2646                 goto error_free_device;
2647
2648         trans = btrfs_start_transaction(root, 0);
2649         if (IS_ERR(trans)) {
2650                 ret = PTR_ERR(trans);
2651                 goto error_free_zone;
2652         }
2653
2654         q = bdev_get_queue(bdev);
2655         set_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
2656         device->generation = trans->transid;
2657         device->io_width = fs_info->sectorsize;
2658         device->io_align = fs_info->sectorsize;
2659         device->sector_size = fs_info->sectorsize;
2660         device->total_bytes =
2661                 round_down(bdev_nr_bytes(bdev), fs_info->sectorsize);
2662         device->disk_total_bytes = device->total_bytes;
2663         device->commit_total_bytes = device->total_bytes;
2664         set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
2665         clear_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
2666         device->mode = FMODE_EXCL;
2667         device->dev_stats_valid = 1;
2668         set_blocksize(device->bdev, BTRFS_BDEV_BLOCKSIZE);
2669
2670         if (seeding_dev) {
2671                 btrfs_clear_sb_rdonly(sb);
2672                 ret = btrfs_prepare_sprout(fs_info);
2673                 if (ret) {
2674                         btrfs_abort_transaction(trans, ret);
2675                         goto error_trans;
2676                 }
2677                 btrfs_assign_next_active_device(fs_info->fs_devices->latest_dev,
2678                                                 device);
2679         }
2680
2681         device->fs_devices = fs_devices;
2682
2683         mutex_lock(&fs_devices->device_list_mutex);
2684         mutex_lock(&fs_info->chunk_mutex);
2685         list_add_rcu(&device->dev_list, &fs_devices->devices);
2686         list_add(&device->dev_alloc_list, &fs_devices->alloc_list);
2687         fs_devices->num_devices++;
2688         fs_devices->open_devices++;
2689         fs_devices->rw_devices++;
2690         fs_devices->total_devices++;
2691         fs_devices->total_rw_bytes += device->total_bytes;
2692
2693         atomic64_add(device->total_bytes, &fs_info->free_chunk_space);
2694
2695         if (!blk_queue_nonrot(q))
2696                 fs_devices->rotating = true;
2697
2698         orig_super_total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
2699         btrfs_set_super_total_bytes(fs_info->super_copy,
2700                 round_down(orig_super_total_bytes + device->total_bytes,
2701                            fs_info->sectorsize));
2702
2703         orig_super_num_devices = btrfs_super_num_devices(fs_info->super_copy);
2704         btrfs_set_super_num_devices(fs_info->super_copy,
2705                                     orig_super_num_devices + 1);
2706
2707         /*
2708          * we've got more storage, clear any full flags on the space
2709          * infos
2710          */
2711         btrfs_clear_space_info_full(fs_info);
2712
2713         mutex_unlock(&fs_info->chunk_mutex);
2714
2715         /* Add sysfs device entry */
2716         btrfs_sysfs_add_device(device);
2717
2718         mutex_unlock(&fs_devices->device_list_mutex);
2719
2720         if (seeding_dev) {
2721                 mutex_lock(&fs_info->chunk_mutex);
2722                 ret = init_first_rw_device(trans);
2723                 mutex_unlock(&fs_info->chunk_mutex);
2724                 if (ret) {
2725                         btrfs_abort_transaction(trans, ret);
2726                         goto error_sysfs;
2727                 }
2728         }
2729
2730         ret = btrfs_add_dev_item(trans, device);
2731         if (ret) {
2732                 btrfs_abort_transaction(trans, ret);
2733                 goto error_sysfs;
2734         }
2735
2736         if (seeding_dev) {
2737                 ret = btrfs_finish_sprout(trans);
2738                 if (ret) {
2739                         btrfs_abort_transaction(trans, ret);
2740                         goto error_sysfs;
2741                 }
2742
2743                 /*
2744                  * fs_devices now represents the newly sprouted filesystem and
2745                  * its fsid has been changed by btrfs_prepare_sprout
2746                  */
2747                 btrfs_sysfs_update_sprout_fsid(fs_devices);
2748         }
2749
2750         ret = btrfs_commit_transaction(trans);
2751
2752         if (seeding_dev) {
2753                 mutex_unlock(&uuid_mutex);
2754                 up_write(&sb->s_umount);
2755                 locked = false;
2756
2757                 if (ret) /* transaction commit */
2758                         return ret;
2759
2760                 ret = btrfs_relocate_sys_chunks(fs_info);
2761                 if (ret < 0)
2762                         btrfs_handle_fs_error(fs_info, ret,
2763                                     "Failed to relocate sys chunks after device initialization. This can be fixed using the \"btrfs balance\" command.");
2764                 trans = btrfs_attach_transaction(root);
2765                 if (IS_ERR(trans)) {
2766                         if (PTR_ERR(trans) == -ENOENT)
2767                                 return 0;
2768                         ret = PTR_ERR(trans);
2769                         trans = NULL;
2770                         goto error_sysfs;
2771                 }
2772                 ret = btrfs_commit_transaction(trans);
2773         }
2774
2775         /*
2776          * Now that we have written a new super block to this device, check all
2777          * other fs_devices list if device_path alienates any other scanned
2778          * device.
2779          * We can ignore the return value as it typically returns -EINVAL and
2780          * only succeeds if the device was an alien.
2781          */
2782         btrfs_forget_devices(device_path);
2783
2784         /* Update ctime/mtime for blkid or udev */
2785         update_dev_time(device_path);
2786
2787         return ret;
2788
2789 error_sysfs:
2790         btrfs_sysfs_remove_device(device);
2791         mutex_lock(&fs_info->fs_devices->device_list_mutex);
2792         mutex_lock(&fs_info->chunk_mutex);
2793         list_del_rcu(&device->dev_list);
2794         list_del(&device->dev_alloc_list);
2795         fs_info->fs_devices->num_devices--;
2796         fs_info->fs_devices->open_devices--;
2797         fs_info->fs_devices->rw_devices--;
2798         fs_info->fs_devices->total_devices--;
2799         fs_info->fs_devices->total_rw_bytes -= device->total_bytes;
2800         atomic64_sub(device->total_bytes, &fs_info->free_chunk_space);
2801         btrfs_set_super_total_bytes(fs_info->super_copy,
2802                                     orig_super_total_bytes);
2803         btrfs_set_super_num_devices(fs_info->super_copy,
2804                                     orig_super_num_devices);
2805         mutex_unlock(&fs_info->chunk_mutex);
2806         mutex_unlock(&fs_info->fs_devices->device_list_mutex);
2807 error_trans:
2808         if (seeding_dev)
2809                 btrfs_set_sb_rdonly(sb);
2810         if (trans)
2811                 btrfs_end_transaction(trans);
2812 error_free_zone:
2813         btrfs_destroy_dev_zone_info(device);
2814 error_free_device:
2815         btrfs_free_device(device);
2816 error:
2817         blkdev_put(bdev, FMODE_EXCL);
2818         if (locked) {
2819                 mutex_unlock(&uuid_mutex);
2820                 up_write(&sb->s_umount);
2821         }
2822         return ret;
2823 }
2824
2825 static noinline int btrfs_update_device(struct btrfs_trans_handle *trans,
2826                                         struct btrfs_device *device)
2827 {
2828         int ret;
2829         struct btrfs_path *path;
2830         struct btrfs_root *root = device->fs_info->chunk_root;
2831         struct btrfs_dev_item *dev_item;
2832         struct extent_buffer *leaf;
2833         struct btrfs_key key;
2834
2835         path = btrfs_alloc_path();
2836         if (!path)
2837                 return -ENOMEM;
2838
2839         key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
2840         key.type = BTRFS_DEV_ITEM_KEY;
2841         key.offset = device->devid;
2842
2843         ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
2844         if (ret < 0)
2845                 goto out;
2846
2847         if (ret > 0) {
2848                 ret = -ENOENT;
2849                 goto out;
2850         }
2851
2852         leaf = path->nodes[0];
2853         dev_item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_dev_item);
2854
2855         btrfs_set_device_id(leaf, dev_item, device->devid);
2856         btrfs_set_device_type(leaf, dev_item, device->type);
2857         btrfs_set_device_io_align(leaf, dev_item, device->io_align);
2858         btrfs_set_device_io_width(leaf, dev_item, device->io_width);
2859         btrfs_set_device_sector_size(leaf, dev_item, device->sector_size);
2860         btrfs_set_device_total_bytes(leaf, dev_item,
2861                                      btrfs_device_get_disk_total_bytes(device));
2862         btrfs_set_device_bytes_used(leaf, dev_item,
2863                                     btrfs_device_get_bytes_used(device));
2864         btrfs_mark_buffer_dirty(leaf);
2865
2866 out:
2867         btrfs_free_path(path);
2868         return ret;
2869 }
2870
2871 int btrfs_grow_device(struct btrfs_trans_handle *trans,
2872                       struct btrfs_device *device, u64 new_size)
2873 {
2874         struct btrfs_fs_info *fs_info = device->fs_info;
2875         struct btrfs_super_block *super_copy = fs_info->super_copy;
2876         u64 old_total;
2877         u64 diff;
2878         int ret;
2879
2880         if (!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state))
2881                 return -EACCES;
2882
2883         new_size = round_down(new_size, fs_info->sectorsize);
2884
2885         mutex_lock(&fs_info->chunk_mutex);
2886         old_total = btrfs_super_total_bytes(super_copy);
2887         diff = round_down(new_size - device->total_bytes, fs_info->sectorsize);
2888
2889         if (new_size <= device->total_bytes ||
2890             test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) {
2891                 mutex_unlock(&fs_info->chunk_mutex);
2892                 return -EINVAL;
2893         }
2894
2895         btrfs_set_super_total_bytes(super_copy,
2896                         round_down(old_total + diff, fs_info->sectorsize));
2897         device->fs_devices->total_rw_bytes += diff;
2898
2899         btrfs_device_set_total_bytes(device, new_size);
2900         btrfs_device_set_disk_total_bytes(device, new_size);
2901         btrfs_clear_space_info_full(device->fs_info);
2902         if (list_empty(&device->post_commit_list))
2903                 list_add_tail(&device->post_commit_list,
2904                               &trans->transaction->dev_update_list);
2905         mutex_unlock(&fs_info->chunk_mutex);
2906
2907         btrfs_reserve_chunk_metadata(trans, false);
2908         ret = btrfs_update_device(trans, device);
2909         btrfs_trans_release_chunk_metadata(trans);
2910
2911         return ret;
2912 }
2913
2914 static int btrfs_free_chunk(struct btrfs_trans_handle *trans, u64 chunk_offset)
2915 {
2916         struct btrfs_fs_info *fs_info = trans->fs_info;
2917         struct btrfs_root *root = fs_info->chunk_root;
2918         int ret;
2919         struct btrfs_path *path;
2920         struct btrfs_key key;
2921
2922         path = btrfs_alloc_path();
2923         if (!path)
2924                 return -ENOMEM;
2925
2926         key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
2927         key.offset = chunk_offset;
2928         key.type = BTRFS_CHUNK_ITEM_KEY;
2929
2930         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
2931         if (ret < 0)
2932                 goto out;
2933         else if (ret > 0) { /* Logic error or corruption */
2934                 btrfs_handle_fs_error(fs_info, -ENOENT,
2935                                       "Failed lookup while freeing chunk.");
2936                 ret = -ENOENT;
2937                 goto out;
2938         }
2939
2940         ret = btrfs_del_item(trans, root, path);
2941         if (ret < 0)
2942                 btrfs_handle_fs_error(fs_info, ret,
2943                                       "Failed to delete chunk item.");
2944 out:
2945         btrfs_free_path(path);
2946         return ret;
2947 }
2948
2949 static int btrfs_del_sys_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset)
2950 {
2951         struct btrfs_super_block *super_copy = fs_info->super_copy;
2952         struct btrfs_disk_key *disk_key;
2953         struct btrfs_chunk *chunk;
2954         u8 *ptr;
2955         int ret = 0;
2956         u32 num_stripes;
2957         u32 array_size;
2958         u32 len = 0;
2959         u32 cur;
2960         struct btrfs_key key;
2961
2962         lockdep_assert_held(&fs_info->chunk_mutex);
2963         array_size = btrfs_super_sys_array_size(super_copy);
2964
2965         ptr = super_copy->sys_chunk_array;
2966         cur = 0;
2967
2968         while (cur < array_size) {
2969                 disk_key = (struct btrfs_disk_key *)ptr;
2970                 btrfs_disk_key_to_cpu(&key, disk_key);
2971
2972                 len = sizeof(*disk_key);
2973
2974                 if (key.type == BTRFS_CHUNK_ITEM_KEY) {
2975                         chunk = (struct btrfs_chunk *)(ptr + len);
2976                         num_stripes = btrfs_stack_chunk_num_stripes(chunk);
2977                         len += btrfs_chunk_item_size(num_stripes);
2978                 } else {
2979                         ret = -EIO;
2980                         break;
2981                 }
2982                 if (key.objectid == BTRFS_FIRST_CHUNK_TREE_OBJECTID &&
2983                     key.offset == chunk_offset) {
2984                         memmove(ptr, ptr + len, array_size - (cur + len));
2985                         array_size -= len;
2986                         btrfs_set_super_sys_array_size(super_copy, array_size);
2987                 } else {
2988                         ptr += len;
2989                         cur += len;
2990                 }
2991         }
2992         return ret;
2993 }
2994
2995 /*
2996  * btrfs_get_chunk_map() - Find the mapping containing the given logical extent.
2997  * @logical: Logical block offset in bytes.
2998  * @length: Length of extent in bytes.
2999  *
3000  * Return: Chunk mapping or ERR_PTR.
3001  */
3002 struct extent_map *btrfs_get_chunk_map(struct btrfs_fs_info *fs_info,
3003                                        u64 logical, u64 length)
3004 {
3005         struct extent_map_tree *em_tree;
3006         struct extent_map *em;
3007
3008         em_tree = &fs_info->mapping_tree;
3009         read_lock(&em_tree->lock);
3010         em = lookup_extent_mapping(em_tree, logical, length);
3011         read_unlock(&em_tree->lock);
3012
3013         if (!em) {
3014                 btrfs_crit(fs_info, "unable to find logical %llu length %llu",
3015                            logical, length);
3016                 return ERR_PTR(-EINVAL);
3017         }
3018
3019         if (em->start > logical || em->start + em->len < logical) {
3020                 btrfs_crit(fs_info,
3021                            "found a bad mapping, wanted %llu-%llu, found %llu-%llu",
3022                            logical, length, em->start, em->start + em->len);
3023                 free_extent_map(em);
3024                 return ERR_PTR(-EINVAL);
3025         }
3026
3027         /* callers are responsible for dropping em's ref. */
3028         return em;
3029 }
3030
3031 static int remove_chunk_item(struct btrfs_trans_handle *trans,
3032                              struct map_lookup *map, u64 chunk_offset)
3033 {
3034         int i;
3035
3036         /*
3037          * Removing chunk items and updating the device items in the chunks btree
3038          * requires holding the chunk_mutex.
3039          * See the comment at btrfs_chunk_alloc() for the details.
3040          */
3041         lockdep_assert_held(&trans->fs_info->chunk_mutex);
3042
3043         for (i = 0; i < map->num_stripes; i++) {
3044                 int ret;
3045
3046                 ret = btrfs_update_device(trans, map->stripes[i].dev);
3047                 if (ret)
3048                         return ret;
3049         }
3050
3051         return btrfs_free_chunk(trans, chunk_offset);
3052 }
3053
3054 int btrfs_remove_chunk(struct btrfs_trans_handle *trans, u64 chunk_offset)
3055 {
3056         struct btrfs_fs_info *fs_info = trans->fs_info;
3057         struct extent_map *em;
3058         struct map_lookup *map;
3059         u64 dev_extent_len = 0;
3060         int i, ret = 0;
3061         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
3062
3063         em = btrfs_get_chunk_map(fs_info, chunk_offset, 1);
3064         if (IS_ERR(em)) {
3065                 /*
3066                  * This is a logic error, but we don't want to just rely on the
3067                  * user having built with ASSERT enabled, so if ASSERT doesn't
3068                  * do anything we still error out.
3069                  */
3070                 ASSERT(0);
3071                 return PTR_ERR(em);
3072         }
3073         map = em->map_lookup;
3074
3075         /*
3076          * First delete the device extent items from the devices btree.
3077          * We take the device_list_mutex to avoid racing with the finishing phase
3078          * of a device replace operation. See the comment below before acquiring
3079          * fs_info->chunk_mutex. Note that here we do not acquire the chunk_mutex
3080          * because that can result in a deadlock when deleting the device extent
3081          * items from the devices btree - COWing an extent buffer from the btree
3082          * may result in allocating a new metadata chunk, which would attempt to
3083          * lock again fs_info->chunk_mutex.
3084          */
3085         mutex_lock(&fs_devices->device_list_mutex);
3086         for (i = 0; i < map->num_stripes; i++) {
3087                 struct btrfs_device *device = map->stripes[i].dev;
3088                 ret = btrfs_free_dev_extent(trans, device,
3089                                             map->stripes[i].physical,
3090                                             &dev_extent_len);
3091                 if (ret) {
3092                         mutex_unlock(&fs_devices->device_list_mutex);
3093                         btrfs_abort_transaction(trans, ret);
3094                         goto out;
3095                 }
3096
3097                 if (device->bytes_used > 0) {
3098                         mutex_lock(&fs_info->chunk_mutex);
3099                         btrfs_device_set_bytes_used(device,
3100                                         device->bytes_used - dev_extent_len);
3101                         atomic64_add(dev_extent_len, &fs_info->free_chunk_space);
3102                         btrfs_clear_space_info_full(fs_info);
3103                         mutex_unlock(&fs_info->chunk_mutex);
3104                 }
3105         }
3106         mutex_unlock(&fs_devices->device_list_mutex);
3107
3108         /*
3109          * We acquire fs_info->chunk_mutex for 2 reasons:
3110          *
3111          * 1) Just like with the first phase of the chunk allocation, we must
3112          *    reserve system space, do all chunk btree updates and deletions, and
3113          *    update the system chunk array in the superblock while holding this
3114          *    mutex. This is for similar reasons as explained on the comment at
3115          *    the top of btrfs_chunk_alloc();
3116          *
3117          * 2) Prevent races with the final phase of a device replace operation
3118          *    that replaces the device object associated with the map's stripes,
3119          *    because the device object's id can change at any time during that
3120          *    final phase of the device replace operation
3121          *    (dev-replace.c:btrfs_dev_replace_finishing()), so we could grab the
3122          *    replaced device and then see it with an ID of
3123          *    BTRFS_DEV_REPLACE_DEVID, which would cause a failure when updating
3124          *    the device item, which does not exists on the chunk btree.
3125          *    The finishing phase of device replace acquires both the
3126          *    device_list_mutex and the chunk_mutex, in that order, so we are
3127          *    safe by just acquiring the chunk_mutex.
3128          */
3129         trans->removing_chunk = true;
3130         mutex_lock(&fs_info->chunk_mutex);
3131
3132         check_system_chunk(trans, map->type);
3133
3134         ret = remove_chunk_item(trans, map, chunk_offset);
3135         /*
3136          * Normally we should not get -ENOSPC since we reserved space before
3137          * through the call to check_system_chunk().
3138          *
3139          * Despite our system space_info having enough free space, we may not
3140          * be able to allocate extents from its block groups, because all have
3141          * an incompatible profile, which will force us to allocate a new system
3142          * block group with the right profile, or right after we called
3143          * check_system_space() above, a scrub turned the only system block group
3144          * with enough free space into RO mode.
3145          * This is explained with more detail at do_chunk_alloc().
3146          *
3147          * So if we get -ENOSPC, allocate a new system chunk and retry once.
3148          */
3149         if (ret == -ENOSPC) {
3150                 const u64 sys_flags = btrfs_system_alloc_profile(fs_info);
3151                 struct btrfs_block_group *sys_bg;
3152
3153                 sys_bg = btrfs_create_chunk(trans, sys_flags);
3154                 if (IS_ERR(sys_bg)) {
3155                         ret = PTR_ERR(sys_bg);
3156                         btrfs_abort_transaction(trans, ret);
3157                         goto out;
3158                 }
3159
3160                 ret = btrfs_chunk_alloc_add_chunk_item(trans, sys_bg);
3161                 if (ret) {
3162                         btrfs_abort_transaction(trans, ret);
3163                         goto out;
3164                 }
3165
3166                 ret = remove_chunk_item(trans, map, chunk_offset);
3167                 if (ret) {
3168                         btrfs_abort_transaction(trans, ret);
3169                         goto out;
3170                 }
3171         } else if (ret) {
3172                 btrfs_abort_transaction(trans, ret);
3173                 goto out;
3174         }
3175
3176         trace_btrfs_chunk_free(fs_info, map, chunk_offset, em->len);
3177
3178         if (map->type & BTRFS_BLOCK_GROUP_SYSTEM) {
3179                 ret = btrfs_del_sys_chunk(fs_info, chunk_offset);
3180                 if (ret) {
3181                         btrfs_abort_transaction(trans, ret);
3182                         goto out;
3183                 }
3184         }
3185
3186         mutex_unlock(&fs_info->chunk_mutex);
3187         trans->removing_chunk = false;
3188
3189         /*
3190          * We are done with chunk btree updates and deletions, so release the
3191          * system space we previously reserved (with check_system_chunk()).
3192          */
3193         btrfs_trans_release_chunk_metadata(trans);
3194
3195         ret = btrfs_remove_block_group(trans, chunk_offset, em);
3196         if (ret) {
3197                 btrfs_abort_transaction(trans, ret);
3198                 goto out;
3199         }
3200
3201 out:
3202         if (trans->removing_chunk) {
3203                 mutex_unlock(&fs_info->chunk_mutex);
3204                 trans->removing_chunk = false;
3205         }
3206         /* once for us */
3207         free_extent_map(em);
3208         return ret;
3209 }
3210
3211 int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset)
3212 {
3213         struct btrfs_root *root = fs_info->chunk_root;
3214         struct btrfs_trans_handle *trans;
3215         struct btrfs_block_group *block_group;
3216         u64 length;
3217         int ret;
3218
3219         /*
3220          * Prevent races with automatic removal of unused block groups.
3221          * After we relocate and before we remove the chunk with offset
3222          * chunk_offset, automatic removal of the block group can kick in,
3223          * resulting in a failure when calling btrfs_remove_chunk() below.
3224          *
3225          * Make sure to acquire this mutex before doing a tree search (dev
3226          * or chunk trees) to find chunks. Otherwise the cleaner kthread might
3227          * call btrfs_remove_chunk() (through btrfs_delete_unused_bgs()) after
3228          * we release the path used to search the chunk/dev tree and before
3229          * the current task acquires this mutex and calls us.
3230          */
3231         lockdep_assert_held(&fs_info->reclaim_bgs_lock);
3232
3233         /* step one, relocate all the extents inside this chunk */
3234         btrfs_scrub_pause(fs_info);
3235         ret = btrfs_relocate_block_group(fs_info, chunk_offset);
3236         btrfs_scrub_continue(fs_info);
3237         if (ret)
3238                 return ret;
3239
3240         block_group = btrfs_lookup_block_group(fs_info, chunk_offset);
3241         if (!block_group)
3242                 return -ENOENT;
3243         btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group);
3244         length = block_group->length;
3245         btrfs_put_block_group(block_group);
3246
3247         /*
3248          * On a zoned file system, discard the whole block group, this will
3249          * trigger a REQ_OP_ZONE_RESET operation on the device zone. If
3250          * resetting the zone fails, don't treat it as a fatal problem from the
3251          * filesystem's point of view.
3252          */
3253         if (btrfs_is_zoned(fs_info)) {
3254                 ret = btrfs_discard_extent(fs_info, chunk_offset, length, NULL);
3255                 if (ret)
3256                         btrfs_info(fs_info,
3257                                 "failed to reset zone %llu after relocation",
3258                                 chunk_offset);
3259         }
3260
3261         trans = btrfs_start_trans_remove_block_group(root->fs_info,
3262                                                      chunk_offset);
3263         if (IS_ERR(trans)) {
3264                 ret = PTR_ERR(trans);
3265                 btrfs_handle_fs_error(root->fs_info, ret, NULL);
3266                 return ret;
3267         }
3268
3269         /*
3270          * step two, delete the device extents and the
3271          * chunk tree entries
3272          */
3273         ret = btrfs_remove_chunk(trans, chunk_offset);
3274         btrfs_end_transaction(trans);
3275         return ret;
3276 }
3277
3278 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info)
3279 {
3280         struct btrfs_root *chunk_root = fs_info->chunk_root;
3281         struct btrfs_path *path;
3282         struct extent_buffer *leaf;
3283         struct btrfs_chunk *chunk;
3284         struct btrfs_key key;
3285         struct btrfs_key found_key;
3286         u64 chunk_type;
3287         bool retried = false;
3288         int failed = 0;
3289         int ret;
3290
3291         path = btrfs_alloc_path();
3292         if (!path)
3293                 return -ENOMEM;
3294
3295 again:
3296         key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
3297         key.offset = (u64)-1;
3298         key.type = BTRFS_CHUNK_ITEM_KEY;
3299
3300         while (1) {
3301                 mutex_lock(&fs_info->reclaim_bgs_lock);
3302                 ret = btrfs_search_slot(NULL, chunk_root, &key, path, 0, 0);
3303                 if (ret < 0) {
3304                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3305                         goto error;
3306                 }
3307                 BUG_ON(ret == 0); /* Corruption */
3308
3309                 ret = btrfs_previous_item(chunk_root, path, key.objectid,
3310                                           key.type);
3311                 if (ret)
3312                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3313                 if (ret < 0)
3314                         goto error;
3315                 if (ret > 0)
3316                         break;
3317
3318                 leaf = path->nodes[0];
3319                 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
3320
3321                 chunk = btrfs_item_ptr(leaf, path->slots[0],
3322                                        struct btrfs_chunk);
3323                 chunk_type = btrfs_chunk_type(leaf, chunk);
3324                 btrfs_release_path(path);
3325
3326                 if (chunk_type & BTRFS_BLOCK_GROUP_SYSTEM) {
3327                         ret = btrfs_relocate_chunk(fs_info, found_key.offset);
3328                         if (ret == -ENOSPC)
3329                                 failed++;
3330                         else
3331                                 BUG_ON(ret);
3332                 }
3333                 mutex_unlock(&fs_info->reclaim_bgs_lock);
3334
3335                 if (found_key.offset == 0)
3336                         break;
3337                 key.offset = found_key.offset - 1;
3338         }
3339         ret = 0;
3340         if (failed && !retried) {
3341                 failed = 0;
3342                 retried = true;
3343                 goto again;
3344         } else if (WARN_ON(failed && retried)) {
3345                 ret = -ENOSPC;
3346         }
3347 error:
3348         btrfs_free_path(path);
3349         return ret;
3350 }
3351
3352 /*
3353  * return 1 : allocate a data chunk successfully,
3354  * return <0: errors during allocating a data chunk,
3355  * return 0 : no need to allocate a data chunk.
3356  */
3357 static int btrfs_may_alloc_data_chunk(struct btrfs_fs_info *fs_info,
3358                                       u64 chunk_offset)
3359 {
3360         struct btrfs_block_group *cache;
3361         u64 bytes_used;
3362         u64 chunk_type;
3363
3364         cache = btrfs_lookup_block_group(fs_info, chunk_offset);
3365         ASSERT(cache);
3366         chunk_type = cache->flags;
3367         btrfs_put_block_group(cache);
3368
3369         if (!(chunk_type & BTRFS_BLOCK_GROUP_DATA))
3370                 return 0;
3371
3372         spin_lock(&fs_info->data_sinfo->lock);
3373         bytes_used = fs_info->data_sinfo->bytes_used;
3374         spin_unlock(&fs_info->data_sinfo->lock);
3375
3376         if (!bytes_used) {
3377                 struct btrfs_trans_handle *trans;
3378                 int ret;
3379
3380                 trans = btrfs_join_transaction(fs_info->tree_root);
3381                 if (IS_ERR(trans))
3382                         return PTR_ERR(trans);
3383
3384                 ret = btrfs_force_chunk_alloc(trans, BTRFS_BLOCK_GROUP_DATA);
3385                 btrfs_end_transaction(trans);
3386                 if (ret < 0)
3387                         return ret;
3388                 return 1;
3389         }
3390
3391         return 0;
3392 }
3393
3394 static int insert_balance_item(struct btrfs_fs_info *fs_info,
3395                                struct btrfs_balance_control *bctl)
3396 {
3397         struct btrfs_root *root = fs_info->tree_root;
3398         struct btrfs_trans_handle *trans;
3399         struct btrfs_balance_item *item;
3400         struct btrfs_disk_balance_args disk_bargs;
3401         struct btrfs_path *path;
3402         struct extent_buffer *leaf;
3403         struct btrfs_key key;
3404         int ret, err;
3405
3406         path = btrfs_alloc_path();
3407         if (!path)
3408                 return -ENOMEM;
3409
3410         trans = btrfs_start_transaction(root, 0);
3411         if (IS_ERR(trans)) {
3412                 btrfs_free_path(path);
3413                 return PTR_ERR(trans);
3414         }
3415
3416         key.objectid = BTRFS_BALANCE_OBJECTID;
3417         key.type = BTRFS_TEMPORARY_ITEM_KEY;
3418         key.offset = 0;
3419
3420         ret = btrfs_insert_empty_item(trans, root, path, &key,
3421                                       sizeof(*item));
3422         if (ret)
3423                 goto out;
3424
3425         leaf = path->nodes[0];
3426         item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_balance_item);
3427
3428         memzero_extent_buffer(leaf, (unsigned long)item, sizeof(*item));
3429
3430         btrfs_cpu_balance_args_to_disk(&disk_bargs, &bctl->data);
3431         btrfs_set_balance_data(leaf, item, &disk_bargs);
3432         btrfs_cpu_balance_args_to_disk(&disk_bargs, &bctl->meta);
3433         btrfs_set_balance_meta(leaf, item, &disk_bargs);
3434         btrfs_cpu_balance_args_to_disk(&disk_bargs, &bctl->sys);
3435         btrfs_set_balance_sys(leaf, item, &disk_bargs);
3436
3437         btrfs_set_balance_flags(leaf, item, bctl->flags);
3438
3439         btrfs_mark_buffer_dirty(leaf);
3440 out:
3441         btrfs_free_path(path);
3442         err = btrfs_commit_transaction(trans);
3443         if (err && !ret)
3444                 ret = err;
3445         return ret;
3446 }
3447
3448 static int del_balance_item(struct btrfs_fs_info *fs_info)
3449 {
3450         struct btrfs_root *root = fs_info->tree_root;
3451         struct btrfs_trans_handle *trans;
3452         struct btrfs_path *path;
3453         struct btrfs_key key;
3454         int ret, err;
3455
3456         path = btrfs_alloc_path();
3457         if (!path)
3458                 return -ENOMEM;
3459
3460         trans = btrfs_start_transaction_fallback_global_rsv(root, 0);
3461         if (IS_ERR(trans)) {
3462                 btrfs_free_path(path);
3463                 return PTR_ERR(trans);
3464         }
3465
3466         key.objectid = BTRFS_BALANCE_OBJECTID;
3467         key.type = BTRFS_TEMPORARY_ITEM_KEY;
3468         key.offset = 0;
3469
3470         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
3471         if (ret < 0)
3472                 goto out;
3473         if (ret > 0) {
3474                 ret = -ENOENT;
3475                 goto out;
3476         }
3477
3478         ret = btrfs_del_item(trans, root, path);
3479 out:
3480         btrfs_free_path(path);
3481         err = btrfs_commit_transaction(trans);
3482         if (err && !ret)
3483                 ret = err;
3484         return ret;
3485 }
3486
3487 /*
3488  * This is a heuristic used to reduce the number of chunks balanced on
3489  * resume after balance was interrupted.
3490  */
3491 static void update_balance_args(struct btrfs_balance_control *bctl)
3492 {
3493         /*
3494          * Turn on soft mode for chunk types that were being converted.
3495          */
3496         if (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT)
3497                 bctl->data.flags |= BTRFS_BALANCE_ARGS_SOFT;
3498         if (bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT)
3499                 bctl->sys.flags |= BTRFS_BALANCE_ARGS_SOFT;
3500         if (bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT)
3501                 bctl->meta.flags |= BTRFS_BALANCE_ARGS_SOFT;
3502
3503         /*
3504          * Turn on usage filter if is not already used.  The idea is
3505          * that chunks that we have already balanced should be
3506          * reasonably full.  Don't do it for chunks that are being
3507          * converted - that will keep us from relocating unconverted
3508          * (albeit full) chunks.
3509          */
3510         if (!(bctl->data.flags & BTRFS_BALANCE_ARGS_USAGE) &&
3511             !(bctl->data.flags & BTRFS_BALANCE_ARGS_USAGE_RANGE) &&
3512             !(bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT)) {
3513                 bctl->data.flags |= BTRFS_BALANCE_ARGS_USAGE;
3514                 bctl->data.usage = 90;
3515         }
3516         if (!(bctl->sys.flags & BTRFS_BALANCE_ARGS_USAGE) &&
3517             !(bctl->sys.flags & BTRFS_BALANCE_ARGS_USAGE_RANGE) &&
3518             !(bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT)) {
3519                 bctl->sys.flags |= BTRFS_BALANCE_ARGS_USAGE;
3520                 bctl->sys.usage = 90;
3521         }
3522         if (!(bctl->meta.flags & BTRFS_BALANCE_ARGS_USAGE) &&
3523             !(bctl->meta.flags & BTRFS_BALANCE_ARGS_USAGE_RANGE) &&
3524             !(bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT)) {
3525                 bctl->meta.flags |= BTRFS_BALANCE_ARGS_USAGE;
3526                 bctl->meta.usage = 90;
3527         }
3528 }
3529
3530 /*
3531  * Clear the balance status in fs_info and delete the balance item from disk.
3532  */
3533 static void reset_balance_state(struct btrfs_fs_info *fs_info)
3534 {
3535         struct btrfs_balance_control *bctl = fs_info->balance_ctl;
3536         int ret;
3537
3538         BUG_ON(!fs_info->balance_ctl);
3539
3540         spin_lock(&fs_info->balance_lock);
3541         fs_info->balance_ctl = NULL;
3542         spin_unlock(&fs_info->balance_lock);
3543
3544         kfree(bctl);
3545         ret = del_balance_item(fs_info);
3546         if (ret)
3547                 btrfs_handle_fs_error(fs_info, ret, NULL);
3548 }
3549
3550 /*
3551  * Balance filters.  Return 1 if chunk should be filtered out
3552  * (should not be balanced).
3553  */
3554 static int chunk_profiles_filter(u64 chunk_type,
3555                                  struct btrfs_balance_args *bargs)
3556 {
3557         chunk_type = chunk_to_extended(chunk_type) &
3558                                 BTRFS_EXTENDED_PROFILE_MASK;
3559
3560         if (bargs->profiles & chunk_type)
3561                 return 0;
3562
3563         return 1;
3564 }
3565
3566 static int chunk_usage_range_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset,
3567                               struct btrfs_balance_args *bargs)
3568 {
3569         struct btrfs_block_group *cache;
3570         u64 chunk_used;
3571         u64 user_thresh_min;
3572         u64 user_thresh_max;
3573         int ret = 1;
3574
3575         cache = btrfs_lookup_block_group(fs_info, chunk_offset);
3576         chunk_used = cache->used;
3577
3578         if (bargs->usage_min == 0)
3579                 user_thresh_min = 0;
3580         else
3581                 user_thresh_min = div_factor_fine(cache->length,
3582                                                   bargs->usage_min);
3583
3584         if (bargs->usage_max == 0)
3585                 user_thresh_max = 1;
3586         else if (bargs->usage_max > 100)
3587                 user_thresh_max = cache->length;
3588         else
3589                 user_thresh_max = div_factor_fine(cache->length,
3590                                                   bargs->usage_max);
3591
3592         if (user_thresh_min <= chunk_used && chunk_used < user_thresh_max)
3593                 ret = 0;
3594
3595         btrfs_put_block_group(cache);
3596         return ret;
3597 }
3598
3599 static int chunk_usage_filter(struct btrfs_fs_info *fs_info,
3600                 u64 chunk_offset, struct btrfs_balance_args *bargs)
3601 {
3602         struct btrfs_block_group *cache;
3603         u64 chunk_used, user_thresh;
3604         int ret = 1;
3605
3606         cache = btrfs_lookup_block_group(fs_info, chunk_offset);
3607         chunk_used = cache->used;
3608
3609         if (bargs->usage_min == 0)
3610                 user_thresh = 1;
3611         else if (bargs->usage > 100)
3612                 user_thresh = cache->length;
3613         else
3614                 user_thresh = div_factor_fine(cache->length, bargs->usage);
3615
3616         if (chunk_used < user_thresh)
3617                 ret = 0;
3618
3619         btrfs_put_block_group(cache);
3620         return ret;
3621 }
3622
3623 static int chunk_devid_filter(struct extent_buffer *leaf,
3624                               struct btrfs_chunk *chunk,
3625                               struct btrfs_balance_args *bargs)
3626 {
3627         struct btrfs_stripe *stripe;
3628         int num_stripes = btrfs_chunk_num_stripes(leaf, chunk);
3629         int i;
3630
3631         for (i = 0; i < num_stripes; i++) {
3632                 stripe = btrfs_stripe_nr(chunk, i);
3633                 if (btrfs_stripe_devid(leaf, stripe) == bargs->devid)
3634                         return 0;
3635         }
3636
3637         return 1;
3638 }
3639
3640 static u64 calc_data_stripes(u64 type, int num_stripes)
3641 {
3642         const int index = btrfs_bg_flags_to_raid_index(type);
3643         const int ncopies = btrfs_raid_array[index].ncopies;
3644         const int nparity = btrfs_raid_array[index].nparity;
3645
3646         return (num_stripes - nparity) / ncopies;
3647 }
3648
3649 /* [pstart, pend) */
3650 static int chunk_drange_filter(struct extent_buffer *leaf,
3651                                struct btrfs_chunk *chunk,
3652                                struct btrfs_balance_args *bargs)
3653 {
3654         struct btrfs_stripe *stripe;
3655         int num_stripes = btrfs_chunk_num_stripes(leaf, chunk);
3656         u64 stripe_offset;
3657         u64 stripe_length;
3658         u64 type;
3659         int factor;
3660         int i;
3661
3662         if (!(bargs->flags & BTRFS_BALANCE_ARGS_DEVID))
3663                 return 0;
3664
3665         type = btrfs_chunk_type(leaf, chunk);
3666         factor = calc_data_stripes(type, num_stripes);
3667
3668         for (i = 0; i < num_stripes; i++) {
3669                 stripe = btrfs_stripe_nr(chunk, i);
3670                 if (btrfs_stripe_devid(leaf, stripe) != bargs->devid)
3671                         continue;
3672
3673                 stripe_offset = btrfs_stripe_offset(leaf, stripe);
3674                 stripe_length = btrfs_chunk_length(leaf, chunk);
3675                 stripe_length = div_u64(stripe_length, factor);
3676
3677                 if (stripe_offset < bargs->pend &&
3678                     stripe_offset + stripe_length > bargs->pstart)
3679                         return 0;
3680         }
3681
3682         return 1;
3683 }
3684
3685 /* [vstart, vend) */
3686 static int chunk_vrange_filter(struct extent_buffer *leaf,
3687                                struct btrfs_chunk *chunk,
3688                                u64 chunk_offset,
3689                                struct btrfs_balance_args *bargs)
3690 {
3691         if (chunk_offset < bargs->vend &&
3692             chunk_offset + btrfs_chunk_length(leaf, chunk) > bargs->vstart)
3693                 /* at least part of the chunk is inside this vrange */
3694                 return 0;
3695
3696         return 1;
3697 }
3698
3699 static int chunk_stripes_range_filter(struct extent_buffer *leaf,
3700                                struct btrfs_chunk *chunk,
3701                                struct btrfs_balance_args *bargs)
3702 {
3703         int num_stripes = btrfs_chunk_num_stripes(leaf, chunk);
3704
3705         if (bargs->stripes_min <= num_stripes
3706                         && num_stripes <= bargs->stripes_max)
3707                 return 0;
3708
3709         return 1;
3710 }
3711
3712 static int chunk_soft_convert_filter(u64 chunk_type,
3713                                      struct btrfs_balance_args *bargs)
3714 {
3715         if (!(bargs->flags & BTRFS_BALANCE_ARGS_CONVERT))
3716                 return 0;
3717
3718         chunk_type = chunk_to_extended(chunk_type) &
3719                                 BTRFS_EXTENDED_PROFILE_MASK;
3720
3721         if (bargs->target == chunk_type)
3722                 return 1;
3723
3724         return 0;
3725 }
3726
3727 static int should_balance_chunk(struct extent_buffer *leaf,
3728                                 struct btrfs_chunk *chunk, u64 chunk_offset)
3729 {
3730         struct btrfs_fs_info *fs_info = leaf->fs_info;
3731         struct btrfs_balance_control *bctl = fs_info->balance_ctl;
3732         struct btrfs_balance_args *bargs = NULL;
3733         u64 chunk_type = btrfs_chunk_type(leaf, chunk);
3734
3735         /* type filter */
3736         if (!((chunk_type & BTRFS_BLOCK_GROUP_TYPE_MASK) &
3737               (bctl->flags & BTRFS_BALANCE_TYPE_MASK))) {
3738                 return 0;
3739         }
3740
3741         if (chunk_type & BTRFS_BLOCK_GROUP_DATA)
3742                 bargs = &bctl->data;
3743         else if (chunk_type & BTRFS_BLOCK_GROUP_SYSTEM)
3744                 bargs = &bctl->sys;
3745         else if (chunk_type & BTRFS_BLOCK_GROUP_METADATA)
3746                 bargs = &bctl->meta;
3747
3748         /* profiles filter */
3749         if ((bargs->flags & BTRFS_BALANCE_ARGS_PROFILES) &&
3750             chunk_profiles_filter(chunk_type, bargs)) {
3751                 return 0;
3752         }
3753
3754         /* usage filter */
3755         if ((bargs->flags & BTRFS_BALANCE_ARGS_USAGE) &&
3756             chunk_usage_filter(fs_info, chunk_offset, bargs)) {
3757                 return 0;
3758         } else if ((bargs->flags & BTRFS_BALANCE_ARGS_USAGE_RANGE) &&
3759             chunk_usage_range_filter(fs_info, chunk_offset, bargs)) {
3760                 return 0;
3761         }
3762
3763         /* devid filter */
3764         if ((bargs->flags & BTRFS_BALANCE_ARGS_DEVID) &&
3765             chunk_devid_filter(leaf, chunk, bargs)) {
3766                 return 0;
3767         }
3768
3769         /* drange filter, makes sense only with devid filter */
3770         if ((bargs->flags & BTRFS_BALANCE_ARGS_DRANGE) &&
3771             chunk_drange_filter(leaf, chunk, bargs)) {
3772                 return 0;
3773         }
3774
3775         /* vrange filter */
3776         if ((bargs->flags & BTRFS_BALANCE_ARGS_VRANGE) &&
3777             chunk_vrange_filter(leaf, chunk, chunk_offset, bargs)) {
3778                 return 0;
3779         }
3780
3781         /* stripes filter */
3782         if ((bargs->flags & BTRFS_BALANCE_ARGS_STRIPES_RANGE) &&
3783             chunk_stripes_range_filter(leaf, chunk, bargs)) {
3784                 return 0;
3785         }
3786
3787         /* soft profile changing mode */
3788         if ((bargs->flags & BTRFS_BALANCE_ARGS_SOFT) &&
3789             chunk_soft_convert_filter(chunk_type, bargs)) {
3790                 return 0;
3791         }
3792
3793         /*
3794          * limited by count, must be the last filter
3795          */
3796         if ((bargs->flags & BTRFS_BALANCE_ARGS_LIMIT)) {
3797                 if (bargs->limit == 0)
3798                         return 0;
3799                 else
3800                         bargs->limit--;
3801         } else if ((bargs->flags & BTRFS_BALANCE_ARGS_LIMIT_RANGE)) {
3802                 /*
3803                  * Same logic as the 'limit' filter; the minimum cannot be
3804                  * determined here because we do not have the global information
3805                  * about the count of all chunks that satisfy the filters.
3806                  */
3807                 if (bargs->limit_max == 0)
3808                         return 0;
3809                 else
3810                         bargs->limit_max--;
3811         }
3812
3813         return 1;
3814 }
3815
3816 static int __btrfs_balance(struct btrfs_fs_info *fs_info)
3817 {
3818         struct btrfs_balance_control *bctl = fs_info->balance_ctl;
3819         struct btrfs_root *chunk_root = fs_info->chunk_root;
3820         u64 chunk_type;
3821         struct btrfs_chunk *chunk;
3822         struct btrfs_path *path = NULL;
3823         struct btrfs_key key;
3824         struct btrfs_key found_key;
3825         struct extent_buffer *leaf;
3826         int slot;
3827         int ret;
3828         int enospc_errors = 0;
3829         bool counting = true;
3830         /* The single value limit and min/max limits use the same bytes in the */
3831         u64 limit_data = bctl->data.limit;
3832         u64 limit_meta = bctl->meta.limit;
3833         u64 limit_sys = bctl->sys.limit;
3834         u32 count_data = 0;
3835         u32 count_meta = 0;
3836         u32 count_sys = 0;
3837         int chunk_reserved = 0;
3838
3839         path = btrfs_alloc_path();
3840         if (!path) {
3841                 ret = -ENOMEM;
3842                 goto error;
3843         }
3844
3845         /* zero out stat counters */
3846         spin_lock(&fs_info->balance_lock);
3847         memset(&bctl->stat, 0, sizeof(bctl->stat));
3848         spin_unlock(&fs_info->balance_lock);
3849 again:
3850         if (!counting) {
3851                 /*
3852                  * The single value limit and min/max limits use the same bytes
3853                  * in the
3854                  */
3855                 bctl->data.limit = limit_data;
3856                 bctl->meta.limit = limit_meta;
3857                 bctl->sys.limit = limit_sys;
3858         }
3859         key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
3860         key.offset = (u64)-1;
3861         key.type = BTRFS_CHUNK_ITEM_KEY;
3862
3863         while (1) {
3864                 if ((!counting && atomic_read(&fs_info->balance_pause_req)) ||
3865                     atomic_read(&fs_info->balance_cancel_req)) {
3866                         ret = -ECANCELED;
3867                         goto error;
3868                 }
3869
3870                 mutex_lock(&fs_info->reclaim_bgs_lock);
3871                 ret = btrfs_search_slot(NULL, chunk_root, &key, path, 0, 0);
3872                 if (ret < 0) {
3873                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3874                         goto error;
3875                 }
3876
3877                 /*
3878                  * this shouldn't happen, it means the last relocate
3879                  * failed
3880                  */
3881                 if (ret == 0)
3882                         BUG(); /* FIXME break ? */
3883
3884                 ret = btrfs_previous_item(chunk_root, path, 0,
3885                                           BTRFS_CHUNK_ITEM_KEY);
3886                 if (ret) {
3887                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3888                         ret = 0;
3889                         break;
3890                 }
3891
3892                 leaf = path->nodes[0];
3893                 slot = path->slots[0];
3894                 btrfs_item_key_to_cpu(leaf, &found_key, slot);
3895
3896                 if (found_key.objectid != key.objectid) {
3897                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3898                         break;
3899                 }
3900
3901                 chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk);
3902                 chunk_type = btrfs_chunk_type(leaf, chunk);
3903
3904                 if (!counting) {
3905                         spin_lock(&fs_info->balance_lock);
3906                         bctl->stat.considered++;
3907                         spin_unlock(&fs_info->balance_lock);
3908                 }
3909
3910                 ret = should_balance_chunk(leaf, chunk, found_key.offset);
3911
3912                 btrfs_release_path(path);
3913                 if (!ret) {
3914                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3915                         goto loop;
3916                 }
3917
3918                 if (counting) {
3919                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3920                         spin_lock(&fs_info->balance_lock);
3921                         bctl->stat.expected++;
3922                         spin_unlock(&fs_info->balance_lock);
3923
3924                         if (chunk_type & BTRFS_BLOCK_GROUP_DATA)
3925                                 count_data++;
3926                         else if (chunk_type & BTRFS_BLOCK_GROUP_SYSTEM)
3927                                 count_sys++;
3928                         else if (chunk_type & BTRFS_BLOCK_GROUP_METADATA)
3929                                 count_meta++;
3930
3931                         goto loop;
3932                 }
3933
3934                 /*
3935                  * Apply limit_min filter, no need to check if the LIMITS
3936                  * filter is used, limit_min is 0 by default
3937                  */
3938                 if (((chunk_type & BTRFS_BLOCK_GROUP_DATA) &&
3939                                         count_data < bctl->data.limit_min)
3940                                 || ((chunk_type & BTRFS_BLOCK_GROUP_METADATA) &&
3941                                         count_meta < bctl->meta.limit_min)
3942                                 || ((chunk_type & BTRFS_BLOCK_GROUP_SYSTEM) &&
3943                                         count_sys < bctl->sys.limit_min)) {
3944                         mutex_unlock(&fs_info->reclaim_bgs_lock);
3945                         goto loop;
3946                 }
3947
3948                 if (!chunk_reserved) {
3949                         /*
3950                          * We may be relocating the only data chunk we have,
3951                          * which could potentially end up with losing data's
3952                          * raid profile, so lets allocate an empty one in
3953                          * advance.
3954                          */
3955                         ret = btrfs_may_alloc_data_chunk(fs_info,
3956                                                          found_key.offset);
3957                         if (ret < 0) {
3958                                 mutex_unlock(&fs_info->reclaim_bgs_lock);
3959                                 goto error;
3960                         } else if (ret == 1) {
3961                                 chunk_reserved = 1;
3962                         }
3963                 }
3964
3965                 ret = btrfs_relocate_chunk(fs_info, found_key.offset);
3966                 mutex_unlock(&fs_info->reclaim_bgs_lock);
3967                 if (ret == -ENOSPC) {
3968                         enospc_errors++;
3969                 } else if (ret == -ETXTBSY) {
3970                         btrfs_info(fs_info,
3971            "skipping relocation of block group %llu due to active swapfile",
3972                                    found_key.offset);
3973                         ret = 0;
3974                 } else if (ret) {
3975                         goto error;
3976                 } else {
3977                         spin_lock(&fs_info->balance_lock);
3978                         bctl->stat.completed++;
3979                         spin_unlock(&fs_info->balance_lock);
3980                 }
3981 loop:
3982                 if (found_key.offset == 0)
3983                         break;
3984                 key.offset = found_key.offset - 1;
3985         }
3986
3987         if (counting) {
3988                 btrfs_release_path(path);
3989                 counting = false;
3990                 goto again;
3991         }
3992 error:
3993         btrfs_free_path(path);
3994         if (enospc_errors) {
3995                 btrfs_info(fs_info, "%d enospc errors during balance",
3996                            enospc_errors);
3997                 if (!ret)
3998                         ret = -ENOSPC;
3999         }
4000
4001         return ret;
4002 }
4003
4004 /**
4005  * alloc_profile_is_valid - see if a given profile is valid and reduced
4006  * @flags: profile to validate
4007  * @extended: if true @flags is treated as an extended profile
4008  */
4009 static int alloc_profile_is_valid(u64 flags, int extended)
4010 {
4011         u64 mask = (extended ? BTRFS_EXTENDED_PROFILE_MASK :
4012                                BTRFS_BLOCK_GROUP_PROFILE_MASK);
4013
4014         flags &= ~BTRFS_BLOCK_GROUP_TYPE_MASK;
4015
4016         /* 1) check that all other bits are zeroed */
4017         if (flags & ~mask)
4018                 return 0;
4019
4020         /* 2) see if profile is reduced */
4021         if (flags == 0)
4022                 return !extended; /* "0" is valid for usual profiles */
4023
4024         return has_single_bit_set(flags);
4025 }
4026
4027 static inline int balance_need_close(struct btrfs_fs_info *fs_info)
4028 {
4029         /* cancel requested || normal exit path */
4030         return atomic_read(&fs_info->balance_cancel_req) ||
4031                 (atomic_read(&fs_info->balance_pause_req) == 0 &&
4032                  atomic_read(&fs_info->balance_cancel_req) == 0);
4033 }
4034
4035 /*
4036  * Validate target profile against allowed profiles and return true if it's OK.
4037  * Otherwise print the error message and return false.
4038  */
4039 static inline int validate_convert_profile(struct btrfs_fs_info *fs_info,
4040                 const struct btrfs_balance_args *bargs,
4041                 u64 allowed, const char *type)
4042 {
4043         if (!(bargs->flags & BTRFS_BALANCE_ARGS_CONVERT))
4044                 return true;
4045
4046         if (fs_info->sectorsize < PAGE_SIZE &&
4047                 bargs->target & BTRFS_BLOCK_GROUP_RAID56_MASK) {
4048                 btrfs_err(fs_info,
4049                 "RAID56 is not yet supported for sectorsize %u with page size %lu",
4050                           fs_info->sectorsize, PAGE_SIZE);
4051                 return false;
4052         }
4053         /* Profile is valid and does not have bits outside of the allowed set */
4054         if (alloc_profile_is_valid(bargs->target, 1) &&
4055             (bargs->target & ~allowed) == 0)
4056                 return true;
4057
4058         btrfs_err(fs_info, "balance: invalid convert %s profile %s",
4059                         type, btrfs_bg_type_to_raid_name(bargs->target));
4060         return false;
4061 }
4062
4063 /*
4064  * Fill @buf with textual description of balance filter flags @bargs, up to
4065  * @size_buf including the terminating null. The output may be trimmed if it
4066  * does not fit into the provided buffer.
4067  */
4068 static void describe_balance_args(struct btrfs_balance_args *bargs, char *buf,
4069                                  u32 size_buf)
4070 {
4071         int ret;
4072         u32 size_bp = size_buf;
4073         char *bp = buf;
4074         u64 flags = bargs->flags;
4075         char tmp_buf[128] = {'\0'};
4076
4077         if (!flags)
4078                 return;
4079
4080 #define CHECK_APPEND_NOARG(a)                                           \
4081         do {                                                            \
4082                 ret = snprintf(bp, size_bp, (a));                       \
4083                 if (ret < 0 || ret >= size_bp)                          \
4084                         goto out_overflow;                              \
4085                 size_bp -= ret;                                         \
4086                 bp += ret;                                              \
4087         } while (0)
4088
4089 #define CHECK_APPEND_1ARG(a, v1)                                        \
4090         do {                                                            \
4091                 ret = snprintf(bp, size_bp, (a), (v1));                 \
4092                 if (ret < 0 || ret >= size_bp)                          \
4093                         goto out_overflow;                              \
4094                 size_bp -= ret;                                         \
4095                 bp += ret;                                              \
4096         } while (0)
4097
4098 #define CHECK_APPEND_2ARG(a, v1, v2)                                    \
4099         do {                                                            \
4100                 ret = snprintf(bp, size_bp, (a), (v1), (v2));           \
4101                 if (ret < 0 || ret >= size_bp)                          \
4102                         goto out_overflow;                              \
4103                 size_bp -= ret;                                         \
4104                 bp += ret;                                              \
4105         } while (0)
4106
4107         if (flags & BTRFS_BALANCE_ARGS_CONVERT)
4108                 CHECK_APPEND_1ARG("convert=%s,",
4109                                   btrfs_bg_type_to_raid_name(bargs->target));
4110
4111         if (flags & BTRFS_BALANCE_ARGS_SOFT)
4112                 CHECK_APPEND_NOARG("soft,");
4113
4114         if (flags & BTRFS_BALANCE_ARGS_PROFILES) {
4115                 btrfs_describe_block_groups(bargs->profiles, tmp_buf,
4116                                             sizeof(tmp_buf));
4117                 CHECK_APPEND_1ARG("profiles=%s,", tmp_buf);
4118         }
4119
4120         if (flags & BTRFS_BALANCE_ARGS_USAGE)
4121                 CHECK_APPEND_1ARG("usage=%llu,", bargs->usage);
4122
4123         if (flags & BTRFS_BALANCE_ARGS_USAGE_RANGE)
4124                 CHECK_APPEND_2ARG("usage=%u..%u,",
4125                                   bargs->usage_min, bargs->usage_max);
4126
4127         if (flags & BTRFS_BALANCE_ARGS_DEVID)
4128                 CHECK_APPEND_1ARG("devid=%llu,", bargs->devid);
4129
4130         if (flags & BTRFS_BALANCE_ARGS_DRANGE)
4131                 CHECK_APPEND_2ARG("drange=%llu..%llu,",
4132                                   bargs->pstart, bargs->pend);
4133
4134         if (flags & BTRFS_BALANCE_ARGS_VRANGE)
4135                 CHECK_APPEND_2ARG("vrange=%llu..%llu,",
4136                                   bargs->vstart, bargs->vend);
4137
4138         if (flags & BTRFS_BALANCE_ARGS_LIMIT)
4139                 CHECK_APPEND_1ARG("limit=%llu,", bargs->limit);
4140
4141         if (flags & BTRFS_BALANCE_ARGS_LIMIT_RANGE)
4142                 CHECK_APPEND_2ARG("limit=%u..%u,",
4143                                 bargs->limit_min, bargs->limit_max);
4144
4145         if (flags & BTRFS_BALANCE_ARGS_STRIPES_RANGE)
4146                 CHECK_APPEND_2ARG("stripes=%u..%u,",
4147                                   bargs->stripes_min, bargs->stripes_max);
4148
4149 #undef CHECK_APPEND_2ARG
4150 #undef CHECK_APPEND_1ARG
4151 #undef CHECK_APPEND_NOARG
4152
4153 out_overflow:
4154
4155         if (size_bp < size_buf)
4156                 buf[size_buf - size_bp - 1] = '\0'; /* remove last , */
4157         else
4158                 buf[0] = '\0';
4159 }
4160
4161 static void describe_balance_start_or_resume(struct btrfs_fs_info *fs_info)
4162 {
4163         u32 size_buf = 1024;
4164         char tmp_buf[192] = {'\0'};
4165         char *buf;
4166         char *bp;
4167         u32 size_bp = size_buf;
4168         int ret;
4169         struct btrfs_balance_control *bctl = fs_info->balance_ctl;
4170
4171         buf = kzalloc(size_buf, GFP_KERNEL);
4172         if (!buf)
4173                 return;
4174
4175         bp = buf;
4176
4177 #define CHECK_APPEND_1ARG(a, v1)                                        \
4178         do {                                                            \
4179                 ret = snprintf(bp, size_bp, (a), (v1));                 \
4180                 if (ret < 0 || ret >= size_bp)                          \
4181                         goto out_overflow;                              \
4182                 size_bp -= ret;                                         \
4183                 bp += ret;                                              \
4184         } while (0)
4185
4186         if (bctl->flags & BTRFS_BALANCE_FORCE)
4187                 CHECK_APPEND_1ARG("%s", "-f ");
4188
4189         if (bctl->flags & BTRFS_BALANCE_DATA) {
4190                 describe_balance_args(&bctl->data, tmp_buf, sizeof(tmp_buf));
4191                 CHECK_APPEND_1ARG("-d%s ", tmp_buf);
4192         }
4193
4194         if (bctl->flags & BTRFS_BALANCE_METADATA) {
4195                 describe_balance_args(&bctl->meta, tmp_buf, sizeof(tmp_buf));
4196                 CHECK_APPEND_1ARG("-m%s ", tmp_buf);
4197         }
4198
4199         if (bctl->flags & BTRFS_BALANCE_SYSTEM) {
4200                 describe_balance_args(&bctl->sys, tmp_buf, sizeof(tmp_buf));
4201                 CHECK_APPEND_1ARG("-s%s ", tmp_buf);
4202         }
4203
4204 #undef CHECK_APPEND_1ARG
4205
4206 out_overflow:
4207
4208         if (size_bp < size_buf)
4209                 buf[size_buf - size_bp - 1] = '\0'; /* remove last " " */
4210         btrfs_info(fs_info, "balance: %s %s",
4211                    (bctl->flags & BTRFS_BALANCE_RESUME) ?
4212                    "resume" : "start", buf);
4213
4214         kfree(buf);
4215 }
4216
4217 /*
4218  * Should be called with balance mutexe held
4219  */
4220 int btrfs_balance(struct btrfs_fs_info *fs_info,
4221                   struct btrfs_balance_control *bctl,
4222                   struct btrfs_ioctl_balance_args *bargs)
4223 {
4224         u64 meta_target, data_target;
4225         u64 allowed;
4226         int mixed = 0;
4227         int ret;
4228         u64 num_devices;
4229         unsigned seq;
4230         bool reducing_redundancy;
4231         int i;
4232
4233         if (btrfs_fs_closing(fs_info) ||
4234             atomic_read(&fs_info->balance_pause_req) ||
4235             btrfs_should_cancel_balance(fs_info)) {
4236                 ret = -EINVAL;
4237                 goto out;
4238         }
4239
4240         allowed = btrfs_super_incompat_flags(fs_info->super_copy);
4241         if (allowed & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS)
4242                 mixed = 1;
4243
4244         /*
4245          * In case of mixed groups both data and meta should be picked,
4246          * and identical options should be given for both of them.
4247          */
4248         allowed = BTRFS_BALANCE_DATA | BTRFS_BALANCE_METADATA;
4249         if (mixed && (bctl->flags & allowed)) {
4250                 if (!(bctl->flags & BTRFS_BALANCE_DATA) ||
4251                     !(bctl->flags & BTRFS_BALANCE_METADATA) ||
4252                     memcmp(&bctl->data, &bctl->meta, sizeof(bctl->data))) {
4253                         btrfs_err(fs_info,
4254           "balance: mixed groups data and metadata options must be the same");
4255                         ret = -EINVAL;
4256                         goto out;
4257                 }
4258         }
4259
4260         /*
4261          * rw_devices will not change at the moment, device add/delete/replace
4262          * are exclusive
4263          */
4264         num_devices = fs_info->fs_devices->rw_devices;
4265
4266         /*
4267          * SINGLE profile on-disk has no profile bit, but in-memory we have a
4268          * special bit for it, to make it easier to distinguish.  Thus we need
4269          * to set it manually, or balance would refuse the profile.
4270          */
4271         allowed = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
4272         for (i = 0; i < ARRAY_SIZE(btrfs_raid_array); i++)
4273                 if (num_devices >= btrfs_raid_array[i].devs_min)
4274                         allowed |= btrfs_raid_array[i].bg_flag;
4275
4276         if (!validate_convert_profile(fs_info, &bctl->data, allowed, "data") ||
4277             !validate_convert_profile(fs_info, &bctl->meta, allowed, "metadata") ||
4278             !validate_convert_profile(fs_info, &bctl->sys,  allowed, "system")) {
4279                 ret = -EINVAL;
4280                 goto out;
4281         }
4282
4283         /*
4284          * Allow to reduce metadata or system integrity only if force set for
4285          * profiles with redundancy (copies, parity)
4286          */
4287         allowed = 0;
4288         for (i = 0; i < ARRAY_SIZE(btrfs_raid_array); i++) {
4289                 if (btrfs_raid_array[i].ncopies >= 2 ||
4290                     btrfs_raid_array[i].tolerated_failures >= 1)
4291                         allowed |= btrfs_raid_array[i].bg_flag;
4292         }
4293         do {
4294                 seq = read_seqbegin(&fs_info->profiles_lock);
4295
4296                 if (((bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
4297                      (fs_info->avail_system_alloc_bits & allowed) &&
4298                      !(bctl->sys.target & allowed)) ||
4299                     ((bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
4300                      (fs_info->avail_metadata_alloc_bits & allowed) &&
4301                      !(bctl->meta.target & allowed)))
4302                         reducing_redundancy = true;
4303                 else
4304                         reducing_redundancy = false;
4305
4306                 /* if we're not converting, the target field is uninitialized */
4307                 meta_target = (bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
4308                         bctl->meta.target : fs_info->avail_metadata_alloc_bits;
4309                 data_target = (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) ?
4310                         bctl->data.target : fs_info->avail_data_alloc_bits;
4311         } while (read_seqretry(&fs_info->profiles_lock, seq));
4312
4313         if (reducing_redundancy) {
4314                 if (bctl->flags & BTRFS_BALANCE_FORCE) {
4315                         btrfs_info(fs_info,
4316                            "balance: force reducing metadata redundancy");
4317                 } else {
4318                         btrfs_err(fs_info,
4319         "balance: reduces metadata redundancy, use --force if you want this");
4320                         ret = -EINVAL;
4321                         goto out;
4322                 }
4323         }
4324
4325         if (btrfs_get_num_tolerated_disk_barrier_failures(meta_target) <
4326                 btrfs_get_num_tolerated_disk_barrier_failures(data_target)) {
4327                 btrfs_warn(fs_info,
4328         "balance: metadata profile %s has lower redundancy than data profile %s",
4329                                 btrfs_bg_type_to_raid_name(meta_target),
4330                                 btrfs_bg_type_to_raid_name(data_target));
4331         }
4332
4333         ret = insert_balance_item(fs_info, bctl);
4334         if (ret && ret != -EEXIST)
4335                 goto out;
4336
4337         if (!(bctl->flags & BTRFS_BALANCE_RESUME)) {
4338                 BUG_ON(ret == -EEXIST);
4339                 BUG_ON(fs_info->balance_ctl);
4340                 spin_lock(&fs_info->balance_lock);
4341                 fs_info->balance_ctl = bctl;
4342                 spin_unlock(&fs_info->balance_lock);
4343         } else {
4344                 BUG_ON(ret != -EEXIST);
4345                 spin_lock(&fs_info->balance_lock);
4346                 update_balance_args(bctl);
4347                 spin_unlock(&fs_info->balance_lock);
4348         }
4349
4350         ASSERT(!test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags));
4351         set_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags);
4352         describe_balance_start_or_resume(fs_info);
4353         mutex_unlock(&fs_info->balance_mutex);
4354
4355         ret = __btrfs_balance(fs_info);
4356
4357         mutex_lock(&fs_info->balance_mutex);
4358         if (ret == -ECANCELED && atomic_read(&fs_info->balance_pause_req))
4359                 btrfs_info(fs_info, "balance: paused");
4360         /*
4361          * Balance can be canceled by:
4362          *
4363          * - Regular cancel request
4364          *   Then ret == -ECANCELED and balance_cancel_req > 0
4365          *
4366          * - Fatal signal to "btrfs" process
4367          *   Either the signal caught by wait_reserve_ticket() and callers
4368          *   got -EINTR, or caught by btrfs_should_cancel_balance() and
4369          *   got -ECANCELED.
4370          *   Either way, in this case balance_cancel_req = 0, and
4371          *   ret == -EINTR or ret == -ECANCELED.
4372          *
4373          * So here we only check the return value to catch canceled balance.
4374          */
4375         else if (ret == -ECANCELED || ret == -EINTR)
4376                 btrfs_info(fs_info, "balance: canceled");
4377         else
4378                 btrfs_info(fs_info, "balance: ended with status: %d", ret);
4379
4380         clear_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags);
4381
4382         if (bargs) {
4383                 memset(bargs, 0, sizeof(*bargs));
4384                 btrfs_update_ioctl_balance_args(fs_info, bargs);
4385         }
4386
4387         if ((ret && ret != -ECANCELED && ret != -ENOSPC) ||
4388             balance_need_close(fs_info)) {
4389                 reset_balance_state(fs_info);
4390                 btrfs_exclop_finish(fs_info);
4391         }
4392
4393         wake_up(&fs_info->balance_wait_q);
4394
4395         return ret;
4396 out:
4397         if (bctl->flags & BTRFS_BALANCE_RESUME)
4398                 reset_balance_state(fs_info);
4399         else
4400                 kfree(bctl);
4401         btrfs_exclop_finish(fs_info);
4402
4403         return ret;
4404 }
4405
4406 static int balance_kthread(void *data)
4407 {
4408         struct btrfs_fs_info *fs_info = data;
4409         int ret = 0;
4410
4411         mutex_lock(&fs_info->balance_mutex);
4412         if (fs_info->balance_ctl)
4413                 ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL);
4414         mutex_unlock(&fs_info->balance_mutex);
4415
4416         return ret;
4417 }
4418
4419 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info)
4420 {
4421         struct task_struct *tsk;
4422
4423         mutex_lock(&fs_info->balance_mutex);
4424         if (!fs_info->balance_ctl) {
4425                 mutex_unlock(&fs_info->balance_mutex);
4426                 return 0;
4427         }
4428         mutex_unlock(&fs_info->balance_mutex);
4429
4430         if (btrfs_test_opt(fs_info, SKIP_BALANCE)) {
4431                 btrfs_info(fs_info, "balance: resume skipped");
4432                 return 0;
4433         }
4434
4435         /*
4436          * A ro->rw remount sequence should continue with the paused balance
4437          * regardless of who pauses it, system or the user as of now, so set
4438          * the resume flag.
4439          */
4440         spin_lock(&fs_info->balance_lock);
4441         fs_info->balance_ctl->flags |= BTRFS_BALANCE_RESUME;
4442         spin_unlock(&fs_info->balance_lock);
4443
4444         tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance");
4445         return PTR_ERR_OR_ZERO(tsk);
4446 }
4447
4448 int btrfs_recover_balance(struct btrfs_fs_info *fs_info)
4449 {
4450         struct btrfs_balance_control *bctl;
4451         struct btrfs_balance_item *item;
4452         struct btrfs_disk_balance_args disk_bargs;
4453         struct btrfs_path *path;
4454         struct extent_buffer *leaf;
4455         struct btrfs_key key;
4456         int ret;
4457
4458         path = btrfs_alloc_path();
4459         if (!path)
4460                 return -ENOMEM;
4461
4462         key.objectid = BTRFS_BALANCE_OBJECTID;
4463         key.type = BTRFS_TEMPORARY_ITEM_KEY;
4464         key.offset = 0;
4465
4466         ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0);
4467         if (ret < 0)
4468                 goto out;
4469         if (ret > 0) { /* ret = -ENOENT; */
4470                 ret = 0;
4471                 goto out;
4472         }
4473
4474         bctl = kzalloc(sizeof(*bctl), GFP_NOFS);
4475         if (!bctl) {
4476                 ret = -ENOMEM;
4477                 goto out;
4478         }
4479
4480         leaf = path->nodes[0];
4481         item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_balance_item);
4482
4483         bctl->flags = btrfs_balance_flags(leaf, item);
4484         bctl->flags |= BTRFS_BALANCE_RESUME;
4485
4486         btrfs_balance_data(leaf, item, &disk_bargs);
4487         btrfs_disk_balance_args_to_cpu(&bctl->data, &disk_bargs);
4488         btrfs_balance_meta(leaf, item, &disk_bargs);
4489         btrfs_disk_balance_args_to_cpu(&bctl->meta, &disk_bargs);
4490         btrfs_balance_sys(leaf, item, &disk_bargs);
4491         btrfs_disk_balance_args_to_cpu(&bctl->sys, &disk_bargs);
4492
4493         /*
4494          * This should never happen, as the paused balance state is recovered
4495          * during mount without any chance of other exclusive ops to collide.
4496          *
4497          * This gives the exclusive op status to balance and keeps in paused
4498          * state until user intervention (cancel or umount). If the ownership
4499          * cannot be assigned, show a message but do not fail. The balance
4500          * is in a paused state and must have fs_info::balance_ctl properly
4501          * set up.
4502          */
4503         if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE))
4504                 btrfs_warn(fs_info,
4505         "balance: cannot set exclusive op status, resume manually");
4506
4507         btrfs_release_path(path);
4508
4509         mutex_lock(&fs_info->balance_mutex);
4510         BUG_ON(fs_info->balance_ctl);
4511         spin_lock(&fs_info->balance_lock);
4512         fs_info->balance_ctl = bctl;
4513         spin_unlock(&fs_info->balance_lock);
4514         mutex_unlock(&fs_info->balance_mutex);
4515 out:
4516         btrfs_free_path(path);
4517         return ret;
4518 }
4519
4520 int btrfs_pause_balance(struct btrfs_fs_info *fs_info)
4521 {
4522         int ret = 0;
4523
4524         mutex_lock(&fs_info->balance_mutex);
4525         if (!fs_info->balance_ctl) {
4526                 mutex_unlock(&fs_info->balance_mutex);
4527                 return -ENOTCONN;
4528         }
4529
4530         if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) {
4531                 atomic_inc(&fs_info->balance_pause_req);
4532                 mutex_unlock(&fs_info->balance_mutex);
4533
4534                 wait_event(fs_info->balance_wait_q,
4535                            !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags));
4536
4537                 mutex_lock(&fs_info->balance_mutex);
4538                 /* we are good with balance_ctl ripped off from under us */
4539                 BUG_ON(test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags));
4540                 atomic_dec(&fs_info->balance_pause_req);
4541         } else {
4542                 ret = -ENOTCONN;
4543         }
4544
4545         mutex_unlock(&fs_info->balance_mutex);
4546         return ret;
4547 }
4548
4549 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info)
4550 {
4551         mutex_lock(&fs_info->balance_mutex);
4552         if (!fs_info->balance_ctl) {
4553                 mutex_unlock(&fs_info->balance_mutex);
4554                 return -ENOTCONN;
4555         }
4556
4557         /*
4558          * A paused balance with the item stored on disk can be resumed at
4559          * mount time if the mount is read-write. Otherwise it's still paused
4560          * and we must not allow cancelling as it deletes the item.
4561          */
4562         if (sb_rdonly(fs_info->sb)) {
4563                 mutex_unlock(&fs_info->balance_mutex);
4564                 return -EROFS;
4565         }
4566
4567         atomic_inc(&fs_info->balance_cancel_req);
4568         /*
4569          * if we are running just wait and return, balance item is
4570          * deleted in btrfs_balance in this case
4571          */
4572         if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) {
4573                 mutex_unlock(&fs_info->balance_mutex);
4574                 wait_event(fs_info->balance_wait_q,
4575                            !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags));
4576                 mutex_lock(&fs_info->balance_mutex);
4577         } else {
4578                 mutex_unlock(&fs_info->balance_mutex);
4579                 /*
4580                  * Lock released to allow other waiters to continue, we'll
4581                  * reexamine the status again.
4582                  */
4583                 mutex_lock(&fs_info->balance_mutex);
4584
4585                 if (fs_info->balance_ctl) {
4586                         reset_balance_state(fs_info);
4587                         btrfs_exclop_finish(fs_info);
4588                         btrfs_info(fs_info, "balance: canceled");
4589                 }
4590         }
4591
4592         BUG_ON(fs_info->balance_ctl ||
4593                 test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags));
4594         atomic_dec(&fs_info->balance_cancel_req);
4595         mutex_unlock(&fs_info->balance_mutex);
4596         return 0;
4597 }
4598
4599 int btrfs_uuid_scan_kthread(void *data)
4600 {
4601         struct btrfs_fs_info *fs_info = data;
4602         struct btrfs_root *root = fs_info->tree_root;
4603         struct btrfs_key key;
4604         struct btrfs_path *path = NULL;
4605         int ret = 0;
4606         struct extent_buffer *eb;
4607         int slot;
4608         struct btrfs_root_item root_item;
4609         u32 item_size;
4610         struct btrfs_trans_handle *trans = NULL;
4611         bool closing = false;
4612
4613         path = btrfs_alloc_path();
4614         if (!path) {
4615                 ret = -ENOMEM;
4616                 goto out;
4617         }
4618
4619         key.objectid = 0;
4620         key.type = BTRFS_ROOT_ITEM_KEY;
4621         key.offset = 0;
4622
4623         while (1) {
4624                 if (btrfs_fs_closing(fs_info)) {
4625                         closing = true;
4626                         break;
4627                 }
4628                 ret = btrfs_search_forward(root, &key, path,
4629                                 BTRFS_OLDEST_GENERATION);
4630                 if (ret) {
4631                         if (ret > 0)
4632                                 ret = 0;
4633                         break;
4634                 }
4635
4636                 if (key.type != BTRFS_ROOT_ITEM_KEY ||
4637                     (key.objectid < BTRFS_FIRST_FREE_OBJECTID &&
4638                      key.objectid != BTRFS_FS_TREE_OBJECTID) ||
4639                     key.objectid > BTRFS_LAST_FREE_OBJECTID)
4640                         goto skip;
4641
4642                 eb = path->nodes[0];
4643                 slot = path->slots[0];
4644                 item_size = btrfs_item_size_nr(eb, slot);
4645                 if (item_size < sizeof(root_item))
4646                         goto skip;
4647
4648                 read_extent_buffer(eb, &root_item,
4649                                    btrfs_item_ptr_offset(eb, slot),
4650                                    (int)sizeof(root_item));
4651                 if (btrfs_root_refs(&root_item) == 0)
4652                         goto skip;
4653
4654                 if (!btrfs_is_empty_uuid(root_item.uuid) ||
4655                     !btrfs_is_empty_uuid(root_item.received_uuid)) {
4656                         if (trans)
4657                                 goto update_tree;
4658
4659                         btrfs_release_path(path);
4660                         /*
4661                          * 1 - subvol uuid item
4662                          * 1 - received_subvol uuid item
4663                          */
4664                         trans = btrfs_start_transaction(fs_info->uuid_root, 2);
4665                         if (IS_ERR(trans)) {
4666                                 ret = PTR_ERR(trans);
4667                                 break;
4668                         }
4669                         continue;
4670                 } else {
4671                         goto skip;
4672                 }
4673 update_tree:
4674                 btrfs_release_path(path);
4675                 if (!btrfs_is_empty_uuid(root_item.uuid)) {
4676                         ret = btrfs_uuid_tree_add(trans, root_item.uuid,
4677                                                   BTRFS_UUID_KEY_SUBVOL,
4678                                                   key.objectid);
4679                         if (ret < 0) {
4680                                 btrfs_warn(fs_info, "uuid_tree_add failed %d",
4681                                         ret);
4682                                 break;
4683                         }
4684                 }
4685
4686                 if (!btrfs_is_empty_uuid(root_item.received_uuid)) {
4687                         ret = btrfs_uuid_tree_add(trans,
4688                                                   root_item.received_uuid,
4689                                                  BTRFS_UUID_KEY_RECEIVED_SUBVOL,
4690                                                   key.objectid);
4691                         if (ret < 0) {
4692                                 btrfs_warn(fs_info, "uuid_tree_add failed %d",
4693                                         ret);
4694                                 break;
4695                         }
4696                 }
4697
4698 skip:
4699                 btrfs_release_path(path);
4700                 if (trans) {
4701                         ret = btrfs_end_transaction(trans);
4702                         trans = NULL;
4703                         if (ret)
4704                                 break;
4705                 }
4706
4707                 if (key.offset < (u64)-1) {
4708                         key.offset++;
4709                 } else if (key.type < BTRFS_ROOT_ITEM_KEY) {
4710                         key.offset = 0;
4711                         key.type = BTRFS_ROOT_ITEM_KEY;
4712                 } else if (key.objectid < (u64)-1) {
4713                         key.offset = 0;
4714                         key.type = BTRFS_ROOT_ITEM_KEY;
4715                         key.objectid++;
4716                 } else {
4717                         break;
4718                 }
4719                 cond_resched();
4720         }
4721
4722 out:
4723         btrfs_free_path(path);
4724         if (trans && !IS_ERR(trans))
4725                 btrfs_end_transaction(trans);
4726         if (ret)
4727                 btrfs_warn(fs_info, "btrfs_uuid_scan_kthread failed %d", ret);
4728         else if (!closing)
4729                 set_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags);
4730         up(&fs_info->uuid_tree_rescan_sem);
4731         return 0;
4732 }
4733
4734 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info)
4735 {
4736         struct btrfs_trans_handle *trans;
4737         struct btrfs_root *tree_root = fs_info->tree_root;
4738         struct btrfs_root *uuid_root;
4739         struct task_struct *task;
4740         int ret;
4741
4742         /*
4743          * 1 - root node
4744          * 1 - root item
4745          */
4746         trans = btrfs_start_transaction(tree_root, 2);
4747         if (IS_ERR(trans))
4748                 return PTR_ERR(trans);
4749
4750         uuid_root = btrfs_create_tree(trans, BTRFS_UUID_TREE_OBJECTID);
4751         if (IS_ERR(uuid_root)) {
4752                 ret = PTR_ERR(uuid_root);
4753                 btrfs_abort_transaction(trans, ret);
4754                 btrfs_end_transaction(trans);
4755                 return ret;
4756         }
4757
4758         fs_info->uuid_root = uuid_root;
4759
4760         ret = btrfs_commit_transaction(trans);
4761         if (ret)
4762                 return ret;
4763
4764         down(&fs_info->uuid_tree_rescan_sem);
4765         task = kthread_run(btrfs_uuid_scan_kthread, fs_info, "btrfs-uuid");
4766         if (IS_ERR(task)) {
4767                 /* fs_info->update_uuid_tree_gen remains 0 in all error case */
4768                 btrfs_warn(fs_info, "failed to start uuid_scan task");
4769                 up(&fs_info->uuid_tree_rescan_sem);
4770                 return PTR_ERR(task);
4771         }
4772
4773         return 0;
4774 }
4775
4776 /*
4777  * shrinking a device means finding all of the device extents past
4778  * the new size, and then following the back refs to the chunks.
4779  * The chunk relocation code actually frees the device extent
4780  */
4781 int btrfs_shrink_device(struct btrfs_device *device, u64 new_size)
4782 {
4783         struct btrfs_fs_info *fs_info = device->fs_info;
4784         struct btrfs_root *root = fs_info->dev_root;
4785         struct btrfs_trans_handle *trans;
4786         struct btrfs_dev_extent *dev_extent = NULL;
4787         struct btrfs_path *path;
4788         u64 length;
4789         u64 chunk_offset;
4790         int ret;
4791         int slot;
4792         int failed = 0;
4793         bool retried = false;
4794         struct extent_buffer *l;
4795         struct btrfs_key key;
4796         struct btrfs_super_block *super_copy = fs_info->super_copy;
4797         u64 old_total = btrfs_super_total_bytes(super_copy);
4798         u64 old_size = btrfs_device_get_total_bytes(device);
4799         u64 diff;
4800         u64 start;
4801
4802         new_size = round_down(new_size, fs_info->sectorsize);
4803         start = new_size;
4804         diff = round_down(old_size - new_size, fs_info->sectorsize);
4805
4806         if (test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state))
4807                 return -EINVAL;
4808
4809         path = btrfs_alloc_path();
4810         if (!path)
4811                 return -ENOMEM;
4812
4813         path->reada = READA_BACK;
4814
4815         trans = btrfs_start_transaction(root, 0);
4816         if (IS_ERR(trans)) {
4817                 btrfs_free_path(path);
4818                 return PTR_ERR(trans);
4819         }
4820
4821         mutex_lock(&fs_info->chunk_mutex);
4822
4823         btrfs_device_set_total_bytes(device, new_size);
4824         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
4825                 device->fs_devices->total_rw_bytes -= diff;
4826                 atomic64_sub(diff, &fs_info->free_chunk_space);
4827         }
4828
4829         /*
4830          * Once the device's size has been set to the new size, ensure all
4831          * in-memory chunks are synced to disk so that the loop below sees them
4832          * and relocates them accordingly.
4833          */
4834         if (contains_pending_extent(device, &start, diff)) {
4835                 mutex_unlock(&fs_info->chunk_mutex);
4836                 ret = btrfs_commit_transaction(trans);
4837                 if (ret)
4838                         goto done;
4839         } else {
4840                 mutex_unlock(&fs_info->chunk_mutex);
4841                 btrfs_end_transaction(trans);
4842         }
4843
4844 again:
4845         key.objectid = device->devid;
4846         key.offset = (u64)-1;
4847         key.type = BTRFS_DEV_EXTENT_KEY;
4848
4849         do {
4850                 mutex_lock(&fs_info->reclaim_bgs_lock);
4851                 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4852                 if (ret < 0) {
4853                         mutex_unlock(&fs_info->reclaim_bgs_lock);
4854                         goto done;
4855                 }
4856
4857                 ret = btrfs_previous_item(root, path, 0, key.type);
4858                 if (ret) {
4859                         mutex_unlock(&fs_info->reclaim_bgs_lock);
4860                         if (ret < 0)
4861                                 goto done;
4862                         ret = 0;
4863                         btrfs_release_path(path);
4864                         break;
4865                 }
4866
4867                 l = path->nodes[0];
4868                 slot = path->slots[0];
4869                 btrfs_item_key_to_cpu(l, &key, path->slots[0]);
4870
4871                 if (key.objectid != device->devid) {
4872                         mutex_unlock(&fs_info->reclaim_bgs_lock);
4873                         btrfs_release_path(path);
4874                         break;
4875                 }
4876
4877                 dev_extent = btrfs_item_ptr(l, slot, struct btrfs_dev_extent);
4878                 length = btrfs_dev_extent_length(l, dev_extent);
4879
4880                 if (key.offset + length <= new_size) {
4881                         mutex_unlock(&fs_info->reclaim_bgs_lock);
4882                         btrfs_release_path(path);
4883                         break;
4884                 }
4885
4886                 chunk_offset = btrfs_dev_extent_chunk_offset(l, dev_extent);
4887                 btrfs_release_path(path);
4888
4889                 /*
4890                  * We may be relocating the only data chunk we have,
4891                  * which could potentially end up with losing data's
4892                  * raid profile, so lets allocate an empty one in
4893                  * advance.
4894                  */
4895                 ret = btrfs_may_alloc_data_chunk(fs_info, chunk_offset);
4896                 if (ret < 0) {
4897                         mutex_unlock(&fs_info->reclaim_bgs_lock);
4898                         goto done;
4899                 }
4900
4901                 ret = btrfs_relocate_chunk(fs_info, chunk_offset);
4902                 mutex_unlock(&fs_info->reclaim_bgs_lock);
4903                 if (ret == -ENOSPC) {
4904                         failed++;
4905                 } else if (ret) {
4906                         if (ret == -ETXTBSY) {
4907                                 btrfs_warn(fs_info,
4908                    "could not shrink block group %llu due to active swapfile",
4909                                            chunk_offset);
4910                         }
4911                         goto done;
4912                 }
4913         } while (key.offset-- > 0);
4914
4915         if (failed && !retried) {
4916                 failed = 0;
4917                 retried = true;
4918                 goto again;
4919         } else if (failed && retried) {
4920                 ret = -ENOSPC;
4921                 goto done;
4922         }
4923
4924         /* Shrinking succeeded, else we would be at "done". */
4925         trans = btrfs_start_transaction(root, 0);
4926         if (IS_ERR(trans)) {
4927                 ret = PTR_ERR(trans);
4928                 goto done;
4929         }
4930
4931         mutex_lock(&fs_info->chunk_mutex);
4932         /* Clear all state bits beyond the shrunk device size */
4933         clear_extent_bits(&device->alloc_state, new_size, (u64)-1,
4934                           CHUNK_STATE_MASK);
4935
4936         btrfs_device_set_disk_total_bytes(device, new_size);
4937         if (list_empty(&device->post_commit_list))
4938                 list_add_tail(&device->post_commit_list,
4939                               &trans->transaction->dev_update_list);
4940
4941         WARN_ON(diff > old_total);
4942         btrfs_set_super_total_bytes(super_copy,
4943                         round_down(old_total - diff, fs_info->sectorsize));
4944         mutex_unlock(&fs_info->chunk_mutex);
4945
4946         btrfs_reserve_chunk_metadata(trans, false);
4947         /* Now btrfs_update_device() will change the on-disk size. */
4948         ret = btrfs_update_device(trans, device);
4949         btrfs_trans_release_chunk_metadata(trans);
4950         if (ret < 0) {
4951                 btrfs_abort_transaction(trans, ret);
4952                 btrfs_end_transaction(trans);
4953         } else {
4954                 ret = btrfs_commit_transaction(trans);
4955         }
4956 done:
4957         btrfs_free_path(path);
4958         if (ret) {
4959                 mutex_lock(&fs_info->chunk_mutex);
4960                 btrfs_device_set_total_bytes(device, old_size);
4961                 if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state))
4962                         device->fs_devices->total_rw_bytes += diff;
4963                 atomic64_add(diff, &fs_info->free_chunk_space);
4964                 mutex_unlock(&fs_info->chunk_mutex);
4965         }
4966         return ret;
4967 }
4968
4969 static int btrfs_add_system_chunk(struct btrfs_fs_info *fs_info,
4970                            struct btrfs_key *key,
4971                            struct btrfs_chunk *chunk, int item_size)
4972 {
4973         struct btrfs_super_block *super_copy = fs_info->super_copy;
4974         struct btrfs_disk_key disk_key;
4975         u32 array_size;
4976         u8 *ptr;
4977
4978         lockdep_assert_held(&fs_info->chunk_mutex);
4979
4980         array_size = btrfs_super_sys_array_size(super_copy);
4981         if (array_size + item_size + sizeof(disk_key)
4982                         > BTRFS_SYSTEM_CHUNK_ARRAY_SIZE)
4983                 return -EFBIG;
4984
4985         ptr = super_copy->sys_chunk_array + array_size;
4986         btrfs_cpu_key_to_disk(&disk_key, key);
4987         memcpy(ptr, &disk_key, sizeof(disk_key));
4988         ptr += sizeof(disk_key);
4989         memcpy(ptr, chunk, item_size);
4990         item_size += sizeof(disk_key);
4991         btrfs_set_super_sys_array_size(super_copy, array_size + item_size);
4992
4993         return 0;
4994 }
4995
4996 /*
4997  * sort the devices in descending order by max_avail, total_avail
4998  */
4999 static int btrfs_cmp_device_info(const void *a, const void *b)
5000 {
5001         const struct btrfs_device_info *di_a = a;
5002         const struct btrfs_device_info *di_b = b;
5003
5004         if (di_a->max_avail > di_b->max_avail)
5005                 return -1;
5006         if (di_a->max_avail < di_b->max_avail)
5007                 return 1;
5008         if (di_a->total_avail > di_b->total_avail)
5009                 return -1;
5010         if (di_a->total_avail < di_b->total_avail)
5011                 return 1;
5012         return 0;
5013 }
5014
5015 static void check_raid56_incompat_flag(struct btrfs_fs_info *info, u64 type)
5016 {
5017         if (!(type & BTRFS_BLOCK_GROUP_RAID56_MASK))
5018                 return;
5019
5020         btrfs_set_fs_incompat(info, RAID56);
5021 }
5022
5023 static void check_raid1c34_incompat_flag(struct btrfs_fs_info *info, u64 type)
5024 {
5025         if (!(type & (BTRFS_BLOCK_GROUP_RAID1C3 | BTRFS_BLOCK_GROUP_RAID1C4)))
5026                 return;
5027
5028         btrfs_set_fs_incompat(info, RAID1C34);
5029 }
5030
5031 /*
5032  * Structure used internally for btrfs_create_chunk() function.
5033  * Wraps needed parameters.
5034  */
5035 struct alloc_chunk_ctl {
5036         u64 start;
5037         u64 type;
5038         /* Total number of stripes to allocate */
5039         int num_stripes;
5040         /* sub_stripes info for map */
5041         int sub_stripes;
5042         /* Stripes per device */
5043         int dev_stripes;
5044         /* Maximum number of devices to use */
5045         int devs_max;
5046         /* Minimum number of devices to use */
5047         int devs_min;
5048         /* ndevs has to be a multiple of this */
5049         int devs_increment;
5050         /* Number of copies */
5051         int ncopies;
5052         /* Number of stripes worth of bytes to store parity information */
5053         int nparity;
5054         u64 max_stripe_size;
5055         u64 max_chunk_size;
5056         u64 dev_extent_min;
5057         u64 stripe_size;
5058         u64 chunk_size;
5059         int ndevs;
5060 };
5061
5062 static void init_alloc_chunk_ctl_policy_regular(
5063                                 struct btrfs_fs_devices *fs_devices,
5064                                 struct alloc_chunk_ctl *ctl)
5065 {
5066         u64 type = ctl->type;
5067
5068         if (type & BTRFS_BLOCK_GROUP_DATA) {
5069                 ctl->max_stripe_size = SZ_1G;
5070                 ctl->max_chunk_size = BTRFS_MAX_DATA_CHUNK_SIZE;
5071         } else if (type & BTRFS_BLOCK_GROUP_METADATA) {
5072                 /* For larger filesystems, use larger metadata chunks */
5073                 if (fs_devices->total_rw_bytes > 50ULL * SZ_1G)
5074                         ctl->max_stripe_size = SZ_1G;
5075                 else
5076                         ctl->max_stripe_size = SZ_256M;
5077                 ctl->max_chunk_size = ctl->max_stripe_size;
5078         } else if (type & BTRFS_BLOCK_GROUP_SYSTEM) {
5079                 ctl->max_stripe_size = SZ_32M;
5080                 ctl->max_chunk_size = 2 * ctl->max_stripe_size;
5081                 ctl->devs_max = min_t(int, ctl->devs_max,
5082                                       BTRFS_MAX_DEVS_SYS_CHUNK);
5083         } else {
5084                 BUG();
5085         }
5086
5087         /* We don't want a chunk larger than 10% of writable space */
5088         ctl->max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1),
5089                                   ctl->max_chunk_size);
5090         ctl->dev_extent_min = BTRFS_STRIPE_LEN * ctl->dev_stripes;
5091 }
5092
5093 static void init_alloc_chunk_ctl_policy_zoned(
5094                                       struct btrfs_fs_devices *fs_devices,
5095                                       struct alloc_chunk_ctl *ctl)
5096 {
5097         u64 zone_size = fs_devices->fs_info->zone_size;
5098         u64 limit;
5099         int min_num_stripes = ctl->devs_min * ctl->dev_stripes;
5100         int min_data_stripes = (min_num_stripes - ctl->nparity) / ctl->ncopies;
5101         u64 min_chunk_size = min_data_stripes * zone_size;
5102         u64 type = ctl->type;
5103
5104         ctl->max_stripe_size = zone_size;
5105         if (type & BTRFS_BLOCK_GROUP_DATA) {
5106                 ctl->max_chunk_size = round_down(BTRFS_MAX_DATA_CHUNK_SIZE,
5107                                                  zone_size);
5108         } else if (type & BTRFS_BLOCK_GROUP_METADATA) {
5109                 ctl->max_chunk_size = ctl->max_stripe_size;
5110         } else if (type & BTRFS_BLOCK_GROUP_SYSTEM) {
5111                 ctl->max_chunk_size = 2 * ctl->max_stripe_size;
5112                 ctl->devs_max = min_t(int, ctl->devs_max,
5113                                       BTRFS_MAX_DEVS_SYS_CHUNK);
5114         } else {
5115                 BUG();
5116         }
5117
5118         /* We don't want a chunk larger than 10% of writable space */
5119         limit = max(round_down(div_factor(fs_devices->total_rw_bytes, 1),
5120                                zone_size),
5121                     min_chunk_size);
5122         ctl->max_chunk_size = min(limit, ctl->max_chunk_size);
5123         ctl->dev_extent_min = zone_size * ctl->dev_stripes;
5124 }
5125
5126 static void init_alloc_chunk_ctl(struct btrfs_fs_devices *fs_devices,
5127                                  struct alloc_chunk_ctl *ctl)
5128 {
5129         int index = btrfs_bg_flags_to_raid_index(ctl->type);
5130
5131         ctl->sub_stripes = btrfs_raid_array[index].sub_stripes;
5132         ctl->dev_stripes = btrfs_raid_array[index].dev_stripes;
5133         ctl->devs_max = btrfs_raid_array[index].devs_max;
5134         if (!ctl->devs_max)
5135                 ctl->devs_max = BTRFS_MAX_DEVS(fs_devices->fs_info);
5136         ctl->devs_min = btrfs_raid_array[index].devs_min;
5137         ctl->devs_increment = btrfs_raid_array[index].devs_increment;
5138         ctl->ncopies = btrfs_raid_array[index].ncopies;
5139         ctl->nparity = btrfs_raid_array[index].nparity;
5140         ctl->ndevs = 0;
5141
5142         switch (fs_devices->chunk_alloc_policy) {
5143         case BTRFS_CHUNK_ALLOC_REGULAR:
5144                 init_alloc_chunk_ctl_policy_regular(fs_devices, ctl);
5145                 break;
5146         case BTRFS_CHUNK_ALLOC_ZONED:
5147                 init_alloc_chunk_ctl_policy_zoned(fs_devices, ctl);
5148                 break;
5149         default:
5150                 BUG();
5151         }
5152 }
5153
5154 static int gather_device_info(struct btrfs_fs_devices *fs_devices,
5155                               struct alloc_chunk_ctl *ctl,
5156                               struct btrfs_device_info *devices_info)
5157 {
5158         struct btrfs_fs_info *info = fs_devices->fs_info;
5159         struct btrfs_device *device;
5160         u64 total_avail;
5161         u64 dev_extent_want = ctl->max_stripe_size * ctl->dev_stripes;
5162         int ret;
5163         int ndevs = 0;
5164         u64 max_avail;
5165         u64 dev_offset;
5166
5167         /*
5168          * in the first pass through the devices list, we gather information
5169          * about the available holes on each device.
5170          */
5171         list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) {
5172                 if (!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
5173                         WARN(1, KERN_ERR
5174                                "BTRFS: read-only device in alloc_list\n");
5175                         continue;
5176                 }
5177
5178                 if (!test_bit(BTRFS_DEV_STATE_IN_FS_METADATA,
5179                                         &device->dev_state) ||
5180                     test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state))
5181                         continue;
5182
5183                 if (device->total_bytes > device->bytes_used)
5184                         total_avail = device->total_bytes - device->bytes_used;
5185                 else
5186                         total_avail = 0;
5187
5188                 /* If there is no space on this device, skip it. */
5189                 if (total_avail < ctl->dev_extent_min)
5190                         continue;
5191
5192                 ret = find_free_dev_extent(device, dev_extent_want, &dev_offset,
5193                                            &max_avail);
5194                 if (ret && ret != -ENOSPC)
5195                         return ret;
5196
5197                 if (ret == 0)
5198                         max_avail = dev_extent_want;
5199
5200                 if (max_avail < ctl->dev_extent_min) {
5201                         if (btrfs_test_opt(info, ENOSPC_DEBUG))
5202                                 btrfs_debug(info,
5203                         "%s: devid %llu has no free space, have=%llu want=%llu",
5204                                             __func__, device->devid, max_avail,
5205                                             ctl->dev_extent_min);
5206                         continue;
5207                 }
5208
5209                 if (ndevs == fs_devices->rw_devices) {
5210                         WARN(1, "%s: found more than %llu devices\n",
5211                              __func__, fs_devices->rw_devices);
5212                         break;
5213                 }
5214                 devices_info[ndevs].dev_offset = dev_offset;
5215                 devices_info[ndevs].max_avail = max_avail;
5216                 devices_info[ndevs].total_avail = total_avail;
5217                 devices_info[ndevs].dev = device;
5218                 ++ndevs;
5219         }
5220         ctl->ndevs = ndevs;
5221
5222         /*
5223          * now sort the devices by hole size / available space
5224          */
5225         sort(devices_info, ndevs, sizeof(struct btrfs_device_info),
5226              btrfs_cmp_device_info, NULL);
5227
5228         return 0;
5229 }
5230
5231 static int decide_stripe_size_regular(struct alloc_chunk_ctl *ctl,
5232                                       struct btrfs_device_info *devices_info)
5233 {
5234         /* Number of stripes that count for block group size */
5235         int data_stripes;
5236
5237         /*
5238          * The primary goal is to maximize the number of stripes, so use as
5239          * many devices as possible, even if the stripes are not maximum sized.
5240          *
5241          * The DUP profile stores more than one stripe per device, the
5242          * max_avail is the total size so we have to adjust.
5243          */
5244         ctl->stripe_size = div_u64(devices_info[ctl->ndevs - 1].max_avail,
5245                                    ctl->dev_stripes);
5246         ctl->num_stripes = ctl->ndevs * ctl->dev_stripes;
5247
5248         /* This will have to be fixed for RAID1 and RAID10 over more drives */
5249         data_stripes = (ctl->num_stripes - ctl->nparity) / ctl->ncopies;
5250
5251         /*
5252          * Use the number of data stripes to figure out how big this chunk is
5253          * really going to be in terms of logical address space, and compare
5254          * that answer with the max chunk size. If it's higher, we try to
5255          * reduce stripe_size.
5256          */
5257         if (ctl->stripe_size * data_stripes > ctl->max_chunk_size) {
5258                 /*
5259                  * Reduce stripe_size, round it up to a 16MB boundary again and
5260                  * then use it, unless it ends up being even bigger than the
5261                  * previous value we had already.
5262                  */
5263                 ctl->stripe_size = min(round_up(div_u64(ctl->max_chunk_size,
5264                                                         data_stripes), SZ_16M),
5265                                        ctl->stripe_size);
5266         }
5267
5268         /* Align to BTRFS_STRIPE_LEN */
5269         ctl->stripe_size = round_down(ctl->stripe_size, BTRFS_STRIPE_LEN);
5270         ctl->chunk_size = ctl->stripe_size * data_stripes;
5271
5272         return 0;
5273 }
5274
5275 static int decide_stripe_size_zoned(struct alloc_chunk_ctl *ctl,
5276                                     struct btrfs_device_info *devices_info)
5277 {
5278         u64 zone_size = devices_info[0].dev->zone_info->zone_size;
5279         /* Number of stripes that count for block group size */
5280         int data_stripes;
5281
5282         /*
5283          * It should hold because:
5284          *    dev_extent_min == dev_extent_want == zone_size * dev_stripes
5285          */
5286         ASSERT(devices_info[ctl->ndevs - 1].max_avail == ctl->dev_extent_min);
5287
5288         ctl->stripe_size = zone_size;
5289         ctl->num_stripes = ctl->ndevs * ctl->dev_stripes;
5290         data_stripes = (ctl->num_stripes - ctl->nparity) / ctl->ncopies;
5291
5292         /* stripe_size is fixed in zoned filesysmte. Reduce ndevs instead. */
5293         if (ctl->stripe_size * data_stripes > ctl->max_chunk_size) {
5294                 ctl->ndevs = div_u64(div_u64(ctl->max_chunk_size * ctl->ncopies,
5295                                              ctl->stripe_size) + ctl->nparity,
5296                                      ctl->dev_stripes);
5297                 ctl->num_stripes = ctl->ndevs * ctl->dev_stripes;
5298                 data_stripes = (ctl->num_stripes - ctl->nparity) / ctl->ncopies;
5299                 ASSERT(ctl->stripe_size * data_stripes <= ctl->max_chunk_size);
5300         }
5301
5302         ctl->chunk_size = ctl->stripe_size * data_stripes;
5303
5304         return 0;
5305 }
5306
5307 static int decide_stripe_size(struct btrfs_fs_devices *fs_devices,
5308                               struct alloc_chunk_ctl *ctl,
5309                               struct btrfs_device_info *devices_info)
5310 {
5311         struct btrfs_fs_info *info = fs_devices->fs_info;
5312
5313         /*
5314          * Round down to number of usable stripes, devs_increment can be any
5315          * number so we can't use round_down() that requires power of 2, while
5316          * rounddown is safe.
5317          */
5318         ctl->ndevs = rounddown(ctl->ndevs, ctl->devs_increment);
5319
5320         if (ctl->ndevs < ctl->devs_min) {
5321                 if (btrfs_test_opt(info, ENOSPC_DEBUG)) {
5322                         btrfs_debug(info,
5323         "%s: not enough devices with free space: have=%d minimum required=%d",
5324                                     __func__, ctl->ndevs, ctl->devs_min);
5325                 }
5326                 return -ENOSPC;
5327         }
5328
5329         ctl->ndevs = min(ctl->ndevs, ctl->devs_max);
5330
5331         switch (fs_devices->chunk_alloc_policy) {
5332         case BTRFS_CHUNK_ALLOC_REGULAR:
5333                 return decide_stripe_size_regular(ctl, devices_info);
5334         case BTRFS_CHUNK_ALLOC_ZONED:
5335                 return decide_stripe_size_zoned(ctl, devices_info);
5336         default:
5337                 BUG();
5338         }
5339 }
5340
5341 static struct btrfs_block_group *create_chunk(struct btrfs_trans_handle *trans,
5342                         struct alloc_chunk_ctl *ctl,
5343                         struct btrfs_device_info *devices_info)
5344 {
5345         struct btrfs_fs_info *info = trans->fs_info;
5346         struct map_lookup *map = NULL;
5347         struct extent_map_tree *em_tree;
5348         struct btrfs_block_group *block_group;
5349         struct extent_map *em;
5350         u64 start = ctl->start;
5351         u64 type = ctl->type;
5352         int ret;
5353         int i;
5354         int j;
5355
5356         map = kmalloc(map_lookup_size(ctl->num_stripes), GFP_NOFS);
5357         if (!map)
5358                 return ERR_PTR(-ENOMEM);
5359         map->num_stripes = ctl->num_stripes;
5360
5361         for (i = 0; i < ctl->ndevs; ++i) {
5362                 for (j = 0; j < ctl->dev_stripes; ++j) {
5363                         int s = i * ctl->dev_stripes + j;
5364                         map->stripes[s].dev = devices_info[i].dev;
5365                         map->stripes[s].physical = devices_info[i].dev_offset +
5366                                                    j * ctl->stripe_size;
5367                 }
5368         }
5369         map->stripe_len = BTRFS_STRIPE_LEN;
5370         map->io_align = BTRFS_STRIPE_LEN;
5371         map->io_width = BTRFS_STRIPE_LEN;
5372         map->type = type;
5373         map->sub_stripes = ctl->sub_stripes;
5374
5375         trace_btrfs_chunk_alloc(info, map, start, ctl->chunk_size);
5376
5377         em = alloc_extent_map();
5378         if (!em) {
5379                 kfree(map);
5380                 return ERR_PTR(-ENOMEM);
5381         }
5382         set_bit(EXTENT_FLAG_FS_MAPPING, &em->flags);
5383         em->map_lookup = map;
5384         em->start = start;
5385         em->len = ctl->chunk_size;
5386         em->block_start = 0;
5387         em->block_len = em->len;
5388         em->orig_block_len = ctl->stripe_size;
5389
5390         em_tree = &info->mapping_tree;
5391         write_lock(&em_tree->lock);
5392         ret = add_extent_mapping(em_tree, em, 0);
5393         if (ret) {
5394                 write_unlock(&em_tree->lock);
5395                 free_extent_map(em);
5396                 return ERR_PTR(ret);
5397         }
5398         write_unlock(&em_tree->lock);
5399
5400         block_group = btrfs_make_block_group(trans, 0, type, start, ctl->chunk_size);
5401         if (IS_ERR(block_group))
5402                 goto error_del_extent;
5403
5404         for (i = 0; i < map->num_stripes; i++) {
5405                 struct btrfs_device *dev = map->stripes[i].dev;
5406
5407                 btrfs_device_set_bytes_used(dev,
5408                                             dev->bytes_used + ctl->stripe_size);
5409                 if (list_empty(&dev->post_commit_list))
5410                         list_add_tail(&dev->post_commit_list,
5411                                       &trans->transaction->dev_update_list);
5412         }
5413
5414         atomic64_sub(ctl->stripe_size * map->num_stripes,
5415                      &info->free_chunk_space);
5416
5417         free_extent_map(em);
5418         check_raid56_incompat_flag(info, type);
5419         check_raid1c34_incompat_flag(info, type);
5420
5421         return block_group;
5422
5423 error_del_extent:
5424         write_lock(&em_tree->lock);
5425         remove_extent_mapping(em_tree, em);
5426         write_unlock(&em_tree->lock);
5427
5428         /* One for our allocation */
5429         free_extent_map(em);
5430         /* One for the tree reference */
5431         free_extent_map(em);
5432
5433         return block_group;
5434 }
5435
5436 struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans,
5437                                             u64 type)
5438 {
5439         struct btrfs_fs_info *info = trans->fs_info;
5440         struct btrfs_fs_devices *fs_devices = info->fs_devices;
5441         struct btrfs_device_info *devices_info = NULL;
5442         struct alloc_chunk_ctl ctl;
5443         struct btrfs_block_group *block_group;
5444         int ret;
5445
5446         lockdep_assert_held(&info->chunk_mutex);
5447
5448         if (!alloc_profile_is_valid(type, 0)) {
5449                 ASSERT(0);
5450                 return ERR_PTR(-EINVAL);
5451         }
5452
5453         if (list_empty(&fs_devices->alloc_list)) {
5454                 if (btrfs_test_opt(info, ENOSPC_DEBUG))
5455                         btrfs_debug(info, "%s: no writable device", __func__);
5456                 return ERR_PTR(-ENOSPC);
5457         }
5458
5459         if (!(type & BTRFS_BLOCK_GROUP_TYPE_MASK)) {
5460                 btrfs_err(info, "invalid chunk type 0x%llx requested", type);
5461                 ASSERT(0);
5462                 return ERR_PTR(-EINVAL);
5463         }
5464
5465         ctl.start = find_next_chunk(info);
5466         ctl.type = type;
5467         init_alloc_chunk_ctl(fs_devices, &ctl);
5468
5469         devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info),
5470                                GFP_NOFS);
5471         if (!devices_info)
5472                 return ERR_PTR(-ENOMEM);
5473
5474         ret = gather_device_info(fs_devices, &ctl, devices_info);
5475         if (ret < 0) {
5476                 block_group = ERR_PTR(ret);
5477                 goto out;
5478         }
5479
5480         ret = decide_stripe_size(fs_devices, &ctl, devices_info);
5481         if (ret < 0) {
5482                 block_group = ERR_PTR(ret);
5483                 goto out;
5484         }
5485
5486         block_group = create_chunk(trans, &ctl, devices_info);
5487
5488 out:
5489         kfree(devices_info);
5490         return block_group;
5491 }
5492
5493 /*
5494  * This function, btrfs_chunk_alloc_add_chunk_item(), typically belongs to the
5495  * phase 1 of chunk allocation. It belongs to phase 2 only when allocating system
5496  * chunks.
5497  *
5498  * See the comment at btrfs_chunk_alloc() for details about the chunk allocation
5499  * phases.
5500  */
5501 int btrfs_chunk_alloc_add_chunk_item(struct btrfs_trans_handle *trans,
5502                                      struct btrfs_block_group *bg)
5503 {
5504         struct btrfs_fs_info *fs_info = trans->fs_info;
5505         struct btrfs_root *extent_root = fs_info->extent_root;
5506         struct btrfs_root *chunk_root = fs_info->chunk_root;
5507         struct btrfs_key key;
5508         struct btrfs_chunk *chunk;
5509         struct btrfs_stripe *stripe;
5510         struct extent_map *em;
5511         struct map_lookup *map;
5512         size_t item_size;
5513         int i;
5514         int ret;
5515
5516         /*
5517          * We take the chunk_mutex for 2 reasons:
5518          *
5519          * 1) Updates and insertions in the chunk btree must be done while holding
5520          *    the chunk_mutex, as well as updating the system chunk array in the
5521          *    superblock. See the comment on top of btrfs_chunk_alloc() for the
5522          *    details;
5523          *
5524          * 2) To prevent races with the final phase of a device replace operation
5525          *    that replaces the device object associated with the map's stripes,
5526          *    because the device object's id can change at any time during that
5527          *    final phase of the device replace operation
5528          *    (dev-replace.c:btrfs_dev_replace_finishing()), so we could grab the
5529          *    replaced device and then see it with an ID of BTRFS_DEV_REPLACE_DEVID,
5530          *    which would cause a failure when updating the device item, which does
5531          *    not exists, or persisting a stripe of the chunk item with such ID.
5532          *    Here we can't use the device_list_mutex because our caller already
5533          *    has locked the chunk_mutex, and the final phase of device replace
5534          *    acquires both mutexes - first the device_list_mutex and then the
5535          *    chunk_mutex. Using any of those two mutexes protects us from a
5536          *    concurrent device replace.
5537          */
5538         lockdep_assert_held(&fs_info->chunk_mutex);
5539
5540         em = btrfs_get_chunk_map(fs_info, bg->start, bg->length);
5541         if (IS_ERR(em)) {
5542                 ret = PTR_ERR(em);
5543                 btrfs_abort_transaction(trans, ret);
5544                 return ret;
5545         }
5546
5547         map = em->map_lookup;
5548         item_size = btrfs_chunk_item_size(map->num_stripes);
5549
5550         chunk = kzalloc(item_size, GFP_NOFS);
5551         if (!chunk) {
5552                 ret = -ENOMEM;
5553                 btrfs_abort_transaction(trans, ret);
5554                 goto out;
5555         }
5556
5557         for (i = 0; i < map->num_stripes; i++) {
5558                 struct btrfs_device *device = map->stripes[i].dev;
5559
5560                 ret = btrfs_update_device(trans, device);
5561                 if (ret)
5562                         goto out;
5563         }
5564
5565         stripe = &chunk->stripe;
5566         for (i = 0; i < map->num_stripes; i++) {
5567                 struct btrfs_device *device = map->stripes[i].dev;
5568                 const u64 dev_offset = map->stripes[i].physical;
5569
5570                 btrfs_set_stack_stripe_devid(stripe, device->devid);
5571                 btrfs_set_stack_stripe_offset(stripe, dev_offset);
5572                 memcpy(stripe->dev_uuid, device->uuid, BTRFS_UUID_SIZE);
5573                 stripe++;
5574         }
5575
5576         btrfs_set_stack_chunk_length(chunk, bg->length);
5577         btrfs_set_stack_chunk_owner(chunk, extent_root->root_key.objectid);
5578         btrfs_set_stack_chunk_stripe_len(chunk, map->stripe_len);
5579         btrfs_set_stack_chunk_type(chunk, map->type);
5580         btrfs_set_stack_chunk_num_stripes(chunk, map->num_stripes);
5581         btrfs_set_stack_chunk_io_align(chunk, map->stripe_len);
5582         btrfs_set_stack_chunk_io_width(chunk, map->stripe_len);
5583         btrfs_set_stack_chunk_sector_size(chunk, fs_info->sectorsize);
5584         btrfs_set_stack_chunk_sub_stripes(chunk, map->sub_stripes);
5585
5586         key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
5587         key.type = BTRFS_CHUNK_ITEM_KEY;
5588         key.offset = bg->start;
5589
5590         ret = btrfs_insert_item(trans, chunk_root, &key, chunk, item_size);
5591         if (ret)
5592                 goto out;
5593
5594         bg->chunk_item_inserted = 1;
5595
5596         if (map->type & BTRFS_BLOCK_GROUP_SYSTEM) {
5597                 ret = btrfs_add_system_chunk(fs_info, &key, chunk, item_size);
5598                 if (ret)
5599                         goto out;
5600         }
5601
5602 out:
5603         kfree(chunk);
5604         free_extent_map(em);
5605         return ret;
5606 }
5607
5608 static noinline int init_first_rw_device(struct btrfs_trans_handle *trans)
5609 {
5610         struct btrfs_fs_info *fs_info = trans->fs_info;
5611         u64 alloc_profile;
5612         struct btrfs_block_group *meta_bg;
5613         struct btrfs_block_group *sys_bg;
5614
5615         /*
5616          * When adding a new device for sprouting, the seed device is read-only
5617          * so we must first allocate a metadata and a system chunk. But before
5618          * adding the block group items to the extent, device and chunk btrees,
5619          * we must first:
5620          *
5621          * 1) Create both chunks without doing any changes to the btrees, as
5622          *    otherwise we would get -ENOSPC since the block groups from the
5623          *    seed device are read-only;
5624          *
5625          * 2) Add the device item for the new sprout device - finishing the setup
5626          *    of a new block group requires updating the device item in the chunk
5627          *    btree, so it must exist when we attempt to do it. The previous step
5628          *    ensures this does not fail with -ENOSPC.
5629          *
5630          * After that we can add the block group items to their btrees:
5631          * update existing device item in the chunk btree, add a new block group
5632          * item to the extent btree, add a new chunk item to the chunk btree and
5633          * finally add the new device extent items to the devices btree.
5634          */
5635
5636         alloc_profile = btrfs_metadata_alloc_profile(fs_info);
5637         meta_bg = btrfs_create_chunk(trans, alloc_profile);
5638         if (IS_ERR(meta_bg))
5639                 return PTR_ERR(meta_bg);
5640
5641         alloc_profile = btrfs_system_alloc_profile(fs_info);
5642         sys_bg = btrfs_create_chunk(trans, alloc_profile);
5643         if (IS_ERR(sys_bg))
5644                 return PTR_ERR(sys_bg);
5645
5646         return 0;
5647 }
5648
5649 static inline int btrfs_chunk_max_errors(struct map_lookup *map)
5650 {
5651         const int index = btrfs_bg_flags_to_raid_index(map->type);
5652
5653         return btrfs_raid_array[index].tolerated_failures;
5654 }
5655
5656 bool btrfs_chunk_writeable(struct btrfs_fs_info *fs_info, u64 chunk_offset)
5657 {
5658         struct extent_map *em;
5659         struct map_lookup *map;
5660         int miss_ndevs = 0;
5661         int i;
5662         bool ret = true;
5663
5664         em = btrfs_get_chunk_map(fs_info, chunk_offset, 1);
5665         if (IS_ERR(em))
5666                 return false;
5667
5668         map = em->map_lookup;
5669         for (i = 0; i < map->num_stripes; i++) {
5670                 if (test_bit(BTRFS_DEV_STATE_MISSING,
5671                                         &map->stripes[i].dev->dev_state)) {
5672                         miss_ndevs++;
5673                         continue;
5674                 }
5675                 if (!test_bit(BTRFS_DEV_STATE_WRITEABLE,
5676                                         &map->stripes[i].dev->dev_state)) {
5677                         ret = false;
5678                         goto end;
5679                 }
5680         }
5681
5682         /*
5683          * If the number of missing devices is larger than max errors, we can
5684          * not write the data into that chunk successfully.
5685          */
5686         if (miss_ndevs > btrfs_chunk_max_errors(map))
5687                 ret = false;
5688 end:
5689         free_extent_map(em);
5690         return ret;
5691 }
5692
5693 void btrfs_mapping_tree_free(struct extent_map_tree *tree)
5694 {
5695         struct extent_map *em;
5696
5697         while (1) {
5698                 write_lock(&tree->lock);
5699                 em = lookup_extent_mapping(tree, 0, (u64)-1);
5700                 if (em)
5701                         remove_extent_mapping(tree, em);
5702                 write_unlock(&tree->lock);
5703                 if (!em)
5704                         break;
5705                 /* once for us */
5706                 free_extent_map(em);
5707                 /* once for the tree */
5708                 free_extent_map(em);
5709         }
5710 }
5711
5712 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len)
5713 {
5714         struct extent_map *em;
5715         struct map_lookup *map;
5716         int ret;
5717
5718         em = btrfs_get_chunk_map(fs_info, logical, len);
5719         if (IS_ERR(em))
5720                 /*
5721                  * We could return errors for these cases, but that could get
5722                  * ugly and we'd probably do the same thing which is just not do
5723                  * anything else and exit, so return 1 so the callers don't try
5724                  * to use other copies.
5725                  */
5726                 return 1;
5727
5728         map = em->map_lookup;
5729         if (map->type & (BTRFS_BLOCK_GROUP_DUP | BTRFS_BLOCK_GROUP_RAID1_MASK))
5730                 ret = map->num_stripes;
5731         else if (map->type & BTRFS_BLOCK_GROUP_RAID10)
5732                 ret = map->sub_stripes;
5733         else if (map->type & BTRFS_BLOCK_GROUP_RAID5)
5734                 ret = 2;
5735         else if (map->type & BTRFS_BLOCK_GROUP_RAID6)
5736                 /*
5737                  * There could be two corrupted data stripes, we need
5738                  * to loop retry in order to rebuild the correct data.
5739                  *
5740                  * Fail a stripe at a time on every retry except the
5741                  * stripe under reconstruction.
5742                  */
5743                 ret = map->num_stripes;
5744         else
5745                 ret = 1;
5746         free_extent_map(em);
5747
5748         down_read(&fs_info->dev_replace.rwsem);
5749         if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace) &&
5750             fs_info->dev_replace.tgtdev)
5751                 ret++;
5752         up_read(&fs_info->dev_replace.rwsem);
5753
5754         return ret;
5755 }
5756
5757 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info,
5758                                     u64 logical)
5759 {
5760         struct extent_map *em;
5761         struct map_lookup *map;
5762         unsigned long len = fs_info->sectorsize;
5763
5764         em = btrfs_get_chunk_map(fs_info, logical, len);
5765
5766         if (!WARN_ON(IS_ERR(em))) {
5767                 map = em->map_lookup;
5768                 if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK)
5769                         len = map->stripe_len * nr_data_stripes(map);
5770                 free_extent_map(em);
5771         }
5772         return len;
5773 }
5774
5775 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info, u64 logical, u64 len)
5776 {
5777         struct extent_map *em;
5778         struct map_lookup *map;
5779         int ret = 0;
5780
5781         em = btrfs_get_chunk_map(fs_info, logical, len);
5782
5783         if(!WARN_ON(IS_ERR(em))) {
5784                 map = em->map_lookup;
5785                 if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK)
5786                         ret = 1;
5787                 free_extent_map(em);
5788         }
5789         return ret;
5790 }
5791
5792 static int find_live_mirror(struct btrfs_fs_info *fs_info,
5793                             struct map_lookup *map, int first,
5794                             int dev_replace_is_ongoing)
5795 {
5796         int i;
5797         int num_stripes;
5798         int preferred_mirror;
5799         int tolerance;
5800         struct btrfs_device *srcdev;
5801
5802         ASSERT((map->type &
5803                  (BTRFS_BLOCK_GROUP_RAID1_MASK | BTRFS_BLOCK_GROUP_RAID10)));
5804
5805         if (map->type & BTRFS_BLOCK_GROUP_RAID10)
5806                 num_stripes = map->sub_stripes;
5807         else
5808                 num_stripes = map->num_stripes;
5809
5810         switch (fs_info->fs_devices->read_policy) {
5811         default:
5812                 /* Shouldn't happen, just warn and use pid instead of failing */
5813                 btrfs_warn_rl(fs_info,
5814                               "unknown read_policy type %u, reset to pid",
5815                               fs_info->fs_devices->read_policy);
5816                 fs_info->fs_devices->read_policy = BTRFS_READ_POLICY_PID;
5817                 fallthrough;
5818         case BTRFS_READ_POLICY_PID:
5819                 preferred_mirror = first + (current->pid % num_stripes);
5820                 break;
5821         }
5822
5823         if (dev_replace_is_ongoing &&
5824             fs_info->dev_replace.cont_reading_from_srcdev_mode ==
5825              BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID)
5826                 srcdev = fs_info->dev_replace.srcdev;
5827         else
5828                 srcdev = NULL;
5829
5830         /*
5831          * try to avoid the drive that is the source drive for a
5832          * dev-replace procedure, only choose it if no other non-missing
5833          * mirror is available
5834          */
5835         for (tolerance = 0; tolerance < 2; tolerance++) {
5836                 if (map->stripes[preferred_mirror].dev->bdev &&
5837                     (tolerance || map->stripes[preferred_mirror].dev != srcdev))
5838                         return preferred_mirror;
5839                 for (i = first; i < first + num_stripes; i++) {
5840                         if (map->stripes[i].dev->bdev &&
5841                             (tolerance || map->stripes[i].dev != srcdev))
5842                                 return i;
5843                 }
5844         }
5845
5846         /* we couldn't find one that doesn't fail.  Just return something
5847          * and the io error handling code will clean up eventually
5848          */
5849         return preferred_mirror;
5850 }
5851
5852 /* Bubble-sort the stripe set to put the parity/syndrome stripes last */
5853 static void sort_parity_stripes(struct btrfs_io_context *bioc, int num_stripes)
5854 {
5855         int i;
5856         int again = 1;
5857
5858         while (again) {
5859                 again = 0;
5860                 for (i = 0; i < num_stripes - 1; i++) {
5861                         /* Swap if parity is on a smaller index */
5862                         if (bioc->raid_map[i] > bioc->raid_map[i + 1]) {
5863                                 swap(bioc->stripes[i], bioc->stripes[i + 1]);
5864                                 swap(bioc->raid_map[i], bioc->raid_map[i + 1]);
5865                                 again = 1;
5866                         }
5867                 }
5868         }
5869 }
5870
5871 static struct btrfs_io_context *alloc_btrfs_io_context(struct btrfs_fs_info *fs_info,
5872                                                        int total_stripes,
5873                                                        int real_stripes)
5874 {
5875         struct btrfs_io_context *bioc = kzalloc(
5876                  /* The size of btrfs_io_context */
5877                 sizeof(struct btrfs_io_context) +
5878                 /* Plus the variable array for the stripes */
5879                 sizeof(struct btrfs_io_stripe) * (total_stripes) +
5880                 /* Plus the variable array for the tgt dev */
5881                 sizeof(int) * (real_stripes) +
5882                 /*
5883                  * Plus the raid_map, which includes both the tgt dev
5884                  * and the stripes.
5885                  */
5886                 sizeof(u64) * (total_stripes),
5887                 GFP_NOFS|__GFP_NOFAIL);
5888
5889         atomic_set(&bioc->error, 0);
5890         refcount_set(&bioc->refs, 1);
5891
5892         bioc->fs_info = fs_info;
5893         bioc->tgtdev_map = (int *)(bioc->stripes + total_stripes);
5894         bioc->raid_map = (u64 *)(bioc->tgtdev_map + real_stripes);
5895
5896         return bioc;
5897 }
5898
5899 void btrfs_get_bioc(struct btrfs_io_context *bioc)
5900 {
5901         WARN_ON(!refcount_read(&bioc->refs));
5902         refcount_inc(&bioc->refs);
5903 }
5904
5905 void btrfs_put_bioc(struct btrfs_io_context *bioc)
5906 {
5907         if (!bioc)
5908                 return;
5909         if (refcount_dec_and_test(&bioc->refs))
5910                 kfree(bioc);
5911 }
5912
5913 /* can REQ_OP_DISCARD be sent with other REQ like REQ_OP_WRITE? */
5914 /*
5915  * Please note that, discard won't be sent to target device of device
5916  * replace.
5917  */
5918 static int __btrfs_map_block_for_discard(struct btrfs_fs_info *fs_info,
5919                                          u64 logical, u64 *length_ret,
5920                                          struct btrfs_io_context **bioc_ret)
5921 {
5922         struct extent_map *em;
5923         struct map_lookup *map;
5924         struct btrfs_io_context *bioc;
5925         u64 length = *length_ret;
5926         u64 offset;
5927         u64 stripe_nr;
5928         u64 stripe_nr_end;
5929         u64 stripe_end_offset;
5930         u64 stripe_cnt;
5931         u64 stripe_len;
5932         u64 stripe_offset;
5933         u64 num_stripes;
5934         u32 stripe_index;
5935         u32 factor = 0;
5936         u32 sub_stripes = 0;
5937         u64 stripes_per_dev = 0;
5938         u32 remaining_stripes = 0;
5939         u32 last_stripe = 0;
5940         int ret = 0;
5941         int i;
5942
5943         /* Discard always returns a bioc. */
5944         ASSERT(bioc_ret);
5945
5946         em = btrfs_get_chunk_map(fs_info, logical, length);
5947         if (IS_ERR(em))
5948                 return PTR_ERR(em);
5949
5950         map = em->map_lookup;
5951         /* we don't discard raid56 yet */
5952         if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
5953                 ret = -EOPNOTSUPP;
5954                 goto out;
5955         }
5956
5957         offset = logical - em->start;
5958         length = min_t(u64, em->start + em->len - logical, length);
5959         *length_ret = length;
5960
5961         stripe_len = map->stripe_len;
5962         /*
5963          * stripe_nr counts the total number of stripes we have to stride
5964          * to get to this block
5965          */
5966         stripe_nr = div64_u64(offset, stripe_len);
5967
5968         /* stripe_offset is the offset of this block in its stripe */
5969         stripe_offset = offset - stripe_nr * stripe_len;
5970
5971         stripe_nr_end = round_up(offset + length, map->stripe_len);
5972         stripe_nr_end = div64_u64(stripe_nr_end, map->stripe_len);
5973         stripe_cnt = stripe_nr_end - stripe_nr;
5974         stripe_end_offset = stripe_nr_end * map->stripe_len -
5975                             (offset + length);
5976         /*
5977          * after this, stripe_nr is the number of stripes on this
5978          * device we have to walk to find the data, and stripe_index is
5979          * the number of our device in the stripe array
5980          */
5981         num_stripes = 1;
5982         stripe_index = 0;
5983         if (map->type & (BTRFS_BLOCK_GROUP_RAID0 |
5984                          BTRFS_BLOCK_GROUP_RAID10)) {
5985                 if (map->type & BTRFS_BLOCK_GROUP_RAID0)
5986                         sub_stripes = 1;
5987                 else
5988                         sub_stripes = map->sub_stripes;
5989
5990                 factor = map->num_stripes / sub_stripes;
5991                 num_stripes = min_t(u64, map->num_stripes,
5992                                     sub_stripes * stripe_cnt);
5993                 stripe_nr = div_u64_rem(stripe_nr, factor, &stripe_index);
5994                 stripe_index *= sub_stripes;
5995                 stripes_per_dev = div_u64_rem(stripe_cnt, factor,
5996                                               &remaining_stripes);
5997                 div_u64_rem(stripe_nr_end - 1, factor, &last_stripe);
5998                 last_stripe *= sub_stripes;
5999         } else if (map->type & (BTRFS_BLOCK_GROUP_RAID1_MASK |
6000                                 BTRFS_BLOCK_GROUP_DUP)) {
6001                 num_stripes = map->num_stripes;
6002         } else {
6003                 stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
6004                                         &stripe_index);
6005         }
6006
6007         bioc = alloc_btrfs_io_context(fs_info, num_stripes, 0);
6008         if (!bioc) {
6009                 ret = -ENOMEM;
6010                 goto out;
6011         }
6012
6013         for (i = 0; i < num_stripes; i++) {
6014                 bioc->stripes[i].physical =
6015                         map->stripes[stripe_index].physical +
6016                         stripe_offset + stripe_nr * map->stripe_len;
6017                 bioc->stripes[i].dev = map->stripes[stripe_index].dev;
6018
6019                 if (map->type & (BTRFS_BLOCK_GROUP_RAID0 |
6020                                  BTRFS_BLOCK_GROUP_RAID10)) {
6021                         bioc->stripes[i].length = stripes_per_dev *
6022                                 map->stripe_len;
6023
6024                         if (i / sub_stripes < remaining_stripes)
6025                                 bioc->stripes[i].length += map->stripe_len;
6026
6027                         /*
6028                          * Special for the first stripe and
6029                          * the last stripe:
6030                          *
6031                          * |-------|...|-------|
6032                          *     |----------|
6033                          *    off     end_off
6034                          */
6035                         if (i < sub_stripes)
6036                                 bioc->stripes[i].length -= stripe_offset;
6037
6038                         if (stripe_index >= last_stripe &&
6039                             stripe_index <= (last_stripe +
6040                                              sub_stripes - 1))
6041                                 bioc->stripes[i].length -= stripe_end_offset;
6042
6043                         if (i == sub_stripes - 1)
6044                                 stripe_offset = 0;
6045                 } else {
6046                         bioc->stripes[i].length = length;
6047                 }
6048
6049                 stripe_index++;
6050                 if (stripe_index == map->num_stripes) {
6051                         stripe_index = 0;
6052                         stripe_nr++;
6053                 }
6054         }
6055
6056         *bioc_ret = bioc;
6057         bioc->map_type = map->type;
6058         bioc->num_stripes = num_stripes;
6059 out:
6060         free_extent_map(em);
6061         return ret;
6062 }
6063
6064 /*
6065  * In dev-replace case, for repair case (that's the only case where the mirror
6066  * is selected explicitly when calling btrfs_map_block), blocks left of the
6067  * left cursor can also be read from the target drive.
6068  *
6069  * For REQ_GET_READ_MIRRORS, the target drive is added as the last one to the
6070  * array of stripes.
6071  * For READ, it also needs to be supported using the same mirror number.
6072  *
6073  * If the requested block is not left of the left cursor, EIO is returned. This
6074  * can happen because btrfs_num_copies() returns one more in the dev-replace
6075  * case.
6076  */
6077 static int get_extra_mirror_from_replace(struct btrfs_fs_info *fs_info,
6078                                          u64 logical, u64 length,
6079                                          u64 srcdev_devid, int *mirror_num,
6080                                          u64 *physical)
6081 {
6082         struct btrfs_io_context *bioc = NULL;
6083         int num_stripes;
6084         int index_srcdev = 0;
6085         int found = 0;
6086         u64 physical_of_found = 0;
6087         int i;
6088         int ret = 0;
6089
6090         ret = __btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS,
6091                                 logical, &length, &bioc, 0, 0);
6092         if (ret) {
6093                 ASSERT(bioc == NULL);
6094                 return ret;
6095         }
6096
6097         num_stripes = bioc->num_stripes;
6098         if (*mirror_num > num_stripes) {
6099                 /*
6100                  * BTRFS_MAP_GET_READ_MIRRORS does not contain this mirror,
6101                  * that means that the requested area is not left of the left
6102                  * cursor
6103                  */
6104                 btrfs_put_bioc(bioc);
6105                 return -EIO;
6106         }
6107
6108         /*
6109          * process the rest of the function using the mirror_num of the source
6110          * drive. Therefore look it up first.  At the end, patch the device
6111          * pointer to the one of the target drive.
6112          */
6113         for (i = 0; i < num_stripes; i++) {
6114                 if (bioc->stripes[i].dev->devid != srcdev_devid)
6115                         continue;
6116
6117                 /*
6118                  * In case of DUP, in order to keep it simple, only add the
6119                  * mirror with the lowest physical address
6120                  */
6121                 if (found &&
6122                     physical_of_found <= bioc->stripes[i].physical)
6123                         continue;
6124
6125                 index_srcdev = i;
6126                 found = 1;
6127                 physical_of_found = bioc->stripes[i].physical;
6128         }
6129
6130         btrfs_put_bioc(bioc);
6131
6132         ASSERT(found);
6133         if (!found)
6134                 return -EIO;
6135
6136         *mirror_num = index_srcdev + 1;
6137         *physical = physical_of_found;
6138         return ret;
6139 }
6140
6141 static bool is_block_group_to_copy(struct btrfs_fs_info *fs_info, u64 logical)
6142 {
6143         struct btrfs_block_group *cache;
6144         bool ret;
6145
6146         /* Non zoned filesystem does not use "to_copy" flag */
6147         if (!btrfs_is_zoned(fs_info))
6148                 return false;
6149
6150         cache = btrfs_lookup_block_group(fs_info, logical);
6151
6152         spin_lock(&cache->lock);
6153         ret = cache->to_copy;
6154         spin_unlock(&cache->lock);
6155
6156         btrfs_put_block_group(cache);
6157         return ret;
6158 }
6159
6160 static void handle_ops_on_dev_replace(enum btrfs_map_op op,
6161                                       struct btrfs_io_context **bioc_ret,
6162                                       struct btrfs_dev_replace *dev_replace,
6163                                       u64 logical,
6164                                       int *num_stripes_ret, int *max_errors_ret)
6165 {
6166         struct btrfs_io_context *bioc = *bioc_ret;
6167         u64 srcdev_devid = dev_replace->srcdev->devid;
6168         int tgtdev_indexes = 0;
6169         int num_stripes = *num_stripes_ret;
6170         int max_errors = *max_errors_ret;
6171         int i;
6172
6173         if (op == BTRFS_MAP_WRITE) {
6174                 int index_where_to_add;
6175
6176                 /*
6177                  * A block group which have "to_copy" set will eventually
6178                  * copied by dev-replace process. We can avoid cloning IO here.
6179                  */
6180                 if (is_block_group_to_copy(dev_replace->srcdev->fs_info, logical))
6181                         return;
6182
6183                 /*
6184                  * duplicate the write operations while the dev replace
6185                  * procedure is running. Since the copying of the old disk to
6186                  * the new disk takes place at run time while the filesystem is
6187                  * mounted writable, the regular write operations to the old
6188                  * disk have to be duplicated to go to the new disk as well.
6189                  *
6190                  * Note that device->missing is handled by the caller, and that
6191                  * the write to the old disk is already set up in the stripes
6192                  * array.
6193                  */
6194                 index_where_to_add = num_stripes;
6195                 for (i = 0; i < num_stripes; i++) {
6196                         if (bioc->stripes[i].dev->devid == srcdev_devid) {
6197                                 /* write to new disk, too */
6198                                 struct btrfs_io_stripe *new =
6199                                         bioc->stripes + index_where_to_add;
6200                                 struct btrfs_io_stripe *old =
6201                                         bioc->stripes + i;
6202
6203                                 new->physical = old->physical;
6204                                 new->length = old->length;
6205                                 new->dev = dev_replace->tgtdev;
6206                                 bioc->tgtdev_map[i] = index_where_to_add;
6207                                 index_where_to_add++;
6208                                 max_errors++;
6209                                 tgtdev_indexes++;
6210                         }
6211                 }
6212                 num_stripes = index_where_to_add;
6213         } else if (op == BTRFS_MAP_GET_READ_MIRRORS) {
6214                 int index_srcdev = 0;
6215                 int found = 0;
6216                 u64 physical_of_found = 0;
6217
6218                 /*
6219                  * During the dev-replace procedure, the target drive can also
6220                  * be used to read data in case it is needed to repair a corrupt
6221                  * block elsewhere. This is possible if the requested area is
6222                  * left of the left cursor. In this area, the target drive is a
6223                  * full copy of the source drive.
6224                  */
6225                 for (i = 0; i < num_stripes; i++) {
6226                         if (bioc->stripes[i].dev->devid == srcdev_devid) {
6227                                 /*
6228                                  * In case of DUP, in order to keep it simple,
6229                                  * only add the mirror with the lowest physical
6230                                  * address
6231                                  */
6232                                 if (found &&
6233                                     physical_of_found <= bioc->stripes[i].physical)
6234                                         continue;
6235                                 index_srcdev = i;
6236                                 found = 1;
6237                                 physical_of_found = bioc->stripes[i].physical;
6238                         }
6239                 }
6240                 if (found) {
6241                         struct btrfs_io_stripe *tgtdev_stripe =
6242                                 bioc->stripes + num_stripes;
6243
6244                         tgtdev_stripe->physical = physical_of_found;
6245                         tgtdev_stripe->length =
6246                                 bioc->stripes[index_srcdev].length;
6247                         tgtdev_stripe->dev = dev_replace->tgtdev;
6248                         bioc->tgtdev_map[index_srcdev] = num_stripes;
6249
6250                         tgtdev_indexes++;
6251                         num_stripes++;
6252                 }
6253         }
6254
6255         *num_stripes_ret = num_stripes;
6256         *max_errors_ret = max_errors;
6257         bioc->num_tgtdevs = tgtdev_indexes;
6258         *bioc_ret = bioc;
6259 }
6260
6261 static bool need_full_stripe(enum btrfs_map_op op)
6262 {
6263         return (op == BTRFS_MAP_WRITE || op == BTRFS_MAP_GET_READ_MIRRORS);
6264 }
6265
6266 /*
6267  * Calculate the geometry of a particular (address, len) tuple. This
6268  * information is used to calculate how big a particular bio can get before it
6269  * straddles a stripe.
6270  *
6271  * @fs_info: the filesystem
6272  * @em:      mapping containing the logical extent
6273  * @op:      type of operation - write or read
6274  * @logical: address that we want to figure out the geometry of
6275  * @io_geom: pointer used to return values
6276  *
6277  * Returns < 0 in case a chunk for the given logical address cannot be found,
6278  * usually shouldn't happen unless @logical is corrupted, 0 otherwise.
6279  */
6280 int btrfs_get_io_geometry(struct btrfs_fs_info *fs_info, struct extent_map *em,
6281                           enum btrfs_map_op op, u64 logical,
6282                           struct btrfs_io_geometry *io_geom)
6283 {
6284         struct map_lookup *map;
6285         u64 len;
6286         u64 offset;
6287         u64 stripe_offset;
6288         u64 stripe_nr;
6289         u64 stripe_len;
6290         u64 raid56_full_stripe_start = (u64)-1;
6291         int data_stripes;
6292
6293         ASSERT(op != BTRFS_MAP_DISCARD);
6294
6295         map = em->map_lookup;
6296         /* Offset of this logical address in the chunk */
6297         offset = logical - em->start;
6298         /* Len of a stripe in a chunk */
6299         stripe_len = map->stripe_len;
6300         /* Stripe where this block falls in */
6301         stripe_nr = div64_u64(offset, stripe_len);
6302         /* Offset of stripe in the chunk */
6303         stripe_offset = stripe_nr * stripe_len;
6304         if (offset < stripe_offset) {
6305                 btrfs_crit(fs_info,
6306 "stripe math has gone wrong, stripe_offset=%llu offset=%llu start=%llu logical=%llu stripe_len=%llu",
6307                         stripe_offset, offset, em->start, logical, stripe_len);
6308                 return -EINVAL;
6309         }
6310
6311         /* stripe_offset is the offset of this block in its stripe */
6312         stripe_offset = offset - stripe_offset;
6313         data_stripes = nr_data_stripes(map);
6314
6315         if (map->type & BTRFS_BLOCK_GROUP_PROFILE_MASK) {
6316                 u64 max_len = stripe_len - stripe_offset;
6317
6318                 /*
6319                  * In case of raid56, we need to know the stripe aligned start
6320                  */
6321                 if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
6322                         unsigned long full_stripe_len = stripe_len * data_stripes;
6323                         raid56_full_stripe_start = offset;
6324
6325                         /*
6326                          * Allow a write of a full stripe, but make sure we
6327                          * don't allow straddling of stripes
6328                          */
6329                         raid56_full_stripe_start = div64_u64(raid56_full_stripe_start,
6330                                         full_stripe_len);
6331                         raid56_full_stripe_start *= full_stripe_len;
6332
6333                         /*
6334                          * For writes to RAID[56], allow a full stripeset across
6335                          * all disks. For other RAID types and for RAID[56]
6336                          * reads, just allow a single stripe (on a single disk).
6337                          */
6338                         if (op == BTRFS_MAP_WRITE) {
6339                                 max_len = stripe_len * data_stripes -
6340                                           (offset - raid56_full_stripe_start);
6341                         }
6342                 }
6343                 len = min_t(u64, em->len - offset, max_len);
6344         } else {
6345                 len = em->len - offset;
6346         }
6347
6348         io_geom->len = len;
6349         io_geom->offset = offset;
6350         io_geom->stripe_len = stripe_len;
6351         io_geom->stripe_nr = stripe_nr;
6352         io_geom->stripe_offset = stripe_offset;
6353         io_geom->raid56_stripe_offset = raid56_full_stripe_start;
6354
6355         return 0;
6356 }
6357
6358 static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
6359                              enum btrfs_map_op op,
6360                              u64 logical, u64 *length,
6361                              struct btrfs_io_context **bioc_ret,
6362                              int mirror_num, int need_raid_map)
6363 {
6364         struct extent_map *em;
6365         struct map_lookup *map;
6366         u64 stripe_offset;
6367         u64 stripe_nr;
6368         u64 stripe_len;
6369         u32 stripe_index;
6370         int data_stripes;
6371         int i;
6372         int ret = 0;
6373         int num_stripes;
6374         int max_errors = 0;
6375         int tgtdev_indexes = 0;
6376         struct btrfs_io_context *bioc = NULL;
6377         struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
6378         int dev_replace_is_ongoing = 0;
6379         int num_alloc_stripes;
6380         int patch_the_first_stripe_for_dev_replace = 0;
6381         u64 physical_to_patch_in_first_stripe = 0;
6382         u64 raid56_full_stripe_start = (u64)-1;
6383         struct btrfs_io_geometry geom;
6384
6385         ASSERT(bioc_ret);
6386         ASSERT(op != BTRFS_MAP_DISCARD);
6387
6388         em = btrfs_get_chunk_map(fs_info, logical, *length);
6389         ASSERT(!IS_ERR(em));
6390
6391         ret = btrfs_get_io_geometry(fs_info, em, op, logical, &geom);
6392         if (ret < 0)
6393                 return ret;
6394
6395         map = em->map_lookup;
6396
6397         *length = geom.len;
6398         stripe_len = geom.stripe_len;
6399         stripe_nr = geom.stripe_nr;
6400         stripe_offset = geom.stripe_offset;
6401         raid56_full_stripe_start = geom.raid56_stripe_offset;
6402         data_stripes = nr_data_stripes(map);
6403
6404         down_read(&dev_replace->rwsem);
6405         dev_replace_is_ongoing = btrfs_dev_replace_is_ongoing(dev_replace);
6406         /*
6407          * Hold the semaphore for read during the whole operation, write is
6408          * requested at commit time but must wait.
6409          */
6410         if (!dev_replace_is_ongoing)
6411                 up_read(&dev_replace->rwsem);
6412
6413         if (dev_replace_is_ongoing && mirror_num == map->num_stripes + 1 &&
6414             !need_full_stripe(op) && dev_replace->tgtdev != NULL) {
6415                 ret = get_extra_mirror_from_replace(fs_info, logical, *length,
6416                                                     dev_replace->srcdev->devid,
6417                                                     &mirror_num,
6418                                             &physical_to_patch_in_first_stripe);
6419                 if (ret)
6420                         goto out;
6421                 else
6422                         patch_the_first_stripe_for_dev_replace = 1;
6423         } else if (mirror_num > map->num_stripes) {
6424                 mirror_num = 0;
6425         }
6426
6427         num_stripes = 1;
6428         stripe_index = 0;
6429         if (map->type & BTRFS_BLOCK_GROUP_RAID0) {
6430                 stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
6431                                 &stripe_index);
6432                 if (!need_full_stripe(op))
6433                         mirror_num = 1;
6434         } else if (map->type & BTRFS_BLOCK_GROUP_RAID1_MASK) {
6435                 if (need_full_stripe(op))
6436                         num_stripes = map->num_stripes;
6437                 else if (mirror_num)
6438                         stripe_index = mirror_num - 1;
6439                 else {
6440                         stripe_index = find_live_mirror(fs_info, map, 0,
6441                                             dev_replace_is_ongoing);
6442                         mirror_num = stripe_index + 1;
6443                 }
6444
6445         } else if (map->type & BTRFS_BLOCK_GROUP_DUP) {
6446                 if (need_full_stripe(op)) {
6447                         num_stripes = map->num_stripes;
6448                 } else if (mirror_num) {
6449                         stripe_index = mirror_num - 1;
6450                 } else {
6451                         mirror_num = 1;
6452                 }
6453
6454         } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) {
6455                 u32 factor = map->num_stripes / map->sub_stripes;
6456
6457                 stripe_nr = div_u64_rem(stripe_nr, factor, &stripe_index);
6458                 stripe_index *= map->sub_stripes;
6459
6460                 if (need_full_stripe(op))
6461                         num_stripes = map->sub_stripes;
6462                 else if (mirror_num)
6463                         stripe_index += mirror_num - 1;
6464                 else {
6465                         int old_stripe_index = stripe_index;
6466                         stripe_index = find_live_mirror(fs_info, map,
6467                                               stripe_index,
6468                                               dev_replace_is_ongoing);
6469                         mirror_num = stripe_index - old_stripe_index + 1;
6470                 }
6471
6472         } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
6473                 if (need_raid_map && (need_full_stripe(op) || mirror_num > 1)) {
6474                         /* push stripe_nr back to the start of the full stripe */
6475                         stripe_nr = div64_u64(raid56_full_stripe_start,
6476                                         stripe_len * data_stripes);
6477
6478                         /* RAID[56] write or recovery. Return all stripes */
6479                         num_stripes = map->num_stripes;
6480                         max_errors = nr_parity_stripes(map);
6481
6482                         *length = map->stripe_len;
6483                         stripe_index = 0;
6484                         stripe_offset = 0;
6485                 } else {
6486                         /*
6487                          * Mirror #0 or #1 means the original data block.
6488                          * Mirror #2 is RAID5 parity block.
6489                          * Mirror #3 is RAID6 Q block.
6490                          */
6491                         stripe_nr = div_u64_rem(stripe_nr,
6492                                         data_stripes, &stripe_index);
6493                         if (mirror_num > 1)
6494                                 stripe_index = data_stripes + mirror_num - 2;
6495
6496                         /* We distribute the parity blocks across stripes */
6497                         div_u64_rem(stripe_nr + stripe_index, map->num_stripes,
6498                                         &stripe_index);
6499                         if (!need_full_stripe(op) && mirror_num <= 1)
6500                                 mirror_num = 1;
6501                 }
6502         } else {
6503                 /*
6504                  * after this, stripe_nr is the number of stripes on this
6505                  * device we have to walk to find the data, and stripe_index is
6506                  * the number of our device in the stripe array
6507                  */
6508                 stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
6509                                 &stripe_index);
6510                 mirror_num = stripe_index + 1;
6511         }
6512         if (stripe_index >= map->num_stripes) {
6513                 btrfs_crit(fs_info,
6514                            "stripe index math went horribly wrong, got stripe_index=%u, num_stripes=%u",
6515                            stripe_index, map->num_stripes);
6516                 ret = -EINVAL;
6517                 goto out;
6518         }
6519
6520         num_alloc_stripes = num_stripes;
6521         if (dev_replace_is_ongoing && dev_replace->tgtdev != NULL) {
6522                 if (op == BTRFS_MAP_WRITE)
6523                         num_alloc_stripes <<= 1;
6524                 if (op == BTRFS_MAP_GET_READ_MIRRORS)
6525                         num_alloc_stripes++;
6526                 tgtdev_indexes = num_stripes;
6527         }
6528
6529         bioc = alloc_btrfs_io_context(fs_info, num_alloc_stripes, tgtdev_indexes);
6530         if (!bioc) {
6531                 ret = -ENOMEM;
6532                 goto out;
6533         }
6534
6535         for (i = 0; i < num_stripes; i++) {
6536                 bioc->stripes[i].physical = map->stripes[stripe_index].physical +
6537                         stripe_offset + stripe_nr * map->stripe_len;
6538                 bioc->stripes[i].dev = map->stripes[stripe_index].dev;
6539                 stripe_index++;
6540         }
6541
6542         /* Build raid_map */
6543         if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK && need_raid_map &&
6544             (need_full_stripe(op) || mirror_num > 1)) {
6545                 u64 tmp;
6546                 unsigned rot;
6547
6548                 /* Work out the disk rotation on this stripe-set */
6549                 div_u64_rem(stripe_nr, num_stripes, &rot);
6550
6551                 /* Fill in the logical address of each stripe */
6552                 tmp = stripe_nr * data_stripes;
6553                 for (i = 0; i < data_stripes; i++)
6554                         bioc->raid_map[(i + rot) % num_stripes] =
6555                                 em->start + (tmp + i) * map->stripe_len;
6556
6557                 bioc->raid_map[(i + rot) % map->num_stripes] = RAID5_P_STRIPE;
6558                 if (map->type & BTRFS_BLOCK_GROUP_RAID6)
6559                         bioc->raid_map[(i + rot + 1) % num_stripes] =
6560                                 RAID6_Q_STRIPE;
6561
6562                 sort_parity_stripes(bioc, num_stripes);
6563         }
6564
6565         if (need_full_stripe(op))
6566                 max_errors = btrfs_chunk_max_errors(map);
6567
6568         if (dev_replace_is_ongoing && dev_replace->tgtdev != NULL &&
6569             need_full_stripe(op)) {
6570                 handle_ops_on_dev_replace(op, &bioc, dev_replace, logical,
6571                                           &num_stripes, &max_errors);
6572         }
6573
6574         *bioc_ret = bioc;
6575         bioc->map_type = map->type;
6576         bioc->num_stripes = num_stripes;
6577         bioc->max_errors = max_errors;
6578         bioc->mirror_num = mirror_num;
6579
6580         /*
6581          * this is the case that REQ_READ && dev_replace_is_ongoing &&
6582          * mirror_num == num_stripes + 1 && dev_replace target drive is
6583          * available as a mirror
6584          */
6585         if (patch_the_first_stripe_for_dev_replace && num_stripes > 0) {
6586                 WARN_ON(num_stripes > 1);
6587                 bioc->stripes[0].dev = dev_replace->tgtdev;
6588                 bioc->stripes[0].physical = physical_to_patch_in_first_stripe;
6589                 bioc->mirror_num = map->num_stripes + 1;
6590         }
6591 out:
6592         if (dev_replace_is_ongoing) {
6593                 lockdep_assert_held(&dev_replace->rwsem);
6594                 /* Unlock and let waiting writers proceed */
6595                 up_read(&dev_replace->rwsem);
6596         }
6597         free_extent_map(em);
6598         return ret;
6599 }
6600
6601 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
6602                       u64 logical, u64 *length,
6603                       struct btrfs_io_context **bioc_ret, int mirror_num)
6604 {
6605         if (op == BTRFS_MAP_DISCARD)
6606                 return __btrfs_map_block_for_discard(fs_info, logical,
6607                                                      length, bioc_ret);
6608
6609         return __btrfs_map_block(fs_info, op, logical, length, bioc_ret,
6610                                  mirror_num, 0);
6611 }
6612
6613 /* For Scrub/replace */
6614 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
6615                      u64 logical, u64 *length,
6616                      struct btrfs_io_context **bioc_ret)
6617 {
6618         return __btrfs_map_block(fs_info, op, logical, length, bioc_ret, 0, 1);
6619 }
6620
6621 static inline void btrfs_end_bioc(struct btrfs_io_context *bioc, struct bio *bio)
6622 {
6623         bio->bi_private = bioc->private;
6624         bio->bi_end_io = bioc->end_io;
6625         bio_endio(bio);
6626
6627         btrfs_put_bioc(bioc);
6628 }
6629
6630 static void btrfs_end_bio(struct bio *bio)
6631 {
6632         struct btrfs_io_context *bioc = bio->bi_private;
6633         int is_orig_bio = 0;
6634
6635         if (bio->bi_status) {
6636                 atomic_inc(&bioc->error);
6637                 if (bio->bi_status == BLK_STS_IOERR ||
6638                     bio->bi_status == BLK_STS_TARGET) {
6639                         struct btrfs_device *dev = btrfs_bio(bio)->device;
6640
6641                         ASSERT(dev->bdev);
6642                         if (btrfs_op(bio) == BTRFS_MAP_WRITE)
6643                                 btrfs_dev_stat_inc_and_print(dev,
6644                                                 BTRFS_DEV_STAT_WRITE_ERRS);
6645                         else if (!(bio->bi_opf & REQ_RAHEAD))
6646                                 btrfs_dev_stat_inc_and_print(dev,
6647                                                 BTRFS_DEV_STAT_READ_ERRS);
6648                         if (bio->bi_opf & REQ_PREFLUSH)
6649                                 btrfs_dev_stat_inc_and_print(dev,
6650                                                 BTRFS_DEV_STAT_FLUSH_ERRS);
6651                 }
6652         }
6653
6654         if (bio == bioc->orig_bio)
6655                 is_orig_bio = 1;
6656
6657         btrfs_bio_counter_dec(bioc->fs_info);
6658
6659         if (atomic_dec_and_test(&bioc->stripes_pending)) {
6660                 if (!is_orig_bio) {
6661                         bio_put(bio);
6662                         bio = bioc->orig_bio;
6663                 }
6664
6665                 btrfs_bio(bio)->mirror_num = bioc->mirror_num;
6666                 /* only send an error to the higher layers if it is
6667                  * beyond the tolerance of the btrfs bio
6668                  */
6669                 if (atomic_read(&bioc->error) > bioc->max_errors) {
6670                         bio->bi_status = BLK_STS_IOERR;
6671                 } else {
6672                         /*
6673                          * this bio is actually up to date, we didn't
6674                          * go over the max number of errors
6675                          */
6676                         bio->bi_status = BLK_STS_OK;
6677                 }
6678
6679                 btrfs_end_bioc(bioc, bio);
6680         } else if (!is_orig_bio) {
6681                 bio_put(bio);
6682         }
6683 }
6684
6685 static void submit_stripe_bio(struct btrfs_io_context *bioc, struct bio *bio,
6686                               u64 physical, struct btrfs_device *dev)
6687 {
6688         struct btrfs_fs_info *fs_info = bioc->fs_info;
6689
6690         bio->bi_private = bioc;
6691         btrfs_bio(bio)->device = dev;
6692         bio->bi_end_io = btrfs_end_bio;
6693         bio->bi_iter.bi_sector = physical >> 9;
6694         /*
6695          * For zone append writing, bi_sector must point the beginning of the
6696          * zone
6697          */
6698         if (bio_op(bio) == REQ_OP_ZONE_APPEND) {
6699                 if (btrfs_dev_is_sequential(dev, physical)) {
6700                         u64 zone_start = round_down(physical, fs_info->zone_size);
6701
6702                         bio->bi_iter.bi_sector = zone_start >> SECTOR_SHIFT;
6703                 } else {
6704                         bio->bi_opf &= ~REQ_OP_ZONE_APPEND;
6705                         bio->bi_opf |= REQ_OP_WRITE;
6706                 }
6707         }
6708         btrfs_debug_in_rcu(fs_info,
6709         "btrfs_map_bio: rw %d 0x%x, sector=%llu, dev=%lu (%s id %llu), size=%u",
6710                 bio_op(bio), bio->bi_opf, bio->bi_iter.bi_sector,
6711                 (unsigned long)dev->bdev->bd_dev, rcu_str_deref(dev->name),
6712                 dev->devid, bio->bi_iter.bi_size);
6713         bio_set_dev(bio, dev->bdev);
6714
6715         btrfs_bio_counter_inc_noblocked(fs_info);
6716
6717         btrfsic_submit_bio(bio);
6718 }
6719
6720 static void bioc_error(struct btrfs_io_context *bioc, struct bio *bio, u64 logical)
6721 {
6722         atomic_inc(&bioc->error);
6723         if (atomic_dec_and_test(&bioc->stripes_pending)) {
6724                 /* Should be the original bio. */
6725                 WARN_ON(bio != bioc->orig_bio);
6726
6727                 btrfs_bio(bio)->mirror_num = bioc->mirror_num;
6728                 bio->bi_iter.bi_sector = logical >> 9;
6729                 if (atomic_read(&bioc->error) > bioc->max_errors)
6730                         bio->bi_status = BLK_STS_IOERR;
6731                 else
6732                         bio->bi_status = BLK_STS_OK;
6733                 btrfs_end_bioc(bioc, bio);
6734         }
6735 }
6736
6737 blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio,
6738                            int mirror_num)
6739 {
6740         struct btrfs_device *dev;
6741         struct bio *first_bio = bio;
6742         u64 logical = bio->bi_iter.bi_sector << 9;
6743         u64 length = 0;
6744         u64 map_length;
6745         int ret;
6746         int dev_nr;
6747         int total_devs;
6748         struct btrfs_io_context *bioc = NULL;
6749
6750         length = bio->bi_iter.bi_size;
6751         map_length = length;
6752
6753         btrfs_bio_counter_inc_blocked(fs_info);
6754         ret = __btrfs_map_block(fs_info, btrfs_op(bio), logical,
6755                                 &map_length, &bioc, mirror_num, 1);
6756         if (ret) {
6757                 btrfs_bio_counter_dec(fs_info);
6758                 return errno_to_blk_status(ret);
6759         }
6760
6761         total_devs = bioc->num_stripes;
6762         bioc->orig_bio = first_bio;
6763         bioc->private = first_bio->bi_private;
6764         bioc->end_io = first_bio->bi_end_io;
6765         atomic_set(&bioc->stripes_pending, bioc->num_stripes);
6766
6767         if ((bioc->map_type & BTRFS_BLOCK_GROUP_RAID56_MASK) &&
6768             ((btrfs_op(bio) == BTRFS_MAP_WRITE) || (mirror_num > 1))) {
6769                 /* In this case, map_length has been set to the length of
6770                    a single stripe; not the whole write */
6771                 if (btrfs_op(bio) == BTRFS_MAP_WRITE) {
6772                         ret = raid56_parity_write(bio, bioc, map_length);
6773                 } else {
6774                         ret = raid56_parity_recover(bio, bioc, map_length,
6775                                                     mirror_num, 1);
6776                 }
6777
6778                 btrfs_bio_counter_dec(fs_info);
6779                 return errno_to_blk_status(ret);
6780         }
6781
6782         if (map_length < length) {
6783                 btrfs_crit(fs_info,
6784                            "mapping failed logical %llu bio len %llu len %llu",
6785                            logical, length, map_length);
6786                 BUG();
6787         }
6788
6789         for (dev_nr = 0; dev_nr < total_devs; dev_nr++) {
6790                 dev = bioc->stripes[dev_nr].dev;
6791                 if (!dev || !dev->bdev || test_bit(BTRFS_DEV_STATE_MISSING,
6792                                                    &dev->dev_state) ||
6793                     (btrfs_op(first_bio) == BTRFS_MAP_WRITE &&
6794                     !test_bit(BTRFS_DEV_STATE_WRITEABLE, &dev->dev_state))) {
6795                         bioc_error(bioc, first_bio, logical);
6796                         continue;
6797                 }
6798
6799                 if (dev_nr < total_devs - 1)
6800                         bio = btrfs_bio_clone(first_bio);
6801                 else
6802                         bio = first_bio;
6803
6804                 submit_stripe_bio(bioc, bio, bioc->stripes[dev_nr].physical, dev);
6805         }
6806         btrfs_bio_counter_dec(fs_info);
6807         return BLK_STS_OK;
6808 }
6809
6810 static bool dev_args_match_fs_devices(const struct btrfs_dev_lookup_args *args,
6811                                       const struct btrfs_fs_devices *fs_devices)
6812 {
6813         if (args->fsid == NULL)
6814                 return true;
6815         if (memcmp(fs_devices->metadata_uuid, args->fsid, BTRFS_FSID_SIZE) == 0)
6816                 return true;
6817         return false;
6818 }
6819
6820 static bool dev_args_match_device(const struct btrfs_dev_lookup_args *args,
6821                                   const struct btrfs_device *device)
6822 {
6823         ASSERT((args->devid != (u64)-1) || args->missing);
6824
6825         if ((args->devid != (u64)-1) && device->devid != args->devid)
6826                 return false;
6827         if (args->uuid && memcmp(device->uuid, args->uuid, BTRFS_UUID_SIZE) != 0)
6828                 return false;
6829         if (!args->missing)
6830                 return true;
6831         if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state) &&
6832             !device->bdev)
6833                 return true;
6834         return false;
6835 }
6836
6837 /*
6838  * Find a device specified by @devid or @uuid in the list of @fs_devices, or
6839  * return NULL.
6840  *
6841  * If devid and uuid are both specified, the match must be exact, otherwise
6842  * only devid is used.
6843  */
6844 struct btrfs_device *btrfs_find_device(const struct btrfs_fs_devices *fs_devices,
6845                                        const struct btrfs_dev_lookup_args *args)
6846 {
6847         struct btrfs_device *device;
6848         struct btrfs_fs_devices *seed_devs;
6849
6850         if (dev_args_match_fs_devices(args, fs_devices)) {
6851                 list_for_each_entry(device, &fs_devices->devices, dev_list) {
6852                         if (dev_args_match_device(args, device))
6853                                 return device;
6854                 }
6855         }
6856
6857         list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) {
6858                 if (!dev_args_match_fs_devices(args, seed_devs))
6859                         continue;
6860                 list_for_each_entry(device, &seed_devs->devices, dev_list) {
6861                         if (dev_args_match_device(args, device))
6862                                 return device;
6863                 }
6864         }
6865
6866         return NULL;
6867 }
6868
6869 static struct btrfs_device *add_missing_dev(struct btrfs_fs_devices *fs_devices,
6870                                             u64 devid, u8 *dev_uuid)
6871 {
6872         struct btrfs_device *device;
6873         unsigned int nofs_flag;
6874
6875         /*
6876          * We call this under the chunk_mutex, so we want to use NOFS for this
6877          * allocation, however we don't want to change btrfs_alloc_device() to
6878          * always do NOFS because we use it in a lot of other GFP_KERNEL safe
6879          * places.
6880          */
6881         nofs_flag = memalloc_nofs_save();
6882         device = btrfs_alloc_device(NULL, &devid, dev_uuid);
6883         memalloc_nofs_restore(nofs_flag);
6884         if (IS_ERR(device))
6885                 return device;
6886
6887         list_add(&device->dev_list, &fs_devices->devices);
6888         device->fs_devices = fs_devices;
6889         fs_devices->num_devices++;
6890
6891         set_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state);
6892         fs_devices->missing_devices++;
6893
6894         return device;
6895 }
6896
6897 /**
6898  * btrfs_alloc_device - allocate struct btrfs_device
6899  * @fs_info:    used only for generating a new devid, can be NULL if
6900  *              devid is provided (i.e. @devid != NULL).
6901  * @devid:      a pointer to devid for this device.  If NULL a new devid
6902  *              is generated.
6903  * @uuid:       a pointer to UUID for this device.  If NULL a new UUID
6904  *              is generated.
6905  *
6906  * Return: a pointer to a new &struct btrfs_device on success; ERR_PTR()
6907  * on error.  Returned struct is not linked onto any lists and must be
6908  * destroyed with btrfs_free_device.
6909  */
6910 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
6911                                         const u64 *devid,
6912                                         const u8 *uuid)
6913 {
6914         struct btrfs_device *dev;
6915         u64 tmp;
6916
6917         if (WARN_ON(!devid && !fs_info))
6918                 return ERR_PTR(-EINVAL);
6919
6920         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
6921         if (!dev)
6922                 return ERR_PTR(-ENOMEM);
6923
6924         /*
6925          * Preallocate a bio that's always going to be used for flushing device
6926          * barriers and matches the device lifespan
6927          */
6928         dev->flush_bio = bio_kmalloc(GFP_KERNEL, 0);
6929         if (!dev->flush_bio) {
6930                 kfree(dev);
6931                 return ERR_PTR(-ENOMEM);
6932         }
6933
6934         INIT_LIST_HEAD(&dev->dev_list);
6935         INIT_LIST_HEAD(&dev->dev_alloc_list);
6936         INIT_LIST_HEAD(&dev->post_commit_list);
6937
6938         atomic_set(&dev->reada_in_flight, 0);
6939         atomic_set(&dev->dev_stats_ccnt, 0);
6940         btrfs_device_data_ordered_init(dev);
6941         INIT_RADIX_TREE(&dev->reada_zones, GFP_NOFS & ~__GFP_DIRECT_RECLAIM);
6942         INIT_RADIX_TREE(&dev->reada_extents, GFP_NOFS & ~__GFP_DIRECT_RECLAIM);
6943         extent_io_tree_init(fs_info, &dev->alloc_state,
6944                             IO_TREE_DEVICE_ALLOC_STATE, NULL);
6945
6946         if (devid)
6947                 tmp = *devid;
6948         else {
6949                 int ret;
6950
6951                 ret = find_next_devid(fs_info, &tmp);
6952                 if (ret) {
6953                         btrfs_free_device(dev);
6954                         return ERR_PTR(ret);
6955                 }
6956         }
6957         dev->devid = tmp;
6958
6959         if (uuid)
6960                 memcpy(dev->uuid, uuid, BTRFS_UUID_SIZE);
6961         else
6962                 generate_random_uuid(dev->uuid);
6963
6964         return dev;
6965 }
6966
6967 static void btrfs_report_missing_device(struct btrfs_fs_info *fs_info,
6968                                         u64 devid, u8 *uuid, bool error)
6969 {
6970         if (error)
6971                 btrfs_err_rl(fs_info, "devid %llu uuid %pU is missing",
6972                               devid, uuid);
6973         else
6974                 btrfs_warn_rl(fs_info, "devid %llu uuid %pU is missing",
6975                               devid, uuid);
6976 }
6977
6978 static u64 calc_stripe_length(u64 type, u64 chunk_len, int num_stripes)
6979 {
6980         const int data_stripes = calc_data_stripes(type, num_stripes);
6981
6982         return div_u64(chunk_len, data_stripes);
6983 }
6984
6985 #if BITS_PER_LONG == 32
6986 /*
6987  * Due to page cache limit, metadata beyond BTRFS_32BIT_MAX_FILE_SIZE
6988  * can't be accessed on 32bit systems.
6989  *
6990  * This function do mount time check to reject the fs if it already has
6991  * metadata chunk beyond that limit.
6992  */
6993 static int check_32bit_meta_chunk(struct btrfs_fs_info *fs_info,
6994                                   u64 logical, u64 length, u64 type)
6995 {
6996         if (!(type & BTRFS_BLOCK_GROUP_METADATA))
6997                 return 0;
6998
6999         if (logical + length < MAX_LFS_FILESIZE)
7000                 return 0;
7001
7002         btrfs_err_32bit_limit(fs_info);
7003         return -EOVERFLOW;
7004 }
7005
7006 /*
7007  * This is to give early warning for any metadata chunk reaching
7008  * BTRFS_32BIT_EARLY_WARN_THRESHOLD.
7009  * Although we can still access the metadata, it's not going to be possible
7010  * once the limit is reached.
7011  */
7012 static void warn_32bit_meta_chunk(struct btrfs_fs_info *fs_info,
7013                                   u64 logical, u64 length, u64 type)
7014 {
7015         if (!(type & BTRFS_BLOCK_GROUP_METADATA))
7016                 return;
7017
7018         if (logical + length < BTRFS_32BIT_EARLY_WARN_THRESHOLD)
7019                 return;
7020
7021         btrfs_warn_32bit_limit(fs_info);
7022 }
7023 #endif
7024
7025 static int read_one_chunk(struct btrfs_key *key, struct extent_buffer *leaf,
7026                           struct btrfs_chunk *chunk)
7027 {
7028         BTRFS_DEV_LOOKUP_ARGS(args);
7029         struct btrfs_fs_info *fs_info = leaf->fs_info;
7030         struct extent_map_tree *map_tree = &fs_info->mapping_tree;
7031         struct map_lookup *map;
7032         struct extent_map *em;
7033         u64 logical;
7034         u64 length;
7035         u64 devid;
7036         u64 type;
7037         u8 uuid[BTRFS_UUID_SIZE];
7038         int num_stripes;
7039         int ret;
7040         int i;
7041
7042         logical = key->offset;
7043         length = btrfs_chunk_length(leaf, chunk);
7044         type = btrfs_chunk_type(leaf, chunk);
7045         num_stripes = btrfs_chunk_num_stripes(leaf, chunk);
7046
7047 #if BITS_PER_LONG == 32
7048         ret = check_32bit_meta_chunk(fs_info, logical, length, type);
7049         if (ret < 0)
7050                 return ret;
7051         warn_32bit_meta_chunk(fs_info, logical, length, type);
7052 #endif
7053
7054         /*
7055          * Only need to verify chunk item if we're reading from sys chunk array,
7056          * as chunk item in tree block is already verified by tree-checker.
7057          */
7058         if (leaf->start == BTRFS_SUPER_INFO_OFFSET) {
7059                 ret = btrfs_check_chunk_valid(leaf, chunk, logical);
7060                 if (ret)
7061                         return ret;
7062         }
7063
7064         read_lock(&map_tree->lock);
7065         em = lookup_extent_mapping(map_tree, logical, 1);
7066         read_unlock(&map_tree->lock);
7067
7068         /* already mapped? */
7069         if (em && em->start <= logical && em->start + em->len > logical) {
7070                 free_extent_map(em);
7071                 return 0;
7072         } else if (em) {
7073                 free_extent_map(em);
7074         }
7075
7076         em = alloc_extent_map();
7077         if (!em)
7078                 return -ENOMEM;
7079         map = kmalloc(map_lookup_size(num_stripes), GFP_NOFS);
7080         if (!map) {
7081                 free_extent_map(em);
7082                 return -ENOMEM;
7083         }
7084
7085         set_bit(EXTENT_FLAG_FS_MAPPING, &em->flags);
7086         em->map_lookup = map;
7087         em->start = logical;
7088         em->len = length;
7089         em->orig_start = 0;
7090         em->block_start = 0;
7091         em->block_len = em->len;
7092
7093         map->num_stripes = num_stripes;
7094         map->io_width = btrfs_chunk_io_width(leaf, chunk);
7095         map->io_align = btrfs_chunk_io_align(leaf, chunk);
7096         map->stripe_len = btrfs_chunk_stripe_len(leaf, chunk);
7097         map->type = type;
7098         map->sub_stripes = btrfs_chunk_sub_stripes(leaf, chunk);
7099         map->verified_stripes = 0;
7100         em->orig_block_len = calc_stripe_length(type, em->len,
7101                                                 map->num_stripes);
7102         for (i = 0; i < num_stripes; i++) {
7103                 map->stripes[i].physical =
7104                         btrfs_stripe_offset_nr(leaf, chunk, i);
7105                 devid = btrfs_stripe_devid_nr(leaf, chunk, i);
7106                 args.devid = devid;
7107                 read_extent_buffer(leaf, uuid, (unsigned long)
7108                                    btrfs_stripe_dev_uuid_nr(chunk, i),
7109                                    BTRFS_UUID_SIZE);
7110                 args.uuid = uuid;
7111                 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, &args);
7112                 if (!map->stripes[i].dev &&
7113                     !btrfs_test_opt(fs_info, DEGRADED)) {
7114                         free_extent_map(em);
7115                         btrfs_report_missing_device(fs_info, devid, uuid, true);
7116                         return -ENOENT;
7117                 }
7118                 if (!map->stripes[i].dev) {
7119                         map->stripes[i].dev =
7120                                 add_missing_dev(fs_info->fs_devices, devid,
7121                                                 uuid);
7122                         if (IS_ERR(map->stripes[i].dev)) {
7123                                 free_extent_map(em);
7124                                 btrfs_err(fs_info,
7125                                         "failed to init missing dev %llu: %ld",
7126                                         devid, PTR_ERR(map->stripes[i].dev));
7127                                 return PTR_ERR(map->stripes[i].dev);
7128                         }
7129                         btrfs_report_missing_device(fs_info, devid, uuid, false);
7130                 }
7131                 set_bit(BTRFS_DEV_STATE_IN_FS_METADATA,
7132                                 &(map->stripes[i].dev->dev_state));
7133
7134         }
7135
7136         write_lock(&map_tree->lock);
7137         ret = add_extent_mapping(map_tree, em, 0);
7138         write_unlock(&map_tree->lock);
7139         if (ret < 0) {
7140                 btrfs_err(fs_info,
7141                           "failed to add chunk map, start=%llu len=%llu: %d",
7142                           em->start, em->len, ret);
7143         }
7144         free_extent_map(em);
7145
7146         return ret;
7147 }
7148
7149 static void fill_device_from_item(struct extent_buffer *leaf,
7150                                  struct btrfs_dev_item *dev_item,
7151                                  struct btrfs_device *device)
7152 {
7153         unsigned long ptr;
7154
7155         device->devid = btrfs_device_id(leaf, dev_item);
7156         device->disk_total_bytes = btrfs_device_total_bytes(leaf, dev_item);
7157         device->total_bytes = device->disk_total_bytes;
7158         device->commit_total_bytes = device->disk_total_bytes;
7159         device->bytes_used = btrfs_device_bytes_used(leaf, dev_item);
7160         device->commit_bytes_used = device->bytes_used;
7161         device->type = btrfs_device_type(leaf, dev_item);
7162         device->io_align = btrfs_device_io_align(leaf, dev_item);
7163         device->io_width = btrfs_device_io_width(leaf, dev_item);
7164         device->sector_size = btrfs_device_sector_size(leaf, dev_item);
7165         WARN_ON(device->devid == BTRFS_DEV_REPLACE_DEVID);
7166         clear_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
7167
7168         ptr = btrfs_device_uuid(dev_item);
7169         read_extent_buffer(leaf, device->uuid, ptr, BTRFS_UUID_SIZE);
7170 }
7171
7172 static struct btrfs_fs_devices *open_seed_devices(struct btrfs_fs_info *fs_info,
7173                                                   u8 *fsid)
7174 {
7175         struct btrfs_fs_devices *fs_devices;
7176         int ret;
7177
7178         lockdep_assert_held(&uuid_mutex);
7179         ASSERT(fsid);
7180
7181         /* This will match only for multi-device seed fs */
7182         list_for_each_entry(fs_devices, &fs_info->fs_devices->seed_list, seed_list)
7183                 if (!memcmp(fs_devices->fsid, fsid, BTRFS_FSID_SIZE))
7184                         return fs_devices;
7185
7186
7187         fs_devices = find_fsid(fsid, NULL);
7188         if (!fs_devices) {
7189                 if (!btrfs_test_opt(fs_info, DEGRADED))
7190                         return ERR_PTR(-ENOENT);
7191
7192                 fs_devices = alloc_fs_devices(fsid, NULL);
7193                 if (IS_ERR(fs_devices))
7194                         return fs_devices;
7195
7196                 fs_devices->seeding = true;
7197                 fs_devices->opened = 1;
7198                 return fs_devices;
7199         }
7200
7201         /*
7202          * Upon first call for a seed fs fsid, just create a private copy of the
7203          * respective fs_devices and anchor it at fs_info->fs_devices->seed_list
7204          */
7205         fs_devices = clone_fs_devices(fs_devices);
7206         if (IS_ERR(fs_devices))
7207                 return fs_devices;
7208
7209         ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder);
7210         if (ret) {
7211                 free_fs_devices(fs_devices);
7212                 return ERR_PTR(ret);
7213         }
7214
7215         if (!fs_devices->seeding) {
7216                 close_fs_devices(fs_devices);
7217                 free_fs_devices(fs_devices);
7218                 return ERR_PTR(-EINVAL);
7219         }
7220
7221         list_add(&fs_devices->seed_list, &fs_info->fs_devices->seed_list);
7222
7223         return fs_devices;
7224 }
7225
7226 static int read_one_dev(struct extent_buffer *leaf,
7227                         struct btrfs_dev_item *dev_item)
7228 {
7229         BTRFS_DEV_LOOKUP_ARGS(args);
7230         struct btrfs_fs_info *fs_info = leaf->fs_info;
7231         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
7232         struct btrfs_device *device;
7233         u64 devid;
7234         int ret;
7235         u8 fs_uuid[BTRFS_FSID_SIZE];
7236         u8 dev_uuid[BTRFS_UUID_SIZE];
7237
7238         devid = args.devid = btrfs_device_id(leaf, dev_item);
7239         read_extent_buffer(leaf, dev_uuid, btrfs_device_uuid(dev_item),
7240                            BTRFS_UUID_SIZE);
7241         read_extent_buffer(leaf, fs_uuid, btrfs_device_fsid(dev_item),
7242                            BTRFS_FSID_SIZE);
7243         args.uuid = dev_uuid;
7244         args.fsid = fs_uuid;
7245
7246         if (memcmp(fs_uuid, fs_devices->metadata_uuid, BTRFS_FSID_SIZE)) {
7247                 fs_devices = open_seed_devices(fs_info, fs_uuid);
7248                 if (IS_ERR(fs_devices))
7249                         return PTR_ERR(fs_devices);
7250         }
7251
7252         device = btrfs_find_device(fs_info->fs_devices, &args);
7253         if (!device) {
7254                 if (!btrfs_test_opt(fs_info, DEGRADED)) {
7255                         btrfs_report_missing_device(fs_info, devid,
7256                                                         dev_uuid, true);
7257                         return -ENOENT;
7258                 }
7259
7260                 device = add_missing_dev(fs_devices, devid, dev_uuid);
7261                 if (IS_ERR(device)) {
7262                         btrfs_err(fs_info,
7263                                 "failed to add missing dev %llu: %ld",
7264                                 devid, PTR_ERR(device));
7265                         return PTR_ERR(device);
7266                 }
7267                 btrfs_report_missing_device(fs_info, devid, dev_uuid, false);
7268         } else {
7269                 if (!device->bdev) {
7270                         if (!btrfs_test_opt(fs_info, DEGRADED)) {
7271                                 btrfs_report_missing_device(fs_info,
7272                                                 devid, dev_uuid, true);
7273                                 return -ENOENT;
7274                         }
7275                         btrfs_report_missing_device(fs_info, devid,
7276                                                         dev_uuid, false);
7277                 }
7278
7279                 if (!device->bdev &&
7280                     !test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) {
7281                         /*
7282                          * this happens when a device that was properly setup
7283                          * in the device info lists suddenly goes bad.
7284                          * device->bdev is NULL, and so we have to set
7285                          * device->missing to one here
7286                          */
7287                         device->fs_devices->missing_devices++;
7288                         set_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state);
7289                 }
7290
7291                 /* Move the device to its own fs_devices */
7292                 if (device->fs_devices != fs_devices) {
7293                         ASSERT(test_bit(BTRFS_DEV_STATE_MISSING,
7294                                                         &device->dev_state));
7295
7296                         list_move(&device->dev_list, &fs_devices->devices);
7297                         device->fs_devices->num_devices--;
7298                         fs_devices->num_devices++;
7299
7300                         device->fs_devices->missing_devices--;
7301                         fs_devices->missing_devices++;
7302
7303                         device->fs_devices = fs_devices;
7304                 }
7305         }
7306
7307         if (device->fs_devices != fs_info->fs_devices) {
7308                 BUG_ON(test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state));
7309                 if (device->generation !=
7310                     btrfs_device_generation(leaf, dev_item))
7311                         return -EINVAL;
7312         }
7313
7314         fill_device_from_item(leaf, dev_item, device);
7315         if (device->bdev) {
7316                 u64 max_total_bytes = bdev_nr_bytes(device->bdev);
7317
7318                 if (device->total_bytes > max_total_bytes) {
7319                         btrfs_err(fs_info,
7320                         "device total_bytes should be at most %llu but found %llu",
7321                                   max_total_bytes, device->total_bytes);
7322                         return -EINVAL;
7323                 }
7324         }
7325         set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
7326         if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state) &&
7327            !test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) {
7328                 device->fs_devices->total_rw_bytes += device->total_bytes;
7329                 atomic64_add(device->total_bytes - device->bytes_used,
7330                                 &fs_info->free_chunk_space);
7331         }
7332         ret = 0;
7333         return ret;
7334 }
7335
7336 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info)
7337 {
7338         struct btrfs_root *root = fs_info->tree_root;
7339         struct btrfs_super_block *super_copy = fs_info->super_copy;
7340         struct extent_buffer *sb;
7341         struct btrfs_disk_key *disk_key;
7342         struct btrfs_chunk *chunk;
7343         u8 *array_ptr;
7344         unsigned long sb_array_offset;
7345         int ret = 0;
7346         u32 num_stripes;
7347         u32 array_size;
7348         u32 len = 0;
7349         u32 cur_offset;
7350         u64 type;
7351         struct btrfs_key key;
7352
7353         ASSERT(BTRFS_SUPER_INFO_SIZE <= fs_info->nodesize);
7354         /*
7355          * This will create extent buffer of nodesize, superblock size is
7356          * fixed to BTRFS_SUPER_INFO_SIZE. If nodesize > sb size, this will
7357          * overallocate but we can keep it as-is, only the first page is used.
7358          */
7359         sb = btrfs_find_create_tree_block(fs_info, BTRFS_SUPER_INFO_OFFSET,
7360                                           root->root_key.objectid, 0);
7361         if (IS_ERR(sb))
7362                 return PTR_ERR(sb);
7363         set_extent_buffer_uptodate(sb);
7364         /*
7365          * The sb extent buffer is artificial and just used to read the system array.
7366          * set_extent_buffer_uptodate() call does not properly mark all it's
7367          * pages up-to-date when the page is larger: extent does not cover the
7368          * whole page and consequently check_page_uptodate does not find all
7369          * the page's extents up-to-date (the hole beyond sb),
7370          * write_extent_buffer then triggers a WARN_ON.
7371          *
7372          * Regular short extents go through mark_extent_buffer_dirty/writeback cycle,
7373          * but sb spans only this function. Add an explicit SetPageUptodate call
7374          * to silence the warning eg. on PowerPC 64.
7375          */
7376         if (PAGE_SIZE > BTRFS_SUPER_INFO_SIZE)
7377                 SetPageUptodate(sb->pages[0]);
7378
7379         write_extent_buffer(sb, super_copy, 0, BTRFS_SUPER_INFO_SIZE);
7380         array_size = btrfs_super_sys_array_size(super_copy);
7381
7382         array_ptr = super_copy->sys_chunk_array;
7383         sb_array_offset = offsetof(struct btrfs_super_block, sys_chunk_array);
7384         cur_offset = 0;
7385
7386         while (cur_offset < array_size) {
7387                 disk_key = (struct btrfs_disk_key *)array_ptr;
7388                 len = sizeof(*disk_key);
7389                 if (cur_offset + len > array_size)
7390                         goto out_short_read;
7391
7392                 btrfs_disk_key_to_cpu(&key, disk_key);
7393
7394                 array_ptr += len;
7395                 sb_array_offset += len;
7396                 cur_offset += len;
7397
7398                 if (key.type != BTRFS_CHUNK_ITEM_KEY) {
7399                         btrfs_err(fs_info,
7400                             "unexpected item type %u in sys_array at offset %u",
7401                                   (u32)key.type, cur_offset);
7402                         ret = -EIO;
7403                         break;
7404                 }
7405
7406                 chunk = (struct btrfs_chunk *)sb_array_offset;
7407                 /*
7408                  * At least one btrfs_chunk with one stripe must be present,
7409                  * exact stripe count check comes afterwards
7410                  */
7411                 len = btrfs_chunk_item_size(1);
7412                 if (cur_offset + len > array_size)
7413                         goto out_short_read;
7414
7415                 num_stripes = btrfs_chunk_num_stripes(sb, chunk);
7416                 if (!num_stripes) {
7417                         btrfs_err(fs_info,
7418                         "invalid number of stripes %u in sys_array at offset %u",
7419                                   num_stripes, cur_offset);
7420                         ret = -EIO;
7421                         break;
7422                 }
7423
7424                 type = btrfs_chunk_type(sb, chunk);
7425                 if ((type & BTRFS_BLOCK_GROUP_SYSTEM) == 0) {
7426                         btrfs_err(fs_info,
7427                         "invalid chunk type %llu in sys_array at offset %u",
7428                                   type, cur_offset);
7429                         ret = -EIO;
7430                         break;
7431                 }
7432
7433                 len = btrfs_chunk_item_size(num_stripes);
7434                 if (cur_offset + len > array_size)
7435                         goto out_short_read;
7436
7437                 ret = read_one_chunk(&key, sb, chunk);
7438                 if (ret)
7439                         break;
7440
7441                 array_ptr += len;
7442                 sb_array_offset += len;
7443                 cur_offset += len;
7444         }
7445         clear_extent_buffer_uptodate(sb);
7446         free_extent_buffer_stale(sb);
7447         return ret;
7448
7449 out_short_read:
7450         btrfs_err(fs_info, "sys_array too short to read %u bytes at offset %u",
7451                         len, cur_offset);
7452         clear_extent_buffer_uptodate(sb);
7453         free_extent_buffer_stale(sb);
7454         return -EIO;
7455 }
7456
7457 /*
7458  * Check if all chunks in the fs are OK for read-write degraded mount
7459  *
7460  * If the @failing_dev is specified, it's accounted as missing.
7461  *
7462  * Return true if all chunks meet the minimal RW mount requirements.
7463  * Return false if any chunk doesn't meet the minimal RW mount requirements.
7464  */
7465 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info,
7466                                         struct btrfs_device *failing_dev)
7467 {
7468         struct extent_map_tree *map_tree = &fs_info->mapping_tree;
7469         struct extent_map *em;
7470         u64 next_start = 0;
7471         bool ret = true;
7472
7473         read_lock(&map_tree->lock);
7474         em = lookup_extent_mapping(map_tree, 0, (u64)-1);
7475         read_unlock(&map_tree->lock);
7476         /* No chunk at all? Return false anyway */
7477         if (!em) {
7478                 ret = false;
7479                 goto out;
7480         }
7481         while (em) {
7482                 struct map_lookup *map;
7483                 int missing = 0;
7484                 int max_tolerated;
7485                 int i;
7486
7487                 map = em->map_lookup;
7488                 max_tolerated =
7489                         btrfs_get_num_tolerated_disk_barrier_failures(
7490                                         map->type);
7491                 for (i = 0; i < map->num_stripes; i++) {
7492                         struct btrfs_device *dev = map->stripes[i].dev;
7493
7494                         if (!dev || !dev->bdev ||
7495                             test_bit(BTRFS_DEV_STATE_MISSING, &dev->dev_state) ||
7496                             dev->last_flush_error)
7497                                 missing++;
7498                         else if (failing_dev && failing_dev == dev)
7499                                 missing++;
7500                 }
7501                 if (missing > max_tolerated) {
7502                         if (!failing_dev)
7503                                 btrfs_warn(fs_info,
7504         "chunk %llu missing %d devices, max tolerance is %d for writable mount",
7505                                    em->start, missing, max_tolerated);
7506                         free_extent_map(em);
7507                         ret = false;
7508                         goto out;
7509                 }
7510                 next_start = extent_map_end(em);
7511                 free_extent_map(em);
7512
7513                 read_lock(&map_tree->lock);
7514                 em = lookup_extent_mapping(map_tree, next_start,
7515                                            (u64)(-1) - next_start);
7516                 read_unlock(&map_tree->lock);
7517         }
7518 out:
7519         return ret;
7520 }
7521
7522 static void readahead_tree_node_children(struct extent_buffer *node)
7523 {
7524         int i;
7525         const int nr_items = btrfs_header_nritems(node);
7526
7527         for (i = 0; i < nr_items; i++)
7528                 btrfs_readahead_node_child(node, i);
7529 }
7530
7531 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info)
7532 {
7533         struct btrfs_root *root = fs_info->chunk_root;
7534         struct btrfs_path *path;
7535         struct extent_buffer *leaf;
7536         struct btrfs_key key;
7537         struct btrfs_key found_key;
7538         int ret;
7539         int slot;
7540         u64 total_dev = 0;
7541         u64 last_ra_node = 0;
7542
7543         path = btrfs_alloc_path();
7544         if (!path)
7545                 return -ENOMEM;
7546
7547         /*
7548          * uuid_mutex is needed only if we are mounting a sprout FS
7549          * otherwise we don't need it.
7550          */
7551         mutex_lock(&uuid_mutex);
7552
7553         /*
7554          * It is possible for mount and umount to race in such a way that
7555          * we execute this code path, but open_fs_devices failed to clear
7556          * total_rw_bytes. We certainly want it cleared before reading the
7557          * device items, so clear it here.
7558          */
7559         fs_info->fs_devices->total_rw_bytes = 0;
7560
7561         /*
7562          * Read all device items, and then all the chunk items. All
7563          * device items are found before any chunk item (their object id
7564          * is smaller than the lowest possible object id for a chunk
7565          * item - BTRFS_FIRST_CHUNK_TREE_OBJECTID).
7566          */
7567         key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
7568         key.offset = 0;
7569         key.type = 0;
7570         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
7571         if (ret < 0)
7572                 goto error;
7573         while (1) {
7574                 struct extent_buffer *node;
7575
7576                 leaf = path->nodes[0];
7577                 slot = path->slots[0];
7578                 if (slot >= btrfs_header_nritems(leaf)) {
7579                         ret = btrfs_next_leaf(root, path);
7580                         if (ret == 0)
7581                                 continue;
7582                         if (ret < 0)
7583                                 goto error;
7584                         break;
7585                 }
7586                 /*
7587                  * The nodes on level 1 are not locked but we don't need to do
7588                  * that during mount time as nothing else can access the tree
7589                  */
7590                 node = path->nodes[1];
7591                 if (node) {
7592                         if (last_ra_node != node->start) {
7593                                 readahead_tree_node_children(node);
7594                                 last_ra_node = node->start;
7595                         }
7596                 }
7597                 btrfs_item_key_to_cpu(leaf, &found_key, slot);
7598                 if (found_key.type == BTRFS_DEV_ITEM_KEY) {
7599                         struct btrfs_dev_item *dev_item;
7600                         dev_item = btrfs_item_ptr(leaf, slot,
7601                                                   struct btrfs_dev_item);
7602                         ret = read_one_dev(leaf, dev_item);
7603                         if (ret)
7604                                 goto error;
7605                         total_dev++;
7606                 } else if (found_key.type == BTRFS_CHUNK_ITEM_KEY) {
7607                         struct btrfs_chunk *chunk;
7608
7609                         /*
7610                          * We are only called at mount time, so no need to take
7611                          * fs_info->chunk_mutex. Plus, to avoid lockdep warnings,
7612                          * we always lock first fs_info->chunk_mutex before
7613                          * acquiring any locks on the chunk tree. This is a
7614                          * requirement for chunk allocation, see the comment on
7615                          * top of btrfs_chunk_alloc() for details.
7616                          */
7617                         ASSERT(!test_bit(BTRFS_FS_OPEN, &fs_info->flags));
7618                         chunk = btrfs_item_ptr(leaf, slot, struct btrfs_chunk);
7619                         ret = read_one_chunk(&found_key, leaf, chunk);
7620                         if (ret)
7621                                 goto error;
7622                 }
7623                 path->slots[0]++;
7624         }
7625
7626         /*
7627          * After loading chunk tree, we've got all device information,
7628          * do another round of validation checks.
7629          */
7630         if (total_dev != fs_info->fs_devices->total_devices) {
7631                 btrfs_err(fs_info,
7632            "super_num_devices %llu mismatch with num_devices %llu found here",
7633                           btrfs_super_num_devices(fs_info->super_copy),
7634                           total_dev);
7635                 ret = -EINVAL;
7636                 goto error;
7637         }
7638         if (btrfs_super_total_bytes(fs_info->super_copy) <
7639             fs_info->fs_devices->total_rw_bytes) {
7640                 btrfs_err(fs_info,
7641         "super_total_bytes %llu mismatch with fs_devices total_rw_bytes %llu",
7642                           btrfs_super_total_bytes(fs_info->super_copy),
7643                           fs_info->fs_devices->total_rw_bytes);
7644                 ret = -EINVAL;
7645                 goto error;
7646         }
7647         ret = 0;
7648 error:
7649         mutex_unlock(&uuid_mutex);
7650
7651         btrfs_free_path(path);
7652         return ret;
7653 }
7654
7655 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info)
7656 {
7657         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs;
7658         struct btrfs_device *device;
7659
7660         fs_devices->fs_info = fs_info;
7661
7662         mutex_lock(&fs_devices->device_list_mutex);
7663         list_for_each_entry(device, &fs_devices->devices, dev_list)
7664                 device->fs_info = fs_info;
7665
7666         list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) {
7667                 list_for_each_entry(device, &seed_devs->devices, dev_list)
7668                         device->fs_info = fs_info;
7669
7670                 seed_devs->fs_info = fs_info;
7671         }
7672         mutex_unlock(&fs_devices->device_list_mutex);
7673 }
7674
7675 static u64 btrfs_dev_stats_value(const struct extent_buffer *eb,
7676                                  const struct btrfs_dev_stats_item *ptr,
7677                                  int index)
7678 {
7679         u64 val;
7680
7681         read_extent_buffer(eb, &val,
7682                            offsetof(struct btrfs_dev_stats_item, values) +
7683                             ((unsigned long)ptr) + (index * sizeof(u64)),
7684                            sizeof(val));
7685         return val;
7686 }
7687
7688 static void btrfs_set_dev_stats_value(struct extent_buffer *eb,
7689                                       struct btrfs_dev_stats_item *ptr,
7690                                       int index, u64 val)
7691 {
7692         write_extent_buffer(eb, &val,
7693                             offsetof(struct btrfs_dev_stats_item, values) +
7694                              ((unsigned long)ptr) + (index * sizeof(u64)),
7695                             sizeof(val));
7696 }
7697
7698 static int btrfs_device_init_dev_stats(struct btrfs_device *device,
7699                                        struct btrfs_path *path)
7700 {
7701         struct btrfs_dev_stats_item *ptr;
7702         struct extent_buffer *eb;
7703         struct btrfs_key key;
7704         int item_size;
7705         int i, ret, slot;
7706
7707         if (!device->fs_info->dev_root)
7708                 return 0;
7709
7710         key.objectid = BTRFS_DEV_STATS_OBJECTID;
7711         key.type = BTRFS_PERSISTENT_ITEM_KEY;
7712         key.offset = device->devid;
7713         ret = btrfs_search_slot(NULL, device->fs_info->dev_root, &key, path, 0, 0);
7714         if (ret) {
7715                 for (i = 0; i < BTRFS_DEV_STAT_VALUES_MAX; i++)
7716                         btrfs_dev_stat_set(device, i, 0);
7717                 device->dev_stats_valid = 1;
7718                 btrfs_release_path(path);
7719                 return ret < 0 ? ret : 0;
7720         }
7721         slot = path->slots[0];
7722         eb = path->nodes[0];
7723         item_size = btrfs_item_size_nr(eb, slot);
7724
7725         ptr = btrfs_item_ptr(eb, slot, struct btrfs_dev_stats_item);
7726
7727         for (i = 0; i < BTRFS_DEV_STAT_VALUES_MAX; i++) {
7728                 if (item_size >= (1 + i) * sizeof(__le64))
7729                         btrfs_dev_stat_set(device, i,
7730                                            btrfs_dev_stats_value(eb, ptr, i));
7731                 else
7732                         btrfs_dev_stat_set(device, i, 0);
7733         }
7734
7735         device->dev_stats_valid = 1;
7736         btrfs_dev_stat_print_on_load(device);
7737         btrfs_release_path(path);
7738
7739         return 0;
7740 }
7741
7742 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info)
7743 {
7744         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs;
7745         struct btrfs_device *device;
7746         struct btrfs_path *path = NULL;
7747         int ret = 0;
7748
7749         path = btrfs_alloc_path();
7750         if (!path)
7751                 return -ENOMEM;
7752
7753         mutex_lock(&fs_devices->device_list_mutex);
7754         list_for_each_entry(device, &fs_devices->devices, dev_list) {
7755                 ret = btrfs_device_init_dev_stats(device, path);
7756                 if (ret)
7757                         goto out;
7758         }
7759         list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) {
7760                 list_for_each_entry(device, &seed_devs->devices, dev_list) {
7761                         ret = btrfs_device_init_dev_stats(device, path);
7762                         if (ret)
7763                                 goto out;
7764                 }
7765         }
7766 out:
7767         mutex_unlock(&fs_devices->device_list_mutex);
7768
7769         btrfs_free_path(path);
7770         return ret;
7771 }
7772
7773 static int update_dev_stat_item(struct btrfs_trans_handle *trans,
7774                                 struct btrfs_device *device)
7775 {
7776         struct btrfs_fs_info *fs_info = trans->fs_info;
7777         struct btrfs_root *dev_root = fs_info->dev_root;
7778         struct btrfs_path *path;
7779         struct btrfs_key key;
7780         struct extent_buffer *eb;
7781         struct btrfs_dev_stats_item *ptr;
7782         int ret;
7783         int i;
7784
7785         key.objectid = BTRFS_DEV_STATS_OBJECTID;
7786         key.type = BTRFS_PERSISTENT_ITEM_KEY;
7787         key.offset = device->devid;
7788
7789         path = btrfs_alloc_path();
7790         if (!path)
7791                 return -ENOMEM;
7792         ret = btrfs_search_slot(trans, dev_root, &key, path, -1, 1);
7793         if (ret < 0) {
7794                 btrfs_warn_in_rcu(fs_info,
7795                         "error %d while searching for dev_stats item for device %s",
7796                               ret, rcu_str_deref(device->name));
7797                 goto out;
7798         }
7799
7800         if (ret == 0 &&
7801             btrfs_item_size_nr(path->nodes[0], path->slots[0]) < sizeof(*ptr)) {
7802                 /* need to delete old one and insert a new one */
7803                 ret = btrfs_del_item(trans, dev_root, path);
7804                 if (ret != 0) {
7805                         btrfs_warn_in_rcu(fs_info,
7806                                 "delete too small dev_stats item for device %s failed %d",
7807                                       rcu_str_deref(device->name), ret);
7808                         goto out;
7809                 }
7810                 ret = 1;
7811         }
7812
7813         if (ret == 1) {
7814                 /* need to insert a new item */
7815                 btrfs_release_path(path);
7816                 ret = btrfs_insert_empty_item(trans, dev_root, path,
7817                                               &key, sizeof(*ptr));
7818                 if (ret < 0) {
7819                         btrfs_warn_in_rcu(fs_info,
7820                                 "insert dev_stats item for device %s failed %d",
7821                                 rcu_str_deref(device->name), ret);
7822                         goto out;
7823                 }
7824         }
7825
7826         eb = path->nodes[0];
7827         ptr = btrfs_item_ptr(eb, path->slots[0], struct btrfs_dev_stats_item);
7828         for (i = 0; i < BTRFS_DEV_STAT_VALUES_MAX; i++)
7829                 btrfs_set_dev_stats_value(eb, ptr, i,
7830                                           btrfs_dev_stat_read(device, i));
7831         btrfs_mark_buffer_dirty(eb);
7832
7833 out:
7834         btrfs_free_path(path);
7835         return ret;
7836 }
7837
7838 /*
7839  * called from commit_transaction. Writes all changed device stats to disk.
7840  */
7841 int btrfs_run_dev_stats(struct btrfs_trans_handle *trans)
7842 {
7843         struct btrfs_fs_info *fs_info = trans->fs_info;
7844         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
7845         struct btrfs_device *device;
7846         int stats_cnt;
7847         int ret = 0;
7848
7849         mutex_lock(&fs_devices->device_list_mutex);
7850         list_for_each_entry(device, &fs_devices->devices, dev_list) {
7851                 stats_cnt = atomic_read(&device->dev_stats_ccnt);
7852                 if (!device->dev_stats_valid || stats_cnt == 0)
7853                         continue;
7854
7855
7856                 /*
7857                  * There is a LOAD-LOAD control dependency between the value of
7858                  * dev_stats_ccnt and updating the on-disk values which requires
7859                  * reading the in-memory counters. Such control dependencies
7860                  * require explicit read memory barriers.
7861                  *
7862                  * This memory barriers pairs with smp_mb__before_atomic in
7863                  * btrfs_dev_stat_inc/btrfs_dev_stat_set and with the full
7864                  * barrier implied by atomic_xchg in
7865                  * btrfs_dev_stats_read_and_reset
7866                  */
7867                 smp_rmb();
7868
7869                 ret = update_dev_stat_item(trans, device);
7870                 if (!ret)
7871                         atomic_sub(stats_cnt, &device->dev_stats_ccnt);
7872         }
7873         mutex_unlock(&fs_devices->device_list_mutex);
7874
7875         return ret;
7876 }
7877
7878 void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index)
7879 {
7880         btrfs_dev_stat_inc(dev, index);
7881         btrfs_dev_stat_print_on_error(dev);
7882 }
7883
7884 static void btrfs_dev_stat_print_on_error(struct btrfs_device *dev)
7885 {
7886         if (!dev->dev_stats_valid)
7887                 return;
7888         btrfs_err_rl_in_rcu(dev->fs_info,
7889                 "bdev %s errs: wr %u, rd %u, flush %u, corrupt %u, gen %u",
7890                            rcu_str_deref(dev->name),
7891                            btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_WRITE_ERRS),
7892                            btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_READ_ERRS),
7893                            btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_FLUSH_ERRS),
7894                            btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_CORRUPTION_ERRS),
7895                            btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_GENERATION_ERRS));
7896 }
7897
7898 static void btrfs_dev_stat_print_on_load(struct btrfs_device *dev)
7899 {
7900         int i;
7901
7902         for (i = 0; i < BTRFS_DEV_STAT_VALUES_MAX; i++)
7903                 if (btrfs_dev_stat_read(dev, i) != 0)
7904                         break;
7905         if (i == BTRFS_DEV_STAT_VALUES_MAX)
7906                 return; /* all values == 0, suppress message */
7907
7908         btrfs_info_in_rcu(dev->fs_info,
7909                 "bdev %s errs: wr %u, rd %u, flush %u, corrupt %u, gen %u",
7910                rcu_str_deref(dev->name),
7911                btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_WRITE_ERRS),
7912                btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_READ_ERRS),
7913                btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_FLUSH_ERRS),
7914                btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_CORRUPTION_ERRS),
7915                btrfs_dev_stat_read(dev, BTRFS_DEV_STAT_GENERATION_ERRS));
7916 }
7917
7918 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info,
7919                         struct btrfs_ioctl_get_dev_stats *stats)
7920 {
7921         BTRFS_DEV_LOOKUP_ARGS(args);
7922         struct btrfs_device *dev;
7923         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
7924         int i;
7925
7926         mutex_lock(&fs_devices->device_list_mutex);
7927         args.devid = stats->devid;
7928         dev = btrfs_find_device(fs_info->fs_devices, &args);
7929         mutex_unlock(&fs_devices->device_list_mutex);
7930
7931         if (!dev) {
7932                 btrfs_warn(fs_info, "get dev_stats failed, device not found");
7933                 return -ENODEV;
7934         } else if (!dev->dev_stats_valid) {
7935                 btrfs_warn(fs_info, "get dev_stats failed, not yet valid");
7936                 return -ENODEV;
7937         } else if (stats->flags & BTRFS_DEV_STATS_RESET) {
7938                 for (i = 0; i < BTRFS_DEV_STAT_VALUES_MAX; i++) {
7939                         if (stats->nr_items > i)
7940                                 stats->values[i] =
7941                                         btrfs_dev_stat_read_and_reset(dev, i);
7942                         else
7943                                 btrfs_dev_stat_set(dev, i, 0);
7944                 }
7945                 btrfs_info(fs_info, "device stats zeroed by %s (%d)",
7946                            current->comm, task_pid_nr(current));
7947         } else {
7948                 for (i = 0; i < BTRFS_DEV_STAT_VALUES_MAX; i++)
7949                         if (stats->nr_items > i)
7950                                 stats->values[i] = btrfs_dev_stat_read(dev, i);
7951         }
7952         if (stats->nr_items > BTRFS_DEV_STAT_VALUES_MAX)
7953                 stats->nr_items = BTRFS_DEV_STAT_VALUES_MAX;
7954         return 0;
7955 }
7956
7957 /*
7958  * Update the size and bytes used for each device where it changed.  This is
7959  * delayed since we would otherwise get errors while writing out the
7960  * superblocks.
7961  *
7962  * Must be invoked during transaction commit.
7963  */
7964 void btrfs_commit_device_sizes(struct btrfs_transaction *trans)
7965 {
7966         struct btrfs_device *curr, *next;
7967
7968         ASSERT(trans->state == TRANS_STATE_COMMIT_DOING);
7969
7970         if (list_empty(&trans->dev_update_list))
7971                 return;
7972
7973         /*
7974          * We don't need the device_list_mutex here.  This list is owned by the
7975          * transaction and the transaction must complete before the device is
7976          * released.
7977          */
7978         mutex_lock(&trans->fs_info->chunk_mutex);
7979         list_for_each_entry_safe(curr, next, &trans->dev_update_list,
7980                                  post_commit_list) {
7981                 list_del_init(&curr->post_commit_list);
7982                 curr->commit_total_bytes = curr->disk_total_bytes;
7983                 curr->commit_bytes_used = curr->bytes_used;
7984         }
7985         mutex_unlock(&trans->fs_info->chunk_mutex);
7986 }
7987
7988 /*
7989  * Multiplicity factor for simple profiles: DUP, RAID1-like and RAID10.
7990  */
7991 int btrfs_bg_type_to_factor(u64 flags)
7992 {
7993         const int index = btrfs_bg_flags_to_raid_index(flags);
7994
7995         return btrfs_raid_array[index].ncopies;
7996 }
7997
7998
7999
8000 static int verify_one_dev_extent(struct btrfs_fs_info *fs_info,
8001                                  u64 chunk_offset, u64 devid,
8002                                  u64 physical_offset, u64 physical_len)
8003 {
8004         struct btrfs_dev_lookup_args args = { .devid = devid };
8005         struct extent_map_tree *em_tree = &fs_info->mapping_tree;
8006         struct extent_map *em;
8007         struct map_lookup *map;
8008         struct btrfs_device *dev;
8009         u64 stripe_len;
8010         bool found = false;
8011         int ret = 0;
8012         int i;
8013
8014         read_lock(&em_tree->lock);
8015         em = lookup_extent_mapping(em_tree, chunk_offset, 1);
8016         read_unlock(&em_tree->lock);
8017
8018         if (!em) {
8019                 btrfs_err(fs_info,
8020 "dev extent physical offset %llu on devid %llu doesn't have corresponding chunk",
8021                           physical_offset, devid);
8022                 ret = -EUCLEAN;
8023                 goto out;
8024         }
8025
8026         map = em->map_lookup;
8027         stripe_len = calc_stripe_length(map->type, em->len, map->num_stripes);
8028         if (physical_len != stripe_len) {
8029                 btrfs_err(fs_info,
8030 "dev extent physical offset %llu on devid %llu length doesn't match chunk %llu, have %llu expect %llu",
8031                           physical_offset, devid, em->start, physical_len,
8032                           stripe_len);
8033                 ret = -EUCLEAN;
8034                 goto out;
8035         }
8036
8037         for (i = 0; i < map->num_stripes; i++) {
8038                 if (map->stripes[i].dev->devid == devid &&
8039                     map->stripes[i].physical == physical_offset) {
8040                         found = true;
8041                         if (map->verified_stripes >= map->num_stripes) {
8042                                 btrfs_err(fs_info,
8043                                 "too many dev extents for chunk %llu found",
8044                                           em->start);
8045                                 ret = -EUCLEAN;
8046                                 goto out;
8047                         }
8048                         map->verified_stripes++;
8049                         break;
8050                 }
8051         }
8052         if (!found) {
8053                 btrfs_err(fs_info,
8054         "dev extent physical offset %llu devid %llu has no corresponding chunk",
8055                         physical_offset, devid);
8056                 ret = -EUCLEAN;
8057         }
8058
8059         /* Make sure no dev extent is beyond device boundary */
8060         dev = btrfs_find_device(fs_info->fs_devices, &args);
8061         if (!dev) {
8062                 btrfs_err(fs_info, "failed to find devid %llu", devid);
8063                 ret = -EUCLEAN;
8064                 goto out;
8065         }
8066
8067         if (physical_offset + physical_len > dev->disk_total_bytes) {
8068                 btrfs_err(fs_info,
8069 "dev extent devid %llu physical offset %llu len %llu is beyond device boundary %llu",
8070                           devid, physical_offset, physical_len,
8071                           dev->disk_total_bytes);
8072                 ret = -EUCLEAN;
8073                 goto out;
8074         }
8075
8076         if (dev->zone_info) {
8077                 u64 zone_size = dev->zone_info->zone_size;
8078
8079                 if (!IS_ALIGNED(physical_offset, zone_size) ||
8080                     !IS_ALIGNED(physical_len, zone_size)) {
8081                         btrfs_err(fs_info,
8082 "zoned: dev extent devid %llu physical offset %llu len %llu is not aligned to device zone",
8083                                   devid, physical_offset, physical_len);
8084                         ret = -EUCLEAN;
8085                         goto out;
8086                 }
8087         }
8088
8089 out:
8090         free_extent_map(em);
8091         return ret;
8092 }
8093
8094 static int verify_chunk_dev_extent_mapping(struct btrfs_fs_info *fs_info)
8095 {
8096         struct extent_map_tree *em_tree = &fs_info->mapping_tree;
8097         struct extent_map *em;
8098         struct rb_node *node;
8099         int ret = 0;
8100
8101         read_lock(&em_tree->lock);
8102         for (node = rb_first_cached(&em_tree->map); node; node = rb_next(node)) {
8103                 em = rb_entry(node, struct extent_map, rb_node);
8104                 if (em->map_lookup->num_stripes !=
8105                     em->map_lookup->verified_stripes) {
8106                         btrfs_err(fs_info,
8107                         "chunk %llu has missing dev extent, have %d expect %d",
8108                                   em->start, em->map_lookup->verified_stripes,
8109                                   em->map_lookup->num_stripes);
8110                         ret = -EUCLEAN;
8111                         goto out;
8112                 }
8113         }
8114 out:
8115         read_unlock(&em_tree->lock);
8116         return ret;
8117 }
8118
8119 /*
8120  * Ensure that all dev extents are mapped to correct chunk, otherwise
8121  * later chunk allocation/free would cause unexpected behavior.
8122  *
8123  * NOTE: This will iterate through the whole device tree, which should be of
8124  * the same size level as the chunk tree.  This slightly increases mount time.
8125  */
8126 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info)
8127 {
8128         struct btrfs_path *path;
8129         struct btrfs_root *root = fs_info->dev_root;
8130         struct btrfs_key key;
8131         u64 prev_devid = 0;
8132         u64 prev_dev_ext_end = 0;
8133         int ret = 0;
8134
8135         /*
8136          * We don't have a dev_root because we mounted with ignorebadroots and
8137          * failed to load the root, so we want to skip the verification in this
8138          * case for sure.
8139          *
8140          * However if the dev root is fine, but the tree itself is corrupted
8141          * we'd still fail to mount.  This verification is only to make sure
8142          * writes can happen safely, so instead just bypass this check
8143          * completely in the case of IGNOREBADROOTS.
8144          */
8145         if (btrfs_test_opt(fs_info, IGNOREBADROOTS))
8146                 return 0;
8147
8148         key.objectid = 1;
8149         key.type = BTRFS_DEV_EXTENT_KEY;
8150         key.offset = 0;
8151
8152         path = btrfs_alloc_path();
8153         if (!path)
8154                 return -ENOMEM;
8155
8156         path->reada = READA_FORWARD;
8157         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
8158         if (ret < 0)
8159                 goto out;
8160
8161         if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
8162                 ret = btrfs_next_leaf(root, path);
8163                 if (ret < 0)
8164                         goto out;
8165                 /* No dev extents at all? Not good */
8166                 if (ret > 0) {
8167                         ret = -EUCLEAN;
8168                         goto out;
8169                 }
8170         }
8171         while (1) {
8172                 struct extent_buffer *leaf = path->nodes[0];
8173                 struct btrfs_dev_extent *dext;
8174                 int slot = path->slots[0];
8175                 u64 chunk_offset;
8176                 u64 physical_offset;
8177                 u64 physical_len;
8178                 u64 devid;
8179
8180                 btrfs_item_key_to_cpu(leaf, &key, slot);
8181                 if (key.type != BTRFS_DEV_EXTENT_KEY)
8182                         break;
8183                 devid = key.objectid;
8184                 physical_offset = key.offset;
8185
8186                 dext = btrfs_item_ptr(leaf, slot, struct btrfs_dev_extent);
8187                 chunk_offset = btrfs_dev_extent_chunk_offset(leaf, dext);
8188                 physical_len = btrfs_dev_extent_length(leaf, dext);
8189
8190                 /* Check if this dev extent overlaps with the previous one */
8191                 if (devid == prev_devid && physical_offset < prev_dev_ext_end) {
8192                         btrfs_err(fs_info,
8193 "dev extent devid %llu physical offset %llu overlap with previous dev extent end %llu",
8194                                   devid, physical_offset, prev_dev_ext_end);
8195                         ret = -EUCLEAN;
8196                         goto out;
8197                 }
8198
8199                 ret = verify_one_dev_extent(fs_info, chunk_offset, devid,
8200                                             physical_offset, physical_len);
8201                 if (ret < 0)
8202                         goto out;
8203                 prev_devid = devid;
8204                 prev_dev_ext_end = physical_offset + physical_len;
8205
8206                 ret = btrfs_next_item(root, path);
8207                 if (ret < 0)
8208                         goto out;
8209                 if (ret > 0) {
8210                         ret = 0;
8211                         break;
8212                 }
8213         }
8214
8215         /* Ensure all chunks have corresponding dev extents */
8216         ret = verify_chunk_dev_extent_mapping(fs_info);
8217 out:
8218         btrfs_free_path(path);
8219         return ret;
8220 }
8221
8222 /*
8223  * Check whether the given block group or device is pinned by any inode being
8224  * used as a swapfile.
8225  */
8226 bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *fs_info, void *ptr)
8227 {
8228         struct btrfs_swapfile_pin *sp;
8229         struct rb_node *node;
8230
8231         spin_lock(&fs_info->swapfile_pins_lock);
8232         node = fs_info->swapfile_pins.rb_node;
8233         while (node) {
8234                 sp = rb_entry(node, struct btrfs_swapfile_pin, node);
8235                 if (ptr < sp->ptr)
8236                         node = node->rb_left;
8237                 else if (ptr > sp->ptr)
8238                         node = node->rb_right;
8239                 else
8240                         break;
8241         }
8242         spin_unlock(&fs_info->swapfile_pins_lock);
8243         return node != NULL;
8244 }
8245
8246 static int relocating_repair_kthread(void *data)
8247 {
8248         struct btrfs_block_group *cache = (struct btrfs_block_group *)data;
8249         struct btrfs_fs_info *fs_info = cache->fs_info;
8250         u64 target;
8251         int ret = 0;
8252
8253         target = cache->start;
8254         btrfs_put_block_group(cache);
8255
8256         if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE)) {
8257                 btrfs_info(fs_info,
8258                            "zoned: skip relocating block group %llu to repair: EBUSY",
8259                            target);
8260                 return -EBUSY;
8261         }
8262
8263         mutex_lock(&fs_info->reclaim_bgs_lock);
8264
8265         /* Ensure block group still exists */
8266         cache = btrfs_lookup_block_group(fs_info, target);
8267         if (!cache)
8268                 goto out;
8269
8270         if (!cache->relocating_repair)
8271                 goto out;
8272
8273         ret = btrfs_may_alloc_data_chunk(fs_info, target);
8274         if (ret < 0)
8275                 goto out;
8276
8277         btrfs_info(fs_info,
8278                    "zoned: relocating block group %llu to repair IO failure",
8279                    target);
8280         ret = btrfs_relocate_chunk(fs_info, target);
8281
8282 out:
8283         if (cache)
8284                 btrfs_put_block_group(cache);
8285         mutex_unlock(&fs_info->reclaim_bgs_lock);
8286         btrfs_exclop_finish(fs_info);
8287
8288         return ret;
8289 }
8290
8291 int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical)
8292 {
8293         struct btrfs_block_group *cache;
8294
8295         /* Do not attempt to repair in degraded state */
8296         if (btrfs_test_opt(fs_info, DEGRADED))
8297                 return 0;
8298
8299         cache = btrfs_lookup_block_group(fs_info, logical);
8300         if (!cache)
8301                 return 0;
8302
8303         spin_lock(&cache->lock);
8304         if (cache->relocating_repair) {
8305                 spin_unlock(&cache->lock);
8306                 btrfs_put_block_group(cache);
8307                 return 0;
8308         }
8309         cache->relocating_repair = 1;
8310         spin_unlock(&cache->lock);
8311
8312         kthread_run(relocating_repair_kthread, cache,
8313                     "btrfs-relocating-repair");
8314
8315         return 0;
8316 }