There's no logged information about tree-log replay although this is something that points to previous unclean unmount. Other filesystems report that as well.
Suggested-by: Chris Murphy lists@colorremedies.com CC: stable@vger.kernel.org # 4.4+ Signed-off-by: David Sterba dsterba@suse.com --- fs/btrfs/disk-io.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 28622de9e642..295d5ebc9d5e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3146,6 +3146,7 @@ int __cold open_ctree(struct super_block *sb, /* do not make disk changes in broken FS or nologreplay is given */ if (btrfs_super_log_root(disk_super) != 0 && !btrfs_test_opt(fs_info, NOLOGREPLAY)) { + btrfs_info("start tree-log replay"); ret = btrfs_replay_log(fs_info, fs_devices); if (ret) { err = ret;
On 2/6/20 12:12 AM, David Sterba wrote:
There's no logged information about tree-log replay although this is something that points to previous unclean unmount. Other filesystems report that as well.
Suggested-by: Chris Murphy lists@colorremedies.com CC: stable@vger.kernel.org # 4.4+ Signed-off-by: David Sterba dsterba@suse.com
fs/btrfs/disk-io.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 28622de9e642..295d5ebc9d5e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3146,6 +3146,7 @@ int __cold open_ctree(struct super_block *sb, /* do not make disk changes in broken FS or nologreplay is given */ if (btrfs_super_log_root(disk_super) != 0 && !btrfs_test_opt(fs_info, NOLOGREPLAY)) {
ret = btrfs_replay_log(fs_info, fs_devices); if (ret) { err = ret;btrfs_info("start tree-log replay");
Reviewed-by: Anand Jain anand.jain@oracle.com
On 2/6/20 11:45 AM, Anand Jain wrote:
On 2/6/20 12:12 AM, David Sterba wrote:
There's no logged information about tree-log replay although this is something that points to previous unclean unmount. Other filesystems report that as well.
Suggested-by: Chris Murphy lists@colorremedies.com CC: stable@vger.kernel.org # 4.4+ Signed-off-by: David Sterba dsterba@suse.com
fs/btrfs/disk-io.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 28622de9e642..295d5ebc9d5e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3146,6 +3146,7 @@ int __cold open_ctree(struct super_block *sb, /* do not make disk changes in broken FS or nologreplay is given */ if (btrfs_super_log_root(disk_super) != 0 && !btrfs_test_opt(fs_info, NOLOGREPLAY)) {
+ btrfs_info("start tree-log replay");
btrfs_info() needs struct btrfs_fs_info as first arg.
ret = btrfs_replay_log(fs_info, fs_devices); if (ret) { err = ret;
Reviewed-by: Anand Jain anand.jain@oracle.com
Sorry hit the send button too early.
Thanks, Anand
On Thu, Feb 06, 2020 at 11:48:28AM +0800, Anand Jain wrote:
On 2/6/20 11:45 AM, Anand Jain wrote:
On 2/6/20 12:12 AM, David Sterba wrote:
There's no logged information about tree-log replay although this is something that points to previous unclean unmount. Other filesystems report that as well.
Suggested-by: Chris Murphy lists@colorremedies.com CC: stable@vger.kernel.org # 4.4+ Signed-off-by: David Sterba dsterba@suse.com
fs/btrfs/disk-io.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 28622de9e642..295d5ebc9d5e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3146,6 +3146,7 @@ int __cold open_ctree(struct super_block *sb, /* do not make disk changes in broken FS or nologreplay is given */ if (btrfs_super_log_root(disk_super) != 0 && !btrfs_test_opt(fs_info, NOLOGREPLAY)) {
+ btrfs_info("start tree-log replay");
btrfs_info() needs struct btrfs_fs_info as first arg.
Doh, that's what I get when I take months old patches and only briefly review them before sending.
Hi David,
I love your patch! Yet something to improve:
[auto build test ERROR on kdave/for-next] [also build test ERROR on v5.5 next-20200205] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/David-Sterba/btrfs-print-message-wh... base: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next config: s390-randconfig-a001-20200206 (attached as .config) compiler: s390-linux-gcc (GCC) 7.5.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=7.5.0 make.cross ARCH=s390
If you fix the issue, kindly add following tag Reported-by: kbuild test robot lkp@intel.com
All errors (new ones prefixed by >>):
fs/btrfs/disk-io.c: In function 'open_ctree':
fs/btrfs/disk-io.c:3167:37: error: macro "btrfs_info" requires 3 arguments, but only 1 given
btrfs_info("start tree-log replay"); ^
fs/btrfs/disk-io.c:3167:3: error: 'btrfs_info' undeclared (first use in this function); did you mean 'btrfs_ino'?
btrfs_info("start tree-log replay"); ^~~~~~~~~~ btrfs_ino fs/btrfs/disk-io.c:3167:3: note: each undeclared identifier is reported only once for each function it appears in
vim +/btrfs_info +3167 fs/btrfs/disk-io.c
2626 2627 int __cold open_ctree(struct super_block *sb, 2628 struct btrfs_fs_devices *fs_devices, 2629 char *options) 2630 { 2631 u32 sectorsize; 2632 u32 nodesize; 2633 u32 stripesize; 2634 u64 generation; 2635 u64 features; 2636 u16 csum_type; 2637 struct btrfs_key location; 2638 struct buffer_head *bh; 2639 struct btrfs_super_block *disk_super; 2640 struct btrfs_fs_info *fs_info = btrfs_sb(sb); 2641 struct btrfs_root *tree_root; 2642 struct btrfs_root *chunk_root; 2643 int ret; 2644 int err = -EINVAL; 2645 int clear_free_space_tree = 0; 2646 int level; 2647 2648 tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info, GFP_KERNEL); 2649 chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info, GFP_KERNEL); 2650 if (!tree_root || !chunk_root) { 2651 err = -ENOMEM; 2652 goto fail; 2653 } 2654 2655 ret = init_srcu_struct(&fs_info->subvol_srcu); 2656 if (ret) { 2657 err = ret; 2658 goto fail; 2659 } 2660 2661 ret = percpu_counter_init(&fs_info->dio_bytes, 0, GFP_KERNEL); 2662 if (ret) { 2663 err = ret; 2664 goto fail_srcu; 2665 } 2666 2667 ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0, GFP_KERNEL); 2668 if (ret) { 2669 err = ret; 2670 goto fail_dio_bytes; 2671 } 2672 fs_info->dirty_metadata_batch = PAGE_SIZE * 2673 (1 + ilog2(nr_cpu_ids)); 2674 2675 ret = percpu_counter_init(&fs_info->delalloc_bytes, 0, GFP_KERNEL); 2676 if (ret) { 2677 err = ret; 2678 goto fail_dirty_metadata_bytes; 2679 } 2680 2681 ret = percpu_counter_init(&fs_info->dev_replace.bio_counter, 0, 2682 GFP_KERNEL); 2683 if (ret) { 2684 err = ret; 2685 goto fail_delalloc_bytes; 2686 } 2687 2688 INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); 2689 INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC); 2690 INIT_LIST_HEAD(&fs_info->trans_list); 2691 INIT_LIST_HEAD(&fs_info->dead_roots); 2692 INIT_LIST_HEAD(&fs_info->delayed_iputs); 2693 INIT_LIST_HEAD(&fs_info->delalloc_roots); 2694 INIT_LIST_HEAD(&fs_info->caching_block_groups); 2695 spin_lock_init(&fs_info->delalloc_root_lock); 2696 spin_lock_init(&fs_info->trans_lock); 2697 spin_lock_init(&fs_info->fs_roots_radix_lock); 2698 spin_lock_init(&fs_info->delayed_iput_lock); 2699 spin_lock_init(&fs_info->defrag_inodes_lock); 2700 spin_lock_init(&fs_info->super_lock); 2701 spin_lock_init(&fs_info->buffer_lock); 2702 spin_lock_init(&fs_info->unused_bgs_lock); 2703 rwlock_init(&fs_info->tree_mod_log_lock); 2704 mutex_init(&fs_info->unused_bg_unpin_mutex); 2705 mutex_init(&fs_info->delete_unused_bgs_mutex); 2706 mutex_init(&fs_info->reloc_mutex); 2707 mutex_init(&fs_info->delalloc_root_mutex); 2708 seqlock_init(&fs_info->profiles_lock); 2709 2710 INIT_LIST_HEAD(&fs_info->dirty_cowonly_roots); 2711 INIT_LIST_HEAD(&fs_info->space_info); 2712 INIT_LIST_HEAD(&fs_info->tree_mod_seq_list); 2713 INIT_LIST_HEAD(&fs_info->unused_bgs); 2714 extent_map_tree_init(&fs_info->mapping_tree); 2715 btrfs_init_block_rsv(&fs_info->global_block_rsv, 2716 BTRFS_BLOCK_RSV_GLOBAL); 2717 btrfs_init_block_rsv(&fs_info->trans_block_rsv, BTRFS_BLOCK_RSV_TRANS); 2718 btrfs_init_block_rsv(&fs_info->chunk_block_rsv, BTRFS_BLOCK_RSV_CHUNK); 2719 btrfs_init_block_rsv(&fs_info->empty_block_rsv, BTRFS_BLOCK_RSV_EMPTY); 2720 btrfs_init_block_rsv(&fs_info->delayed_block_rsv, 2721 BTRFS_BLOCK_RSV_DELOPS); 2722 btrfs_init_block_rsv(&fs_info->delayed_refs_rsv, 2723 BTRFS_BLOCK_RSV_DELREFS); 2724 2725 atomic_set(&fs_info->async_delalloc_pages, 0); 2726 atomic_set(&fs_info->defrag_running, 0); 2727 atomic_set(&fs_info->reada_works_cnt, 0); 2728 atomic_set(&fs_info->nr_delayed_iputs, 0); 2729 atomic64_set(&fs_info->tree_mod_seq, 0); 2730 fs_info->sb = sb; 2731 fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE; 2732 fs_info->metadata_ratio = 0; 2733 fs_info->defrag_inodes = RB_ROOT; 2734 atomic64_set(&fs_info->free_chunk_space, 0); 2735 fs_info->tree_mod_log = RB_ROOT; 2736 fs_info->commit_interval = BTRFS_DEFAULT_COMMIT_INTERVAL; 2737 fs_info->avg_delayed_ref_runtime = NSEC_PER_SEC >> 6; /* div by 64 */ 2738 /* readahead state */ 2739 INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); 2740 spin_lock_init(&fs_info->reada_lock); 2741 btrfs_init_ref_verify(fs_info); 2742 2743 fs_info->thread_pool_size = min_t(unsigned long, 2744 num_online_cpus() + 2, 8); 2745 2746 INIT_LIST_HEAD(&fs_info->ordered_roots); 2747 spin_lock_init(&fs_info->ordered_root_lock); 2748 2749 fs_info->btree_inode = new_inode(sb); 2750 if (!fs_info->btree_inode) { 2751 err = -ENOMEM; 2752 goto fail_bio_counter; 2753 } 2754 mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); 2755 2756 fs_info->delayed_root = kmalloc(sizeof(struct btrfs_delayed_root), 2757 GFP_KERNEL); 2758 if (!fs_info->delayed_root) { 2759 err = -ENOMEM; 2760 goto fail_iput; 2761 } 2762 btrfs_init_delayed_root(fs_info->delayed_root); 2763 2764 btrfs_init_scrub(fs_info); 2765 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY 2766 fs_info->check_integrity_print_mask = 0; 2767 #endif 2768 btrfs_init_balance(fs_info); 2769 btrfs_init_async_reclaim_work(&fs_info->async_reclaim_work); 2770 2771 sb->s_blocksize = BTRFS_BDEV_BLOCKSIZE; 2772 sb->s_blocksize_bits = blksize_bits(BTRFS_BDEV_BLOCKSIZE); 2773 2774 btrfs_init_btree_inode(fs_info); 2775 2776 spin_lock_init(&fs_info->block_group_cache_lock); 2777 fs_info->block_group_cache_tree = RB_ROOT; 2778 fs_info->first_logical_byte = (u64)-1; 2779 2780 extent_io_tree_init(fs_info, &fs_info->freed_extents[0], 2781 IO_TREE_FS_INFO_FREED_EXTENTS0, NULL); 2782 extent_io_tree_init(fs_info, &fs_info->freed_extents[1], 2783 IO_TREE_FS_INFO_FREED_EXTENTS1, NULL); 2784 fs_info->pinned_extents = &fs_info->freed_extents[0]; 2785 set_bit(BTRFS_FS_BARRIER, &fs_info->flags); 2786 2787 mutex_init(&fs_info->ordered_operations_mutex); 2788 mutex_init(&fs_info->tree_log_mutex); 2789 mutex_init(&fs_info->chunk_mutex); 2790 mutex_init(&fs_info->transaction_kthread_mutex); 2791 mutex_init(&fs_info->cleaner_mutex); 2792 mutex_init(&fs_info->ro_block_group_mutex); 2793 init_rwsem(&fs_info->commit_root_sem); 2794 init_rwsem(&fs_info->cleanup_work_sem); 2795 init_rwsem(&fs_info->subvol_sem); 2796 sema_init(&fs_info->uuid_tree_rescan_sem, 1); 2797 2798 btrfs_init_dev_replace_locks(fs_info); 2799 btrfs_init_qgroup(fs_info); 2800 btrfs_discard_init(fs_info); 2801 2802 btrfs_init_free_cluster(&fs_info->meta_alloc_cluster); 2803 btrfs_init_free_cluster(&fs_info->data_alloc_cluster); 2804 2805 init_waitqueue_head(&fs_info->transaction_throttle); 2806 init_waitqueue_head(&fs_info->transaction_wait); 2807 init_waitqueue_head(&fs_info->transaction_blocked_wait); 2808 init_waitqueue_head(&fs_info->async_submit_wait); 2809 init_waitqueue_head(&fs_info->delayed_iputs_wait); 2810 2811 /* Usable values until the real ones are cached from the superblock */ 2812 fs_info->nodesize = 4096; 2813 fs_info->sectorsize = 4096; 2814 fs_info->stripesize = 4096; 2815 2816 spin_lock_init(&fs_info->swapfile_pins_lock); 2817 fs_info->swapfile_pins = RB_ROOT; 2818 2819 fs_info->send_in_progress = 0; 2820 2821 ret = btrfs_alloc_stripe_hash_table(fs_info); 2822 if (ret) { 2823 err = ret; 2824 goto fail_alloc; 2825 } 2826 2827 __setup_root(tree_root, fs_info, BTRFS_ROOT_TREE_OBJECTID); 2828 2829 invalidate_bdev(fs_devices->latest_bdev); 2830 2831 /* 2832 * Read super block and check the signature bytes only 2833 */ 2834 bh = btrfs_read_dev_super(fs_devices->latest_bdev); 2835 if (IS_ERR(bh)) { 2836 err = PTR_ERR(bh); 2837 goto fail_alloc; 2838 } 2839 2840 /* 2841 * Verify the type first, if that or the the checksum value are 2842 * corrupted, we'll find out 2843 */ 2844 csum_type = btrfs_super_csum_type((struct btrfs_super_block *)bh->b_data); 2845 if (!btrfs_supported_super_csum(csum_type)) { 2846 btrfs_err(fs_info, "unsupported checksum algorithm: %u", 2847 csum_type); 2848 err = -EINVAL; 2849 brelse(bh); 2850 goto fail_alloc; 2851 } 2852 2853 ret = btrfs_init_csum_hash(fs_info, csum_type); 2854 if (ret) { 2855 err = ret; 2856 goto fail_alloc; 2857 } 2858 2859 /* 2860 * We want to check superblock checksum, the type is stored inside. 2861 * Pass the whole disk block of size BTRFS_SUPER_INFO_SIZE (4k). 2862 */ 2863 if (btrfs_check_super_csum(fs_info, bh->b_data)) { 2864 btrfs_err(fs_info, "superblock checksum mismatch"); 2865 err = -EINVAL; 2866 brelse(bh); 2867 goto fail_csum; 2868 } 2869 2870 /* 2871 * super_copy is zeroed at allocation time and we never touch the 2872 * following bytes up to INFO_SIZE, the checksum is calculated from 2873 * the whole block of INFO_SIZE 2874 */ 2875 memcpy(fs_info->super_copy, bh->b_data, sizeof(*fs_info->super_copy)); 2876 brelse(bh); 2877 2878 disk_super = fs_info->super_copy; 2879 2880 ASSERT(!memcmp(fs_info->fs_devices->fsid, fs_info->super_copy->fsid, 2881 BTRFS_FSID_SIZE)); 2882 2883 if (btrfs_fs_incompat(fs_info, METADATA_UUID)) { 2884 ASSERT(!memcmp(fs_info->fs_devices->metadata_uuid, 2885 fs_info->super_copy->metadata_uuid, 2886 BTRFS_FSID_SIZE)); 2887 } 2888 2889 features = btrfs_super_flags(disk_super); 2890 if (features & BTRFS_SUPER_FLAG_CHANGING_FSID_V2) { 2891 features &= ~BTRFS_SUPER_FLAG_CHANGING_FSID_V2; 2892 btrfs_set_super_flags(disk_super, features); 2893 btrfs_info(fs_info, 2894 "found metadata UUID change in progress flag, clearing"); 2895 } 2896 2897 memcpy(fs_info->super_for_commit, fs_info->super_copy, 2898 sizeof(*fs_info->super_for_commit)); 2899 2900 ret = btrfs_validate_mount_super(fs_info); 2901 if (ret) { 2902 btrfs_err(fs_info, "superblock contains fatal errors"); 2903 err = -EINVAL; 2904 goto fail_csum; 2905 } 2906 2907 if (!btrfs_super_root(disk_super)) 2908 goto fail_csum; 2909 2910 /* check FS state, whether FS is broken. */ 2911 if (btrfs_super_flags(disk_super) & BTRFS_SUPER_FLAG_ERROR) 2912 set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state); 2913 2914 /* 2915 * In the long term, we'll store the compression type in the super 2916 * block, and it'll be used for per file compression control. 2917 */ 2918 fs_info->compress_type = BTRFS_COMPRESS_ZLIB; 2919 2920 ret = btrfs_parse_options(fs_info, options, sb->s_flags); 2921 if (ret) { 2922 err = ret; 2923 goto fail_csum; 2924 } 2925 2926 features = btrfs_super_incompat_flags(disk_super) & 2927 ~BTRFS_FEATURE_INCOMPAT_SUPP; 2928 if (features) { 2929 btrfs_err(fs_info, 2930 "cannot mount because of unsupported optional features (%llx)", 2931 features); 2932 err = -EINVAL; 2933 goto fail_csum; 2934 } 2935 2936 features = btrfs_super_incompat_flags(disk_super); 2937 features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF; 2938 if (fs_info->compress_type == BTRFS_COMPRESS_LZO) 2939 features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO; 2940 else if (fs_info->compress_type == BTRFS_COMPRESS_ZSTD) 2941 features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD; 2942 2943 if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) 2944 btrfs_info(fs_info, "has skinny extents"); 2945 2946 /* 2947 * flag our filesystem as having big metadata blocks if 2948 * they are bigger than the page size 2949 */ 2950 if (btrfs_super_nodesize(disk_super) > PAGE_SIZE) { 2951 if (!(features & BTRFS_FEATURE_INCOMPAT_BIG_METADATA)) 2952 btrfs_info(fs_info, 2953 "flagging fs with big metadata feature"); 2954 features |= BTRFS_FEATURE_INCOMPAT_BIG_METADATA; 2955 } 2956 2957 nodesize = btrfs_super_nodesize(disk_super); 2958 sectorsize = btrfs_super_sectorsize(disk_super); 2959 stripesize = sectorsize; 2960 fs_info->dirty_metadata_batch = nodesize * (1 + ilog2(nr_cpu_ids)); 2961 fs_info->delalloc_batch = sectorsize * 512 * (1 + ilog2(nr_cpu_ids)); 2962 2963 /* Cache block sizes */ 2964 fs_info->nodesize = nodesize; 2965 fs_info->sectorsize = sectorsize; 2966 fs_info->stripesize = stripesize; 2967 2968 /* 2969 * mixed block groups end up with duplicate but slightly offset 2970 * extent buffers for the same range. It leads to corruptions 2971 */ 2972 if ((features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) && 2973 (sectorsize != nodesize)) { 2974 btrfs_err(fs_info, 2975 "unequal nodesize/sectorsize (%u != %u) are not allowed for mixed block groups", 2976 nodesize, sectorsize); 2977 goto fail_csum; 2978 } 2979 2980 /* 2981 * Needn't use the lock because there is no other task which will 2982 * update the flag. 2983 */ 2984 btrfs_set_super_incompat_flags(disk_super, features); 2985 2986 features = btrfs_super_compat_ro_flags(disk_super) & 2987 ~BTRFS_FEATURE_COMPAT_RO_SUPP; 2988 if (!sb_rdonly(sb) && features) { 2989 btrfs_err(fs_info, 2990 "cannot mount read-write because of unsupported optional features (%llx)", 2991 features); 2992 err = -EINVAL; 2993 goto fail_csum; 2994 } 2995 2996 ret = btrfs_init_workqueues(fs_info, fs_devices); 2997 if (ret) { 2998 err = ret; 2999 goto fail_sb_buffer; 3000 } 3001 3002 sb->s_bdi->congested_fn = btrfs_congested_fn; 3003 sb->s_bdi->congested_data = fs_info; 3004 sb->s_bdi->capabilities |= BDI_CAP_CGROUP_WRITEBACK; 3005 sb->s_bdi->ra_pages = VM_READAHEAD_PAGES; 3006 sb->s_bdi->ra_pages *= btrfs_super_num_devices(disk_super); 3007 sb->s_bdi->ra_pages = max(sb->s_bdi->ra_pages, SZ_4M / PAGE_SIZE); 3008 3009 sb->s_blocksize = sectorsize; 3010 sb->s_blocksize_bits = blksize_bits(sectorsize); 3011 memcpy(&sb->s_uuid, fs_info->fs_devices->fsid, BTRFS_FSID_SIZE); 3012 3013 mutex_lock(&fs_info->chunk_mutex); 3014 ret = btrfs_read_sys_array(fs_info); 3015 mutex_unlock(&fs_info->chunk_mutex); 3016 if (ret) { 3017 btrfs_err(fs_info, "failed to read the system array: %d", ret); 3018 goto fail_sb_buffer; 3019 } 3020 3021 generation = btrfs_super_chunk_root_generation(disk_super); 3022 level = btrfs_super_chunk_root_level(disk_super); 3023 3024 __setup_root(chunk_root, fs_info, BTRFS_CHUNK_TREE_OBJECTID); 3025 3026 chunk_root->node = read_tree_block(fs_info, 3027 btrfs_super_chunk_root(disk_super), 3028 generation, level, NULL); 3029 if (IS_ERR(chunk_root->node) || 3030 !extent_buffer_uptodate(chunk_root->node)) { 3031 btrfs_err(fs_info, "failed to read chunk root"); 3032 if (!IS_ERR(chunk_root->node)) 3033 free_extent_buffer(chunk_root->node); 3034 chunk_root->node = NULL; 3035 goto fail_tree_roots; 3036 } 3037 btrfs_set_root_node(&chunk_root->root_item, chunk_root->node); 3038 chunk_root->commit_root = btrfs_root_node(chunk_root); 3039 3040 read_extent_buffer(chunk_root->node, fs_info->chunk_tree_uuid, 3041 btrfs_header_chunk_tree_uuid(chunk_root->node), BTRFS_UUID_SIZE); 3042 3043 ret = btrfs_read_chunk_tree(fs_info); 3044 if (ret) { 3045 btrfs_err(fs_info, "failed to read chunk tree: %d", ret); 3046 goto fail_tree_roots; 3047 } 3048 3049 /* 3050 * Keep the devid that is marked to be the target device for the 3051 * device replace procedure 3052 */ 3053 btrfs_free_extra_devids(fs_devices, 0); 3054 3055 if (!fs_devices->latest_bdev) { 3056 btrfs_err(fs_info, "failed to read devices"); 3057 goto fail_tree_roots; 3058 } 3059 3060 ret = init_tree_roots(fs_info); 3061 if (ret) 3062 goto fail_tree_roots; 3063 3064 ret = btrfs_verify_dev_extents(fs_info); 3065 if (ret) { 3066 btrfs_err(fs_info, 3067 "failed to verify dev extents against chunks: %d", 3068 ret); 3069 goto fail_block_groups; 3070 } 3071 ret = btrfs_recover_balance(fs_info); 3072 if (ret) { 3073 btrfs_err(fs_info, "failed to recover balance: %d", ret); 3074 goto fail_block_groups; 3075 } 3076 3077 ret = btrfs_init_dev_stats(fs_info); 3078 if (ret) { 3079 btrfs_err(fs_info, "failed to init dev_stats: %d", ret); 3080 goto fail_block_groups; 3081 } 3082 3083 ret = btrfs_init_dev_replace(fs_info); 3084 if (ret) { 3085 btrfs_err(fs_info, "failed to init dev_replace: %d", ret); 3086 goto fail_block_groups; 3087 } 3088 3089 btrfs_free_extra_devids(fs_devices, 1); 3090 3091 ret = btrfs_sysfs_add_fsid(fs_devices); 3092 if (ret) { 3093 btrfs_err(fs_info, "failed to init sysfs fsid interface: %d", 3094 ret); 3095 goto fail_block_groups; 3096 } 3097 3098 ret = btrfs_sysfs_add_mounted(fs_info); 3099 if (ret) { 3100 btrfs_err(fs_info, "failed to init sysfs interface: %d", ret); 3101 goto fail_fsdev_sysfs; 3102 } 3103 3104 ret = btrfs_init_space_info(fs_info); 3105 if (ret) { 3106 btrfs_err(fs_info, "failed to initialize space info: %d", ret); 3107 goto fail_sysfs; 3108 } 3109 3110 ret = btrfs_read_block_groups(fs_info); 3111 if (ret) { 3112 btrfs_err(fs_info, "failed to read block groups: %d", ret); 3113 goto fail_sysfs; 3114 } 3115 3116 if (!sb_rdonly(sb) && !btrfs_check_rw_degradable(fs_info, NULL)) { 3117 btrfs_warn(fs_info, 3118 "writable mount is not allowed due to too many missing devices"); 3119 goto fail_sysfs; 3120 } 3121 3122 fs_info->cleaner_kthread = kthread_run(cleaner_kthread, tree_root, 3123 "btrfs-cleaner"); 3124 if (IS_ERR(fs_info->cleaner_kthread)) 3125 goto fail_sysfs; 3126 3127 fs_info->transaction_kthread = kthread_run(transaction_kthread, 3128 tree_root, 3129 "btrfs-transaction"); 3130 if (IS_ERR(fs_info->transaction_kthread)) 3131 goto fail_cleaner; 3132 3133 if (!btrfs_test_opt(fs_info, NOSSD) && 3134 !fs_info->fs_devices->rotating) { 3135 btrfs_set_and_info(fs_info, SSD, "enabling ssd optimizations"); 3136 } 3137 3138 /* 3139 * Mount does not set all options immediately, we can do it now and do 3140 * not have to wait for transaction commit 3141 */ 3142 btrfs_apply_pending_changes(fs_info); 3143 3144 #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY 3145 if (btrfs_test_opt(fs_info, CHECK_INTEGRITY)) { 3146 ret = btrfsic_mount(fs_info, fs_devices, 3147 btrfs_test_opt(fs_info, 3148 CHECK_INTEGRITY_INCLUDING_EXTENT_DATA) ? 3149 1 : 0, 3150 fs_info->check_integrity_print_mask); 3151 if (ret) 3152 btrfs_warn(fs_info, 3153 "failed to initialize integrity check module: %d", 3154 ret); 3155 } 3156 #endif 3157 ret = btrfs_read_qgroup_config(fs_info); 3158 if (ret) 3159 goto fail_trans_kthread; 3160 3161 if (btrfs_build_ref_tree(fs_info)) 3162 btrfs_err(fs_info, "couldn't build ref tree"); 3163 3164 /* do not make disk changes in broken FS or nologreplay is given */ 3165 if (btrfs_super_log_root(disk_super) != 0 && 3166 !btrfs_test_opt(fs_info, NOLOGREPLAY)) {
3167 btrfs_info("start tree-log replay");
3168 ret = btrfs_replay_log(fs_info, fs_devices); 3169 if (ret) { 3170 err = ret; 3171 goto fail_qgroup; 3172 } 3173 } 3174 3175 ret = btrfs_find_orphan_roots(fs_info); 3176 if (ret) 3177 goto fail_qgroup; 3178 3179 if (!sb_rdonly(sb)) { 3180 ret = btrfs_cleanup_fs_roots(fs_info); 3181 if (ret) 3182 goto fail_qgroup; 3183 3184 mutex_lock(&fs_info->cleaner_mutex); 3185 ret = btrfs_recover_relocation(tree_root); 3186 mutex_unlock(&fs_info->cleaner_mutex); 3187 if (ret < 0) { 3188 btrfs_warn(fs_info, "failed to recover relocation: %d", 3189 ret); 3190 err = -EINVAL; 3191 goto fail_qgroup; 3192 } 3193 } 3194 3195 location.objectid = BTRFS_FS_TREE_OBJECTID; 3196 location.type = BTRFS_ROOT_ITEM_KEY; 3197 location.offset = 0; 3198 3199 fs_info->fs_root = btrfs_read_fs_root_no_name(fs_info, &location); 3200 if (IS_ERR(fs_info->fs_root)) { 3201 err = PTR_ERR(fs_info->fs_root); 3202 btrfs_warn(fs_info, "failed to read fs tree: %d", err); 3203 goto fail_qgroup; 3204 } 3205 3206 if (sb_rdonly(sb)) 3207 return 0; 3208 3209 if (btrfs_test_opt(fs_info, CLEAR_CACHE) && 3210 btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) { 3211 clear_free_space_tree = 1; 3212 } else if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE) && 3213 !btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE_VALID)) { 3214 btrfs_warn(fs_info, "free space tree is invalid"); 3215 clear_free_space_tree = 1; 3216 } 3217 3218 if (clear_free_space_tree) { 3219 btrfs_info(fs_info, "clearing free space tree"); 3220 ret = btrfs_clear_free_space_tree(fs_info); 3221 if (ret) { 3222 btrfs_warn(fs_info, 3223 "failed to clear free space tree: %d", ret); 3224 close_ctree(fs_info); 3225 return ret; 3226 } 3227 } 3228 3229 if (btrfs_test_opt(fs_info, FREE_SPACE_TREE) && 3230 !btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) { 3231 btrfs_info(fs_info, "creating free space tree"); 3232 ret = btrfs_create_free_space_tree(fs_info); 3233 if (ret) { 3234 btrfs_warn(fs_info, 3235 "failed to create free space tree: %d", ret); 3236 close_ctree(fs_info); 3237 return ret; 3238 } 3239 } 3240 3241 down_read(&fs_info->cleanup_work_sem); 3242 if ((ret = btrfs_orphan_cleanup(fs_info->fs_root)) || 3243 (ret = btrfs_orphan_cleanup(fs_info->tree_root))) { 3244 up_read(&fs_info->cleanup_work_sem); 3245 close_ctree(fs_info); 3246 return ret; 3247 } 3248 up_read(&fs_info->cleanup_work_sem); 3249 3250 ret = btrfs_resume_balance_async(fs_info); 3251 if (ret) { 3252 btrfs_warn(fs_info, "failed to resume balance: %d", ret); 3253 close_ctree(fs_info); 3254 return ret; 3255 } 3256 3257 ret = btrfs_resume_dev_replace_async(fs_info); 3258 if (ret) { 3259 btrfs_warn(fs_info, "failed to resume device replace: %d", ret); 3260 close_ctree(fs_info); 3261 return ret; 3262 } 3263 3264 btrfs_qgroup_rescan_resume(fs_info); 3265 btrfs_discard_resume(fs_info); 3266 3267 if (!fs_info->uuid_root) { 3268 btrfs_info(fs_info, "creating UUID tree"); 3269 ret = btrfs_create_uuid_tree(fs_info); 3270 if (ret) { 3271 btrfs_warn(fs_info, 3272 "failed to create the UUID tree: %d", ret); 3273 close_ctree(fs_info); 3274 return ret; 3275 } 3276 } else if (btrfs_test_opt(fs_info, RESCAN_UUID_TREE) || 3277 fs_info->generation != 3278 btrfs_super_uuid_tree_generation(disk_super)) { 3279 btrfs_info(fs_info, "checking UUID tree"); 3280 ret = btrfs_check_uuid_tree(fs_info); 3281 if (ret) { 3282 btrfs_warn(fs_info, 3283 "failed to check the UUID tree: %d", ret); 3284 close_ctree(fs_info); 3285 return ret; 3286 } 3287 } else { 3288 set_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags); 3289 } 3290 set_bit(BTRFS_FS_OPEN, &fs_info->flags); 3291 3292 /* 3293 * backuproot only affect mount behavior, and if open_ctree succeeded, 3294 * no need to keep the flag 3295 */ 3296 btrfs_clear_opt(fs_info->mount_opt, USEBACKUPROOT); 3297 3298 return 0; 3299 3300 fail_qgroup: 3301 btrfs_free_qgroup_config(fs_info); 3302 fail_trans_kthread: 3303 kthread_stop(fs_info->transaction_kthread); 3304 btrfs_cleanup_transaction(fs_info); 3305 btrfs_free_fs_roots(fs_info); 3306 fail_cleaner: 3307 kthread_stop(fs_info->cleaner_kthread); 3308 3309 /* 3310 * make sure we're done with the btree inode before we stop our 3311 * kthreads 3312 */ 3313 filemap_write_and_wait(fs_info->btree_inode->i_mapping); 3314 3315 fail_sysfs: 3316 btrfs_sysfs_remove_mounted(fs_info); 3317 3318 fail_fsdev_sysfs: 3319 btrfs_sysfs_remove_fsid(fs_info->fs_devices); 3320 3321 fail_block_groups: 3322 btrfs_put_block_group_cache(fs_info); 3323 3324 fail_tree_roots: 3325 free_root_pointers(fs_info, true); 3326 invalidate_inode_pages2(fs_info->btree_inode->i_mapping); 3327 3328 fail_sb_buffer: 3329 btrfs_stop_all_workers(fs_info); 3330 btrfs_free_block_groups(fs_info); 3331 fail_csum: 3332 btrfs_free_csum_hash(fs_info); 3333 fail_alloc: 3334 fail_iput: 3335 btrfs_mapping_tree_free(&fs_info->mapping_tree); 3336 3337 iput(fs_info->btree_inode); 3338 fail_bio_counter: 3339 percpu_counter_destroy(&fs_info->dev_replace.bio_counter); 3340 fail_delalloc_bytes: 3341 percpu_counter_destroy(&fs_info->delalloc_bytes); 3342 fail_dirty_metadata_bytes: 3343 percpu_counter_destroy(&fs_info->dirty_metadata_bytes); 3344 fail_dio_bytes: 3345 percpu_counter_destroy(&fs_info->dio_bytes); 3346 fail_srcu: 3347 cleanup_srcu_struct(&fs_info->subvol_srcu); 3348 fail: 3349 btrfs_free_stripe_hash_table(fs_info); 3350 btrfs_close_devices(fs_info->fs_devices); 3351 return err; 3352 } 3353 ALLOW_ERROR_INJECTION(open_ctree, ERRNO); 3354
--- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
linux-stable-mirror@lists.linaro.org