fs/btrfs/disk-io.c: In function 'open_ctree':
fs/btrfs/disk-io.c:2783:2: error: implicit declaration of function
'btrfs_free_extra_devids'; did you mean 'btrfs_free_extra_devid'?
[-Werror=implicit-function-declaration]
btrfs_free_extra_devids(fs_devices, 0);
^~~~~~~~~~~~~~~~~~~~~~~
btrfs_free_extra_devid
cc1: some warnings being treated as errors
vim +2783 fs/btrfs/disk-io.c
2396
2397 int open_ctree(struct super_block *sb,
2398 struct btrfs_fs_devices *fs_devices,
2399 char *options)
2400 {
2401 u32 sectorsize;
2402 u32 nodesize;
2403 u32 stripesize;
2404 u64 generation;
2405 u64 features;
2406 struct btrfs_key location;
2407 struct buffer_head *bh;
2408 struct btrfs_super_block *disk_super;
2409 struct btrfs_fs_info *fs_info = btrfs_sb(sb);
2410 struct btrfs_root *tree_root;
2411 struct btrfs_root *chunk_root;
2412 int ret;
2413 int err = -EINVAL;
2414 int num_backups_tried = 0;
2415 int backup_index = 0;
2416 int max_active;
2417 int clear_free_space_tree = 0;
2418
2419 tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info,
GFP_KERNEL);
2420 chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info,
GFP_KERNEL);
2421 if (!tree_root || !chunk_root) {
2422 err = -ENOMEM;
2423 goto fail;
2424 }
2425
2426 ret = init_srcu_struct(&fs_info->subvol_srcu);
2427 if (ret) {
2428 err = ret;
2429 goto fail;
2430 }
2431
2432 ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0,
GFP_KERNEL);
2433 if (ret) {
2434 err = ret;
2435 goto fail_srcu;
2436 }
2437 fs_info->dirty_metadata_batch = PAGE_SIZE *
2438 (1 + ilog2(nr_cpu_ids));
2439
2440 ret = percpu_counter_init(&fs_info->delalloc_bytes, 0,
GFP_KERNEL);
2441 if (ret) {
2442 err = ret;
2443 goto fail_dirty_metadata_bytes;
2444 }
2445
2446 ret = percpu_counter_init(&fs_info->bio_counter, 0, GFP_KERNEL);
2447 if (ret) {
2448 err = ret;
2449 goto fail_delalloc_bytes;
2450 }
2451
2452 INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC);
2453 INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC);
2454 INIT_LIST_HEAD(&fs_info->trans_list);
2455 INIT_LIST_HEAD(&fs_info->dead_roots);
2456 INIT_LIST_HEAD(&fs_info->delayed_iputs);
2457 INIT_LIST_HEAD(&fs_info->delalloc_roots);
2458 INIT_LIST_HEAD(&fs_info->caching_block_groups);
2459 spin_lock_init(&fs_info->delalloc_root_lock);
2460 spin_lock_init(&fs_info->trans_lock);
2461 spin_lock_init(&fs_info->fs_roots_radix_lock);
2462 spin_lock_init(&fs_info->delayed_iput_lock);
2463 spin_lock_init(&fs_info->defrag_inodes_lock);
2464 spin_lock_init(&fs_info->tree_mod_seq_lock);
2465 spin_lock_init(&fs_info->super_lock);
2466 spin_lock_init(&fs_info->qgroup_op_lock);
2467 spin_lock_init(&fs_info->buffer_lock);
2468 spin_lock_init(&fs_info->unused_bgs_lock);
2469 rwlock_init(&fs_info->tree_mod_log_lock);
2470 mutex_init(&fs_info->unused_bg_unpin_mutex);
2471 mutex_init(&fs_info->delete_unused_bgs_mutex);
2472 mutex_init(&fs_info->reloc_mutex);
2473 mutex_init(&fs_info->delalloc_root_mutex);
2474 mutex_init(&fs_info->cleaner_delayed_iput_mutex);
2475 seqlock_init(&fs_info->profiles_lock);
2476
2477 INIT_LIST_HEAD(&fs_info->dirty_cowonly_roots);
2478 INIT_LIST_HEAD(&fs_info->space_info);
2479 INIT_LIST_HEAD(&fs_info->tree_mod_seq_list);
2480 INIT_LIST_HEAD(&fs_info->unused_bgs);
2481 btrfs_mapping_init(&fs_info->mapping_tree);
2482 btrfs_init_block_rsv(&fs_info->global_block_rsv,
2483 BTRFS_BLOCK_RSV_GLOBAL);
2484 btrfs_init_block_rsv(&fs_info->trans_block_rsv,
BTRFS_BLOCK_RSV_TRANS);
2485 btrfs_init_block_rsv(&fs_info->chunk_block_rsv,
BTRFS_BLOCK_RSV_CHUNK);
2486 btrfs_init_block_rsv(&fs_info->empty_block_rsv,
BTRFS_BLOCK_RSV_EMPTY);
2487 btrfs_init_block_rsv(&fs_info->delayed_block_rsv,
2488 BTRFS_BLOCK_RSV_DELOPS);
2489 atomic_set(&fs_info->async_delalloc_pages, 0);
2490 atomic_set(&fs_info->defrag_running, 0);
2491 atomic_set(&fs_info->qgroup_op_seq, 0);
2492 atomic_set(&fs_info->reada_works_cnt, 0);
2493 atomic64_set(&fs_info->tree_mod_seq, 0);
2494 fs_info->sb = sb;
2495 fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE;
2496 fs_info->metadata_ratio = 0;
2497 fs_info->defrag_inodes = RB_ROOT;
2498 atomic64_set(&fs_info->free_chunk_space, 0);
2499 fs_info->tree_mod_log = RB_ROOT;
2500 fs_info->commit_interval = BTRFS_DEFAULT_COMMIT_INTERVAL;
2501 fs_info->avg_delayed_ref_runtime = NSEC_PER_SEC >> 6; /* div by
64 */
2502 /* readahead state */
2503 INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS &
~__GFP_DIRECT_RECLAIM);
2504 spin_lock_init(&fs_info->reada_lock);
2505 btrfs_init_ref_verify(fs_info);
2506
2507 fs_info->thread_pool_size = min_t(unsigned long,
2508 num_online_cpus() + 2, 8);
2509
2510 INIT_LIST_HEAD(&fs_info->ordered_roots);
2511 spin_lock_init(&fs_info->ordered_root_lock);
2512
2513 fs_info->btree_inode = new_inode(sb);
2514 if (!fs_info->btree_inode) {
2515 err = -ENOMEM;
2516 goto fail_bio_counter;
2517 }
2518 mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS);
2519
2520 fs_info->delayed_root = kmalloc(sizeof(struct
btrfs_delayed_root),
2521 GFP_KERNEL);
2522 if (!fs_info->delayed_root) {
2523 err = -ENOMEM;
2524 goto fail_iput;
2525 }
2526 btrfs_init_delayed_root(fs_info->delayed_root);
2527
2528 btrfs_init_scrub(fs_info);
2529 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
2530 fs_info->check_integrity_print_mask = 0;
2531 #endif
2532 btrfs_init_balance(fs_info);
2533 btrfs_init_async_reclaim_work(&fs_info->async_reclaim_work);
2534
2535 sb->s_blocksize = BTRFS_BDEV_BLOCKSIZE;
2536 sb->s_blocksize_bits = blksize_bits(BTRFS_BDEV_BLOCKSIZE);
2537
2538 btrfs_init_btree_inode(fs_info);
2539
2540 spin_lock_init(&fs_info->block_group_cache_lock);
2541 fs_info->block_group_cache_tree = RB_ROOT;
2542 fs_info->first_logical_byte = (u64)-1;
2543
2544 extent_io_tree_init(&fs_info->freed_extents[0], NULL);
2545 extent_io_tree_init(&fs_info->freed_extents[1], NULL);
2546 fs_info->pinned_extents = &fs_info->freed_extents[0];
2547 set_bit(BTRFS_FS_BARRIER, &fs_info->flags);
2548
2549 mutex_init(&fs_info->ordered_operations_mutex);
2550 mutex_init(&fs_info->tree_log_mutex);
2551 mutex_init(&fs_info->chunk_mutex);
2552 mutex_init(&fs_info->transaction_kthread_mutex);
2553 mutex_init(&fs_info->cleaner_mutex);
2554 mutex_init(&fs_info->volume_mutex);
2555 mutex_init(&fs_info->ro_block_group_mutex);
2556 init_rwsem(&fs_info->commit_root_sem);
2557 init_rwsem(&fs_info->cleanup_work_sem);
2558 init_rwsem(&fs_info->subvol_sem);
2559 sema_init(&fs_info->uuid_tree_rescan_sem, 1);
2560
2561 btrfs_init_dev_replace_locks(fs_info);
2562 btrfs_init_qgroup(fs_info);
2563
2564 btrfs_init_free_cluster(&fs_info->meta_alloc_cluster);
2565 btrfs_init_free_cluster(&fs_info->data_alloc_cluster);
2566
2567 init_waitqueue_head(&fs_info->transaction_throttle);
2568 init_waitqueue_head(&fs_info->transaction_wait);
2569 init_waitqueue_head(&fs_info->transaction_blocked_wait);
2570 init_waitqueue_head(&fs_info->async_submit_wait);
2571
2572 INIT_LIST_HEAD(&fs_info->pinned_chunks);
2573
2574 /* Usable values until the real ones are cached from the
superblock */
2575 fs_info->nodesize = 4096;
2576 fs_info->sectorsize = 4096;
2577 fs_info->stripesize = 4096;
2578
2579 ret = btrfs_alloc_stripe_hash_table(fs_info);
2580 if (ret) {
2581 err = ret;
2582 goto fail_alloc;
2583 }
2584
2585 __setup_root(tree_root, fs_info, BTRFS_ROOT_TREE_OBJECTID);
2586
2587 invalidate_bdev(fs_devices->latest_bdev);
2588
2589 /*
2590 * Read super block and check the signature bytes only
2591 */
2592 bh = btrfs_read_dev_super(fs_devices->latest_bdev);
2593 if (IS_ERR(bh)) {
2594 err = PTR_ERR(bh);
2595 goto fail_alloc;
2596 }
2597
2598 /*
2599 * We want to check superblock checksum, the type is stored
inside.
2600 * Pass the whole disk block of size BTRFS_SUPER_INFO_SIZE (4k).
2601 */
2602 if (btrfs_check_super_csum(fs_info, bh->b_data)) {
2603 btrfs_err(fs_info, "superblock checksum mismatch");
2604 err = -EINVAL;
2605 brelse(bh);
2606 goto fail_alloc;
2607 }
2608
2609 /*
2610 * super_copy is zeroed at allocation time and we never touch
the
2611 * following bytes up to INFO_SIZE, the checksum is calculated
from
2612 * the whole block of INFO_SIZE
2613 */
2614 memcpy(fs_info->super_copy, bh->b_data,
sizeof(*fs_info->super_copy));
2615 memcpy(fs_info->super_for_commit, fs_info->super_copy,
2616 sizeof(*fs_info->super_for_commit));
2617 brelse(bh);
2618
2619 memcpy(fs_info->fsid, fs_info->super_copy->fsid,
BTRFS_FSID_SIZE);
2620
2621 ret = btrfs_check_super_valid(fs_info);
2622 if (ret) {
2623 btrfs_err(fs_info, "superblock contains fatal errors");
2624 err = -EINVAL;
2625 goto fail_alloc;
2626 }
2627
2628 disk_super = fs_info->super_copy;
2629 if (!btrfs_super_root(disk_super))
2630 goto fail_alloc;
2631
2632 /* check FS state, whether FS is broken. */
2633 if (btrfs_super_flags(disk_super) & BTRFS_SUPER_FLAG_ERROR)
2634 set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state);
2635
2636 /*
2637 * run through our array of backup supers and setup
2638 * our ring pointer to the oldest one
2639 */
2640 generation = btrfs_super_generation(disk_super);
2641 find_oldest_super_backup(fs_info, generation);
2642
2643 /*
2644 * In the long term, we'll store the compression type in the
super
2645 * block, and it'll be used for per file compression control.
2646 */
2647 fs_info->compress_type = BTRFS_COMPRESS_ZLIB;
2648
2649 ret = btrfs_parse_options(fs_info, options, sb->s_flags);
2650 if (ret) {
2651 err = ret;
2652 goto fail_alloc;
2653 }
2654
2655 features = btrfs_super_incompat_flags(disk_super) &
2656 ~BTRFS_FEATURE_INCOMPAT_SUPP;
2657 if (features) {
2658 btrfs_err(fs_info,
2659 "cannot mount because of unsupported optional features
(%llx)",
2660 features);
2661 err = -EINVAL;
2662 goto fail_alloc;
2663 }
2664
2665 features = btrfs_super_incompat_flags(disk_super);
2666 features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF;
2667 if (fs_info->compress_type == BTRFS_COMPRESS_LZO)
2668 features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
2669 else if (fs_info->compress_type == BTRFS_COMPRESS_ZSTD)
2670 features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD;
2671
2672 if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
2673 btrfs_info(fs_info, "has skinny extents");
2674
2675 /*
2676 * flag our filesystem as having big metadata blocks if
2677 * they are bigger than the page size
2678 */
2679 if (btrfs_super_nodesize(disk_super) > PAGE_SIZE) {
2680 if (!(features & BTRFS_FEATURE_INCOMPAT_BIG_METADATA))
2681 btrfs_info(fs_info,
2682 "flagging fs with big metadata
feature");
2683 features |= BTRFS_FEATURE_INCOMPAT_BIG_METADATA;
2684 }
2685
2686 nodesize = btrfs_super_nodesize(disk_super);
2687 sectorsize = btrfs_super_sectorsize(disk_super);
2688 stripesize = sectorsize;
2689 fs_info->dirty_metadata_batch = nodesize * (1 +
ilog2(nr_cpu_ids));
2690 fs_info->delalloc_batch = sectorsize * 512 * (1 +
ilog2(nr_cpu_ids));
2691
2692 /* Cache block sizes */
2693 fs_info->nodesize = nodesize;
2694 fs_info->sectorsize = sectorsize;
2695 fs_info->stripesize = stripesize;
2696
2697 /*
2698 * mixed block groups end up with duplicate but slightly offset
2699 * extent buffers for the same range. It leads to corruptions
2700 */
2701 if ((features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) &&
2702 (sectorsize != nodesize)) {
2703 btrfs_err(fs_info,
2704 "unequal nodesize/sectorsize (%u != %u) are not allowed for mixed block
groups",
2705 nodesize, sectorsize);
2706 goto fail_alloc;
2707 }
2708
2709 /*
2710 * Needn't use the lock because there is no other task which
will
2711 * update the flag.
2712 */
2713 btrfs_set_super_incompat_flags(disk_super, features);
2714
2715 features = btrfs_super_compat_ro_flags(disk_super) &
2716 ~BTRFS_FEATURE_COMPAT_RO_SUPP;
2717 if (!sb_rdonly(sb) && features) {
2718 btrfs_err(fs_info,
2719 "cannot mount read-write because of unsupported optional features
(%llx)",
2720 features);
2721 err = -EINVAL;
2722 goto fail_alloc;
2723 }
2724
2725 max_active = fs_info->thread_pool_size;
2726
2727 ret = btrfs_init_workqueues(fs_info, fs_devices);
2728 if (ret) {
2729 err = ret;
2730 goto fail_sb_buffer;
2731 }
2732
2733 sb->s_bdi->congested_fn = btrfs_congested_fn;
2734 sb->s_bdi->congested_data = fs_info;
2735 sb->s_bdi->capabilities |= BDI_CAP_CGROUP_WRITEBACK;
2736 sb->s_bdi->ra_pages = VM_MAX_READAHEAD * SZ_1K / PAGE_SIZE;
2737 sb->s_bdi->ra_pages *= btrfs_super_num_devices(disk_super);
2738 sb->s_bdi->ra_pages = max(sb->s_bdi->ra_pages, SZ_4M /
PAGE_SIZE);
2739
2740 sb->s_blocksize = sectorsize;
2741 sb->s_blocksize_bits = blksize_bits(sectorsize);
2742 memcpy(&sb->s_uuid, fs_info->fsid, BTRFS_FSID_SIZE);
2743
2744 mutex_lock(&fs_info->chunk_mutex);
2745 ret = btrfs_read_sys_array(fs_info);
2746 mutex_unlock(&fs_info->chunk_mutex);
2747 if (ret) {
2748 btrfs_err(fs_info, "failed to read the system array:
%d", ret);
2749 goto fail_sb_buffer;
2750 }
2751
2752 generation = btrfs_super_chunk_root_generation(disk_super);
2753
2754 __setup_root(chunk_root, fs_info, BTRFS_CHUNK_TREE_OBJECTID);
2755
2756 chunk_root->node = read_tree_block(fs_info,
2757
btrfs_super_chunk_root(disk_super),
2758 generation);
2759 if (IS_ERR(chunk_root->node) ||
2760 !extent_buffer_uptodate(chunk_root->node)) {
2761 btrfs_err(fs_info, "failed to read chunk root");
2762 if (!IS_ERR(chunk_root->node))
2763 free_extent_buffer(chunk_root->node);
2764 chunk_root->node = NULL;
2765 goto fail_tree_roots;
2766 }
2767 btrfs_set_root_node(&chunk_root->root_item, chunk_root->node);
2768 chunk_root->commit_root = btrfs_root_node(chunk_root);
2769
2770 read_extent_buffer(chunk_root->node, fs_info->chunk_tree_uuid,
2771 btrfs_header_chunk_tree_uuid(chunk_root->node),
BTRFS_UUID_SIZE);
2772
2773 ret = btrfs_read_chunk_tree(fs_info);
2774 if (ret) {
2775 btrfs_err(fs_info, "failed to read chunk tree: %d",
ret);
2776 goto fail_tree_roots;
2777 }
2778
2779 /*
2780 * keep the devid that is marked to be the target device for the
2781 * dev_replace procedure
2782 */
2783 btrfs_free_extra_devids(fs_devices, 0);
2784
2785 if (!fs_devices->latest_bdev) {
2786 btrfs_err(fs_info, "failed to read devices");
2787 goto fail_tree_roots;
2788 }
2789
2790 retry_root_backup:
2791 generation = btrfs_super_generation(disk_super);
2792
2793 tree_root->node = read_tree_block(fs_info,
2794 btrfs_super_root(disk_super),
2795 generation);
2796 if (IS_ERR(tree_root->node) ||
2797 !extent_buffer_uptodate(tree_root->node)) {
2798 btrfs_warn(fs_info, "failed to read tree root");
2799 if (!IS_ERR(tree_root->node))
2800 free_extent_buffer(tree_root->node);
2801 tree_root->node = NULL;
2802 goto recovery_tree_root;
2803 }
2804
2805 btrfs_set_root_node(&tree_root->root_item, tree_root->node);
2806 tree_root->commit_root = btrfs_root_node(tree_root);
2807 btrfs_set_root_refs(&tree_root->root_item, 1);
2808
2809 mutex_lock(&tree_root->objectid_mutex);
2810 ret = btrfs_find_highest_objectid(tree_root,
2811 &tree_root->highest_objectid);
2812 if (ret) {
2813 mutex_unlock(&tree_root->objectid_mutex);
2814 goto recovery_tree_root;
2815 }
2816
2817 ASSERT(tree_root->highest_objectid <= BTRFS_LAST_FREE_OBJECTID);
2818
2819 mutex_unlock(&tree_root->objectid_mutex);
2820
2821 ret = btrfs_read_roots(fs_info);
2822 if (ret)
2823 goto recovery_tree_root;
2824
2825 fs_info->generation = generation;
2826 fs_info->last_trans_committed = generation;
2827
2828 ret = btrfs_recover_balance(fs_info);
2829 if (ret) {
2830 btrfs_err(fs_info, "failed to recover balance: %d",
ret);
2831 goto fail_block_groups;
2832 }
2833
2834 ret = btrfs_init_dev_stats(fs_info);
2835 if (ret) {
2836 btrfs_err(fs_info, "failed to init dev_stats: %d", ret);
2837 goto fail_block_groups;
2838 }
2839
2840 ret = btrfs_init_dev_replace(fs_info);
2841 if (ret) {
2842 btrfs_err(fs_info, "failed to init dev_replace: %d",
ret);
2843 goto fail_block_groups;
2844 }
2845
2846 btrfs_free_extra_devids(fs_devices, 1);
2847
2848 ret = btrfs_sysfs_add_fsid(fs_devices, NULL);
2849 if (ret) {
2850 btrfs_err(fs_info, "failed to init sysfs fsid interface:
%d",
2851 ret);
2852 goto fail_block_groups;
2853 }
2854
2855 ret = btrfs_sysfs_add_device(fs_devices);
2856 if (ret) {
2857 btrfs_err(fs_info, "failed to init sysfs device interface:
%d",
2858 ret);
2859 goto fail_fsdev_sysfs;
2860 }
2861
2862 ret = btrfs_sysfs_add_mounted(fs_info);
2863 if (ret) {
2864 btrfs_err(fs_info, "failed to init sysfs interface:
%d", ret);
2865 goto fail_fsdev_sysfs;
2866 }
2867
2868 ret = btrfs_init_space_info(fs_info);
2869 if (ret) {
2870 btrfs_err(fs_info, "failed to initialize space info:
%d", ret);
2871 goto fail_sysfs;
2872 }
2873
2874 ret = btrfs_read_block_groups(fs_info);
2875 if (ret) {
2876 btrfs_err(fs_info, "failed to read block groups: %d",
ret);
2877 goto fail_sysfs;
2878 }
2879
2880 if (!sb_rdonly(sb) && !btrfs_check_rw_degradable(fs_info)) {
2881 btrfs_warn(fs_info,
2882 "writeable mount is not allowed due to too many missing
devices");
2883 goto fail_sysfs;
2884 }
2885
2886 fs_info->cleaner_kthread = kthread_run(cleaner_kthread,
tree_root,
2887 "btrfs-cleaner");
2888 if (IS_ERR(fs_info->cleaner_kthread))
2889 goto fail_sysfs;
2890
2891 fs_info->transaction_kthread = kthread_run(transaction_kthread,
2892 tree_root,
2893 "btrfs-transaction");
2894 if (IS_ERR(fs_info->transaction_kthread))
2895 goto fail_cleaner;
2896
2897 if (!btrfs_test_opt(fs_info, NOSSD) &&
2898 !fs_info->fs_devices->rotating) {
2899 btrfs_set_and_info(fs_info, SSD, "enabling ssd
optimizations");
2900 }
2901
2902 /*
2903 * Mount does not set all options immediately, we can do it now
and do
2904 * not have to wait for transaction commit
2905 */
2906 btrfs_apply_pending_changes(fs_info);
2907
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation