1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2007 Oracle. All rights reserved. 4 */ 5 6 #ifndef BTRFS_VOLUMES_H 7 #define BTRFS_VOLUMES_H 8 9 #include <linux/bio.h> 10 #include <linux/sort.h> 11 #include <linux/btrfs.h> 12 #include "async-thread.h" 13 14 #define BTRFS_MAX_DATA_CHUNK_SIZE (10ULL * SZ_1G) 15 16 extern struct mutex uuid_mutex; 17 18 #define BTRFS_STRIPE_LEN SZ_64K 19 20 /* Used by sanity check for btrfs_raid_types. */ 21 #define const_ffs(n) (__builtin_ctzll(n) + 1) 22 23 /* 24 * The conversion from BTRFS_BLOCK_GROUP_* bits to btrfs_raid_type requires 25 * RAID0 always to be the lowest profile bit. 26 * Although it's part of on-disk format and should never change, do extra 27 * compile-time sanity checks. 28 */ 29 static_assert(const_ffs(BTRFS_BLOCK_GROUP_RAID0) < 30 const_ffs(BTRFS_BLOCK_GROUP_PROFILE_MASK & ~BTRFS_BLOCK_GROUP_RAID0)); 31 static_assert(const_ilog2(BTRFS_BLOCK_GROUP_RAID0) > 32 ilog2(BTRFS_BLOCK_GROUP_TYPE_MASK)); 33 34 /* ilog2() can handle both constants and variables */ 35 #define BTRFS_BG_FLAG_TO_INDEX(profile) \ 36 ilog2((profile) >> (ilog2(BTRFS_BLOCK_GROUP_RAID0) - 1)) 37 38 enum btrfs_raid_types { 39 /* SINGLE is the special one as it doesn't have on-disk bit. */ 40 BTRFS_RAID_SINGLE = 0, 41 42 BTRFS_RAID_RAID0 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID0), 43 BTRFS_RAID_RAID1 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID1), 44 BTRFS_RAID_DUP = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_DUP), 45 BTRFS_RAID_RAID10 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID10), 46 BTRFS_RAID_RAID5 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID5), 47 BTRFS_RAID_RAID6 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID6), 48 BTRFS_RAID_RAID1C3 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID1C3), 49 BTRFS_RAID_RAID1C4 = BTRFS_BG_FLAG_TO_INDEX(BTRFS_BLOCK_GROUP_RAID1C4), 50 51 BTRFS_NR_RAID_TYPES 52 }; 53 54 struct btrfs_io_geometry { 55 /* remaining bytes before crossing a stripe */ 56 u64 len; 57 /* offset of logical address in chunk */ 58 u64 offset; 59 /* length of single IO stripe */ 60 u32 stripe_len; 61 /* offset of address in stripe */ 62 u32 stripe_offset; 63 /* number of stripe where address falls */ 64 u64 stripe_nr; 65 /* offset of raid56 stripe into the chunk */ 66 u64 raid56_stripe_offset; 67 }; 68 69 /* 70 * Use sequence counter to get consistent device stat data on 71 * 32-bit processors. 72 */ 73 #if BITS_PER_LONG==32 && defined(CONFIG_SMP) 74 #include <linux/seqlock.h> 75 #define __BTRFS_NEED_DEVICE_DATA_ORDERED 76 #define btrfs_device_data_ordered_init(device) \ 77 seqcount_init(&device->data_seqcount) 78 #else 79 #define btrfs_device_data_ordered_init(device) do { } while (0) 80 #endif 81 82 #define BTRFS_DEV_STATE_WRITEABLE (0) 83 #define BTRFS_DEV_STATE_IN_FS_METADATA (1) 84 #define BTRFS_DEV_STATE_MISSING (2) 85 #define BTRFS_DEV_STATE_REPLACE_TGT (3) 86 #define BTRFS_DEV_STATE_FLUSH_SENT (4) 87 #define BTRFS_DEV_STATE_NO_READA (5) 88 89 struct btrfs_zoned_device_info; 90 91 struct btrfs_device { 92 struct list_head dev_list; /* device_list_mutex */ 93 struct list_head dev_alloc_list; /* chunk mutex */ 94 struct list_head post_commit_list; /* chunk mutex */ 95 struct btrfs_fs_devices *fs_devices; 96 struct btrfs_fs_info *fs_info; 97 98 struct rcu_string __rcu *name; 99 100 u64 generation; 101 102 struct block_device *bdev; 103 104 struct btrfs_zoned_device_info *zone_info; 105 106 /* the mode sent to blkdev_get */ 107 fmode_t mode; 108 109 /* 110 * Device's major-minor number. Must be set even if the device is not 111 * opened (bdev == NULL), unless the device is missing. 112 */ 113 dev_t devt; 114 unsigned long dev_state; 115 blk_status_t last_flush_error; 116 117 #ifdef __BTRFS_NEED_DEVICE_DATA_ORDERED 118 seqcount_t data_seqcount; 119 #endif 120 121 /* the internal btrfs device id */ 122 u64 devid; 123 124 /* size of the device in memory */ 125 u64 total_bytes; 126 127 /* size of the device on disk */ 128 u64 disk_total_bytes; 129 130 /* bytes used */ 131 u64 bytes_used; 132 133 /* optimal io alignment for this device */ 134 u32 io_align; 135 136 /* optimal io width for this device */ 137 u32 io_width; 138 /* type and info about this device */ 139 u64 type; 140 141 /* minimal io size for this device */ 142 u32 sector_size; 143 144 /* physical drive uuid (or lvm uuid) */ 145 u8 uuid[BTRFS_UUID_SIZE]; 146 147 /* 148 * size of the device on the current transaction 149 * 150 * This variant is update when committing the transaction, 151 * and protected by chunk mutex 152 */ 153 u64 commit_total_bytes; 154 155 /* bytes used on the current transaction */ 156 u64 commit_bytes_used; 157 158 /* Bio used for flushing device barriers */ 159 struct bio flush_bio; 160 struct completion flush_wait; 161 162 /* per-device scrub information */ 163 struct scrub_ctx *scrub_ctx; 164 165 /* disk I/O failure stats. For detailed description refer to 166 * enum btrfs_dev_stat_values in ioctl.h */ 167 int dev_stats_valid; 168 169 /* Counter to record the change of device stats */ 170 atomic_t dev_stats_ccnt; 171 atomic_t dev_stat_values[BTRFS_DEV_STAT_VALUES_MAX]; 172 173 struct extent_io_tree alloc_state; 174 175 struct completion kobj_unregister; 176 /* For sysfs/FSID/devinfo/devid/ */ 177 struct kobject devid_kobj; 178 179 /* Bandwidth limit for scrub, in bytes */ 180 u64 scrub_speed_max; 181 }; 182 183 /* 184 * If we read those variants at the context of their own lock, we needn't 185 * use the following helpers, reading them directly is safe. 186 */ 187 #if BITS_PER_LONG==32 && defined(CONFIG_SMP) 188 #define BTRFS_DEVICE_GETSET_FUNCS(name) \ 189 static inline u64 \ 190 btrfs_device_get_##name(const struct btrfs_device *dev) \ 191 { \ 192 u64 size; \ 193 unsigned int seq; \ 194 \ 195 do { \ 196 seq = read_seqcount_begin(&dev->data_seqcount); \ 197 size = dev->name; \ 198 } while (read_seqcount_retry(&dev->data_seqcount, seq)); \ 199 return size; \ 200 } \ 201 \ 202 static inline void \ 203 btrfs_device_set_##name(struct btrfs_device *dev, u64 size) \ 204 { \ 205 preempt_disable(); \ 206 write_seqcount_begin(&dev->data_seqcount); \ 207 dev->name = size; \ 208 write_seqcount_end(&dev->data_seqcount); \ 209 preempt_enable(); \ 210 } 211 #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPTION) 212 #define BTRFS_DEVICE_GETSET_FUNCS(name) \ 213 static inline u64 \ 214 btrfs_device_get_##name(const struct btrfs_device *dev) \ 215 { \ 216 u64 size; \ 217 \ 218 preempt_disable(); \ 219 size = dev->name; \ 220 preempt_enable(); \ 221 return size; \ 222 } \ 223 \ 224 static inline void \ 225 btrfs_device_set_##name(struct btrfs_device *dev, u64 size) \ 226 { \ 227 preempt_disable(); \ 228 dev->name = size; \ 229 preempt_enable(); \ 230 } 231 #else 232 #define BTRFS_DEVICE_GETSET_FUNCS(name) \ 233 static inline u64 \ 234 btrfs_device_get_##name(const struct btrfs_device *dev) \ 235 { \ 236 return dev->name; \ 237 } \ 238 \ 239 static inline void \ 240 btrfs_device_set_##name(struct btrfs_device *dev, u64 size) \ 241 { \ 242 dev->name = size; \ 243 } 244 #endif 245 246 BTRFS_DEVICE_GETSET_FUNCS(total_bytes); 247 BTRFS_DEVICE_GETSET_FUNCS(disk_total_bytes); 248 BTRFS_DEVICE_GETSET_FUNCS(bytes_used); 249 250 enum btrfs_chunk_allocation_policy { 251 BTRFS_CHUNK_ALLOC_REGULAR, 252 BTRFS_CHUNK_ALLOC_ZONED, 253 }; 254 255 /* 256 * Read policies for mirrored block group profiles, read picks the stripe based 257 * on these policies. 258 */ 259 enum btrfs_read_policy { 260 /* Use process PID to choose the stripe */ 261 BTRFS_READ_POLICY_PID, 262 BTRFS_NR_READ_POLICY, 263 }; 264 265 struct btrfs_fs_devices { 266 u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */ 267 u8 metadata_uuid[BTRFS_FSID_SIZE]; 268 bool fsid_change; 269 struct list_head fs_list; 270 271 /* 272 * Number of devices under this fsid including missing and 273 * replace-target device and excludes seed devices. 274 */ 275 u64 num_devices; 276 277 /* 278 * The number of devices that successfully opened, including 279 * replace-target, excludes seed devices. 280 */ 281 u64 open_devices; 282 283 /* The number of devices that are under the chunk allocation list. */ 284 u64 rw_devices; 285 286 /* Count of missing devices under this fsid excluding seed device. */ 287 u64 missing_devices; 288 u64 total_rw_bytes; 289 290 /* 291 * Count of devices from btrfs_super_block::num_devices for this fsid, 292 * which includes the seed device, excludes the transient replace-target 293 * device. 294 */ 295 u64 total_devices; 296 297 /* Highest generation number of seen devices */ 298 u64 latest_generation; 299 300 /* 301 * The mount device or a device with highest generation after removal 302 * or replace. 303 */ 304 struct btrfs_device *latest_dev; 305 306 /* all of the devices in the FS, protected by a mutex 307 * so we can safely walk it to write out the supers without 308 * worrying about add/remove by the multi-device code. 309 * Scrubbing super can kick off supers writing by holding 310 * this mutex lock. 311 */ 312 struct mutex device_list_mutex; 313 314 /* List of all devices, protected by device_list_mutex */ 315 struct list_head devices; 316 317 /* 318 * Devices which can satisfy space allocation. Protected by 319 * chunk_mutex 320 */ 321 struct list_head alloc_list; 322 323 struct list_head seed_list; 324 bool seeding; 325 326 int opened; 327 328 /* set when we find or add a device that doesn't have the 329 * nonrot flag set 330 */ 331 bool rotating; 332 333 struct btrfs_fs_info *fs_info; 334 /* sysfs kobjects */ 335 struct kobject fsid_kobj; 336 struct kobject *devices_kobj; 337 struct kobject *devinfo_kobj; 338 struct completion kobj_unregister; 339 340 enum btrfs_chunk_allocation_policy chunk_alloc_policy; 341 342 /* Policy used to read the mirrored stripes */ 343 enum btrfs_read_policy read_policy; 344 }; 345 346 #define BTRFS_BIO_INLINE_CSUM_SIZE 64 347 348 #define BTRFS_MAX_DEVS(info) ((BTRFS_MAX_ITEM_SIZE(info) \ 349 - sizeof(struct btrfs_chunk)) \ 350 / sizeof(struct btrfs_stripe) + 1) 351 352 #define BTRFS_MAX_DEVS_SYS_CHUNK ((BTRFS_SYSTEM_CHUNK_ARRAY_SIZE \ 353 - 2 * sizeof(struct btrfs_disk_key) \ 354 - 2 * sizeof(struct btrfs_chunk)) \ 355 / sizeof(struct btrfs_stripe) + 1) 356 357 /* 358 * Maximum number of sectors for a single bio to limit the size of the 359 * checksum array. This matches the number of bio_vecs per bio and thus the 360 * I/O size for buffered I/O. 361 */ 362 #define BTRFS_MAX_BIO_SECTORS (256) 363 364 /* 365 * Additional info to pass along bio. 366 * 367 * Mostly for btrfs specific features like csum and mirror_num. 368 */ 369 struct btrfs_bio { 370 unsigned int mirror_num; 371 372 /* for direct I/O */ 373 u64 file_offset; 374 375 /* @device is for stripe IO submission. */ 376 struct btrfs_device *device; 377 u8 *csum; 378 u8 csum_inline[BTRFS_BIO_INLINE_CSUM_SIZE]; 379 struct bvec_iter iter; 380 381 /* For read end I/O handling */ 382 struct work_struct end_io_work; 383 384 /* 385 * This member must come last, bio_alloc_bioset will allocate enough 386 * bytes for entire btrfs_bio but relies on bio being last. 387 */ 388 struct bio bio; 389 }; 390 391 static inline struct btrfs_bio *btrfs_bio(struct bio *bio) 392 { 393 return container_of(bio, struct btrfs_bio, bio); 394 } 395 396 static inline void btrfs_bio_free_csum(struct btrfs_bio *bbio) 397 { 398 if (bbio->csum != bbio->csum_inline) { 399 kfree(bbio->csum); 400 bbio->csum = NULL; 401 } 402 } 403 404 /* 405 * Iterate through a btrfs_bio (@bbio) on a per-sector basis. 406 * 407 * bvl - struct bio_vec 408 * bbio - struct btrfs_bio 409 * iters - struct bvec_iter 410 * bio_offset - unsigned int 411 */ 412 #define btrfs_bio_for_each_sector(fs_info, bvl, bbio, iter, bio_offset) \ 413 for ((iter) = (bbio)->iter, (bio_offset) = 0; \ 414 (iter).bi_size && \ 415 (((bvl) = bio_iter_iovec((&(bbio)->bio), (iter))), 1); \ 416 (bio_offset) += fs_info->sectorsize, \ 417 bio_advance_iter_single(&(bbio)->bio, &(iter), \ 418 (fs_info)->sectorsize)) 419 420 struct btrfs_io_stripe { 421 struct btrfs_device *dev; 422 union { 423 /* Block mapping */ 424 u64 physical; 425 /* For the endio handler */ 426 struct btrfs_io_context *bioc; 427 }; 428 }; 429 430 struct btrfs_discard_stripe { 431 struct btrfs_device *dev; 432 u64 physical; 433 u64 length; 434 }; 435 436 /* 437 * Context for IO subsmission for device stripe. 438 * 439 * - Track the unfinished mirrors for mirror based profiles 440 * Mirror based profiles are SINGLE/DUP/RAID1/RAID10. 441 * 442 * - Contain the logical -> physical mapping info 443 * Used by submit_stripe_bio() for mapping logical bio 444 * into physical device address. 445 * 446 * - Contain device replace info 447 * Used by handle_ops_on_dev_replace() to copy logical bios 448 * into the new device. 449 * 450 * - Contain RAID56 full stripe logical bytenrs 451 */ 452 struct btrfs_io_context { 453 refcount_t refs; 454 atomic_t stripes_pending; 455 struct btrfs_fs_info *fs_info; 456 u64 map_type; /* get from map_lookup->type */ 457 bio_end_io_t *end_io; 458 struct bio *orig_bio; 459 void *private; 460 atomic_t error; 461 int max_errors; 462 int num_stripes; 463 int mirror_num; 464 int num_tgtdevs; 465 int *tgtdev_map; 466 /* 467 * logical block numbers for the start of each stripe 468 * The last one or two are p/q. These are sorted, 469 * so raid_map[0] is the start of our full stripe 470 */ 471 u64 *raid_map; 472 struct btrfs_io_stripe stripes[]; 473 }; 474 475 struct btrfs_device_info { 476 struct btrfs_device *dev; 477 u64 dev_offset; 478 u64 max_avail; 479 u64 total_avail; 480 }; 481 482 struct btrfs_raid_attr { 483 u8 sub_stripes; /* sub_stripes info for map */ 484 u8 dev_stripes; /* stripes per dev */ 485 u8 devs_max; /* max devs to use */ 486 u8 devs_min; /* min devs needed */ 487 u8 tolerated_failures; /* max tolerated fail devs */ 488 u8 devs_increment; /* ndevs has to be a multiple of this */ 489 u8 ncopies; /* how many copies to data has */ 490 u8 nparity; /* number of stripes worth of bytes to store 491 * parity information */ 492 u8 mindev_error; /* error code if min devs requisite is unmet */ 493 const char raid_name[8]; /* name of the raid */ 494 u64 bg_flag; /* block group flag of the raid */ 495 }; 496 497 extern const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES]; 498 499 struct map_lookup { 500 u64 type; 501 int io_align; 502 int io_width; 503 u32 stripe_len; 504 int num_stripes; 505 int sub_stripes; 506 int verified_stripes; /* For mount time dev extent verification */ 507 struct btrfs_io_stripe stripes[]; 508 }; 509 510 #define map_lookup_size(n) (sizeof(struct map_lookup) + \ 511 (sizeof(struct btrfs_io_stripe) * (n))) 512 513 struct btrfs_balance_args; 514 struct btrfs_balance_progress; 515 struct btrfs_balance_control { 516 struct btrfs_balance_args data; 517 struct btrfs_balance_args meta; 518 struct btrfs_balance_args sys; 519 520 u64 flags; 521 522 struct btrfs_balance_progress stat; 523 }; 524 525 /* 526 * Search for a given device by the set parameters 527 */ 528 struct btrfs_dev_lookup_args { 529 u64 devid; 530 u8 *uuid; 531 u8 *fsid; 532 bool missing; 533 }; 534 535 /* We have to initialize to -1 because BTRFS_DEV_REPLACE_DEVID is 0 */ 536 #define BTRFS_DEV_LOOKUP_ARGS_INIT { .devid = (u64)-1 } 537 538 #define BTRFS_DEV_LOOKUP_ARGS(name) \ 539 struct btrfs_dev_lookup_args name = BTRFS_DEV_LOOKUP_ARGS_INIT 540 541 enum btrfs_map_op { 542 BTRFS_MAP_READ, 543 BTRFS_MAP_WRITE, 544 BTRFS_MAP_DISCARD, 545 BTRFS_MAP_GET_READ_MIRRORS, 546 }; 547 548 static inline enum btrfs_map_op btrfs_op(struct bio *bio) 549 { 550 switch (bio_op(bio)) { 551 case REQ_OP_DISCARD: 552 return BTRFS_MAP_DISCARD; 553 case REQ_OP_WRITE: 554 case REQ_OP_ZONE_APPEND: 555 return BTRFS_MAP_WRITE; 556 default: 557 WARN_ON_ONCE(1); 558 fallthrough; 559 case REQ_OP_READ: 560 return BTRFS_MAP_READ; 561 } 562 } 563 564 void btrfs_get_bioc(struct btrfs_io_context *bioc); 565 void btrfs_put_bioc(struct btrfs_io_context *bioc); 566 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, 567 u64 logical, u64 *length, 568 struct btrfs_io_context **bioc_ret, int mirror_num); 569 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, 570 u64 logical, u64 *length, 571 struct btrfs_io_context **bioc_ret); 572 struct btrfs_discard_stripe *btrfs_map_discard(struct btrfs_fs_info *fs_info, 573 u64 logical, u64 *length_ret, 574 u32 *num_stripes); 575 int btrfs_get_io_geometry(struct btrfs_fs_info *fs_info, struct extent_map *map, 576 enum btrfs_map_op op, u64 logical, 577 struct btrfs_io_geometry *io_geom); 578 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info); 579 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info); 580 struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans, 581 u64 type); 582 void btrfs_mapping_tree_free(struct extent_map_tree *tree); 583 void btrfs_submit_bio(struct btrfs_fs_info *fs_info, struct bio *bio, int mirror_num); 584 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, 585 fmode_t flags, void *holder); 586 struct btrfs_device *btrfs_scan_one_device(const char *path, 587 fmode_t flags, void *holder); 588 int btrfs_forget_devices(dev_t devt); 589 void btrfs_close_devices(struct btrfs_fs_devices *fs_devices); 590 void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices); 591 void btrfs_assign_next_active_device(struct btrfs_device *device, 592 struct btrfs_device *this_dev); 593 struct btrfs_device *btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, 594 u64 devid, 595 const char *devpath); 596 int btrfs_get_dev_args_from_path(struct btrfs_fs_info *fs_info, 597 struct btrfs_dev_lookup_args *args, 598 const char *path); 599 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, 600 const u64 *devid, 601 const u8 *uuid); 602 void btrfs_put_dev_args_from_path(struct btrfs_dev_lookup_args *args); 603 void btrfs_free_device(struct btrfs_device *device); 604 int btrfs_rm_device(struct btrfs_fs_info *fs_info, 605 struct btrfs_dev_lookup_args *args, 606 struct block_device **bdev, fmode_t *mode); 607 void __exit btrfs_cleanup_fs_uuids(void); 608 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len); 609 int btrfs_grow_device(struct btrfs_trans_handle *trans, 610 struct btrfs_device *device, u64 new_size); 611 struct btrfs_device *btrfs_find_device(const struct btrfs_fs_devices *fs_devices, 612 const struct btrfs_dev_lookup_args *args); 613 int btrfs_shrink_device(struct btrfs_device *device, u64 new_size); 614 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *path); 615 int btrfs_balance(struct btrfs_fs_info *fs_info, 616 struct btrfs_balance_control *bctl, 617 struct btrfs_ioctl_balance_args *bargs); 618 void btrfs_describe_block_groups(u64 flags, char *buf, u32 size_buf); 619 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info); 620 int btrfs_recover_balance(struct btrfs_fs_info *fs_info); 621 int btrfs_pause_balance(struct btrfs_fs_info *fs_info); 622 int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset); 623 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info); 624 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info); 625 int btrfs_uuid_scan_kthread(void *data); 626 bool btrfs_chunk_writeable(struct btrfs_fs_info *fs_info, u64 chunk_offset); 627 int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes, 628 u64 *start, u64 *max_avail); 629 void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index); 630 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info, 631 struct btrfs_ioctl_get_dev_stats *stats); 632 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info); 633 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info); 634 int btrfs_run_dev_stats(struct btrfs_trans_handle *trans); 635 void btrfs_rm_dev_replace_remove_srcdev(struct btrfs_device *srcdev); 636 void btrfs_rm_dev_replace_free_srcdev(struct btrfs_device *srcdev); 637 void btrfs_destroy_dev_replace_tgtdev(struct btrfs_device *tgtdev); 638 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info, 639 u64 logical, u64 len); 640 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info, 641 u64 logical); 642 u64 btrfs_calc_stripe_length(const struct extent_map *em); 643 int btrfs_nr_parity_stripes(u64 type); 644 int btrfs_chunk_alloc_add_chunk_item(struct btrfs_trans_handle *trans, 645 struct btrfs_block_group *bg); 646 int btrfs_remove_chunk(struct btrfs_trans_handle *trans, u64 chunk_offset); 647 struct extent_map *btrfs_get_chunk_map(struct btrfs_fs_info *fs_info, 648 u64 logical, u64 length); 649 void btrfs_release_disk_super(struct btrfs_super_block *super); 650 651 static inline void btrfs_dev_stat_inc(struct btrfs_device *dev, 652 int index) 653 { 654 atomic_inc(dev->dev_stat_values + index); 655 /* 656 * This memory barrier orders stores updating statistics before stores 657 * updating dev_stats_ccnt. 658 * 659 * It pairs with smp_rmb() in btrfs_run_dev_stats(). 660 */ 661 smp_mb__before_atomic(); 662 atomic_inc(&dev->dev_stats_ccnt); 663 } 664 665 static inline int btrfs_dev_stat_read(struct btrfs_device *dev, 666 int index) 667 { 668 return atomic_read(dev->dev_stat_values + index); 669 } 670 671 static inline int btrfs_dev_stat_read_and_reset(struct btrfs_device *dev, 672 int index) 673 { 674 int ret; 675 676 ret = atomic_xchg(dev->dev_stat_values + index, 0); 677 /* 678 * atomic_xchg implies a full memory barriers as per atomic_t.txt: 679 * - RMW operations that have a return value are fully ordered; 680 * 681 * This implicit memory barriers is paired with the smp_rmb in 682 * btrfs_run_dev_stats 683 */ 684 atomic_inc(&dev->dev_stats_ccnt); 685 return ret; 686 } 687 688 static inline void btrfs_dev_stat_set(struct btrfs_device *dev, 689 int index, unsigned long val) 690 { 691 atomic_set(dev->dev_stat_values + index, val); 692 /* 693 * This memory barrier orders stores updating statistics before stores 694 * updating dev_stats_ccnt. 695 * 696 * It pairs with smp_rmb() in btrfs_run_dev_stats(). 697 */ 698 smp_mb__before_atomic(); 699 atomic_inc(&dev->dev_stats_ccnt); 700 } 701 702 void btrfs_commit_device_sizes(struct btrfs_transaction *trans); 703 704 struct list_head * __attribute_const__ btrfs_get_fs_uuids(void); 705 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info, 706 struct btrfs_device *failing_dev); 707 void btrfs_scratch_superblocks(struct btrfs_fs_info *fs_info, 708 struct block_device *bdev, 709 const char *device_path); 710 711 enum btrfs_raid_types __attribute_const__ btrfs_bg_flags_to_raid_index(u64 flags); 712 int btrfs_bg_type_to_factor(u64 flags); 713 const char *btrfs_bg_type_to_raid_name(u64 flags); 714 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info); 715 bool btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical); 716 717 #endif 718