volumes.c (a1e8780a89ec13217fa1c8f86faf5546110e1402) volumes.c (c1c9ff7c94e83fae89a742df74db51156869bad5)
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 900 unchanged lines hidden (view full) ---

909 if (disk_super->label[0]) {
910 if (disk_super->label[BTRFS_LABEL_SIZE - 1])
911 disk_super->label[BTRFS_LABEL_SIZE - 1] = '\0';
912 printk(KERN_INFO "device label %s ", disk_super->label);
913 } else {
914 printk(KERN_INFO "device fsid %pU ", disk_super->fsid);
915 }
916
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 900 unchanged lines hidden (view full) ---

909 if (disk_super->label[0]) {
910 if (disk_super->label[BTRFS_LABEL_SIZE - 1])
911 disk_super->label[BTRFS_LABEL_SIZE - 1] = '\0';
912 printk(KERN_INFO "device label %s ", disk_super->label);
913 } else {
914 printk(KERN_INFO "device fsid %pU ", disk_super->fsid);
915 }
916
917 printk(KERN_CONT "devid %llu transid %llu %s\n",
918 (unsigned long long)devid, (unsigned long long)transid, path);
917 printk(KERN_CONT "devid %llu transid %llu %s\n", devid, transid, path);
919
920 ret = device_list_add(path, disk_super, devid, fs_devices_ret);
921 if (!ret && fs_devices_ret)
922 (*fs_devices_ret)->total_devices = total_devices;
923
924error_unmap:
925 kunmap(page);
926 page_cache_release(page);

--- 2227 unchanged lines hidden (view full) ---

3154 if (num_devices > 3)
3155 allowed |= (BTRFS_BLOCK_GROUP_RAID10 |
3156 BTRFS_BLOCK_GROUP_RAID6);
3157 if ((bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3158 (!alloc_profile_is_valid(bctl->data.target, 1) ||
3159 (bctl->data.target & ~allowed))) {
3160 printk(KERN_ERR "btrfs: unable to start balance with target "
3161 "data profile %llu\n",
918
919 ret = device_list_add(path, disk_super, devid, fs_devices_ret);
920 if (!ret && fs_devices_ret)
921 (*fs_devices_ret)->total_devices = total_devices;
922
923error_unmap:
924 kunmap(page);
925 page_cache_release(page);

--- 2227 unchanged lines hidden (view full) ---

3153 if (num_devices > 3)
3154 allowed |= (BTRFS_BLOCK_GROUP_RAID10 |
3155 BTRFS_BLOCK_GROUP_RAID6);
3156 if ((bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3157 (!alloc_profile_is_valid(bctl->data.target, 1) ||
3158 (bctl->data.target & ~allowed))) {
3159 printk(KERN_ERR "btrfs: unable to start balance with target "
3160 "data profile %llu\n",
3162 (unsigned long long)bctl->data.target);
3161 bctl->data.target);
3163 ret = -EINVAL;
3164 goto out;
3165 }
3166 if ((bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3167 (!alloc_profile_is_valid(bctl->meta.target, 1) ||
3168 (bctl->meta.target & ~allowed))) {
3169 printk(KERN_ERR "btrfs: unable to start balance with target "
3170 "metadata profile %llu\n",
3162 ret = -EINVAL;
3163 goto out;
3164 }
3165 if ((bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3166 (!alloc_profile_is_valid(bctl->meta.target, 1) ||
3167 (bctl->meta.target & ~allowed))) {
3168 printk(KERN_ERR "btrfs: unable to start balance with target "
3169 "metadata profile %llu\n",
3171 (unsigned long long)bctl->meta.target);
3170 bctl->meta.target);
3172 ret = -EINVAL;
3173 goto out;
3174 }
3175 if ((bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3176 (!alloc_profile_is_valid(bctl->sys.target, 1) ||
3177 (bctl->sys.target & ~allowed))) {
3178 printk(KERN_ERR "btrfs: unable to start balance with target "
3179 "system profile %llu\n",
3171 ret = -EINVAL;
3172 goto out;
3173 }
3174 if ((bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3175 (!alloc_profile_is_valid(bctl->sys.target, 1) ||
3176 (bctl->sys.target & ~allowed))) {
3177 printk(KERN_ERR "btrfs: unable to start balance with target "
3178 "system profile %llu\n",
3180 (unsigned long long)bctl->sys.target);
3179 bctl->sys.target);
3181 ret = -EINVAL;
3182 goto out;
3183 }
3184
3185 /* allow dup'ed data chunks only in mixed mode */
3186 if (!mixed && (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3187 (bctl->data.target & BTRFS_BLOCK_GROUP_DUP)) {
3188 printk(KERN_ERR "btrfs: dup for data is not allowed\n");

--- 1458 unchanged lines hidden (view full) ---

4647 u64 raid56_full_stripe_start = (u64)-1;
4648
4649 read_lock(&em_tree->lock);
4650 em = lookup_extent_mapping(em_tree, logical, *length);
4651 read_unlock(&em_tree->lock);
4652
4653 if (!em) {
4654 btrfs_crit(fs_info, "unable to find logical %llu len %llu",
3180 ret = -EINVAL;
3181 goto out;
3182 }
3183
3184 /* allow dup'ed data chunks only in mixed mode */
3185 if (!mixed && (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3186 (bctl->data.target & BTRFS_BLOCK_GROUP_DUP)) {
3187 printk(KERN_ERR "btrfs: dup for data is not allowed\n");

--- 1458 unchanged lines hidden (view full) ---

4646 u64 raid56_full_stripe_start = (u64)-1;
4647
4648 read_lock(&em_tree->lock);
4649 em = lookup_extent_mapping(em_tree, logical, *length);
4650 read_unlock(&em_tree->lock);
4651
4652 if (!em) {
4653 btrfs_crit(fs_info, "unable to find logical %llu len %llu",
4655 (unsigned long long)logical,
4656 (unsigned long long)*length);
4654 logical, *length);
4657 return -EINVAL;
4658 }
4659
4660 if (em->start > logical || em->start + em->len < logical) {
4661 btrfs_crit(fs_info, "found a bad mapping, wanted %Lu, "
4662 "found %Lu-%Lu\n", logical, em->start,
4663 em->start + em->len);
4664 return -EINVAL;

--- 854 unchanged lines hidden (view full) ---

5519 return raid56_parity_recover(root, bio, bbio,
5520 raid_map, map_length,
5521 mirror_num);
5522 }
5523 }
5524
5525 if (map_length < length) {
5526 btrfs_crit(root->fs_info, "mapping failed logical %llu bio len %llu len %llu",
4655 return -EINVAL;
4656 }
4657
4658 if (em->start > logical || em->start + em->len < logical) {
4659 btrfs_crit(fs_info, "found a bad mapping, wanted %Lu, "
4660 "found %Lu-%Lu\n", logical, em->start,
4661 em->start + em->len);
4662 return -EINVAL;

--- 854 unchanged lines hidden (view full) ---

5517 return raid56_parity_recover(root, bio, bbio,
5518 raid_map, map_length,
5519 mirror_num);
5520 }
5521 }
5522
5523 if (map_length < length) {
5524 btrfs_crit(root->fs_info, "mapping failed logical %llu bio len %llu len %llu",
5527 (unsigned long long)logical,
5528 (unsigned long long)length,
5529 (unsigned long long)map_length);
5525 logical, length, map_length);
5530 BUG();
5531 }
5532
5533 while (dev_nr < total_devs) {
5534 dev = bbio->stripes[dev_nr].dev;
5535 if (!dev || !dev->bdev || (rw & WRITE && !dev->writeable)) {
5536 bbio_error(bbio, first_bio, logical);
5537 dev_nr++;

--- 303 unchanged lines hidden (view full) ---

5841 }
5842
5843 device = btrfs_find_device(root->fs_info, devid, dev_uuid, fs_uuid);
5844 if (!device || !device->bdev) {
5845 if (!btrfs_test_opt(root, DEGRADED))
5846 return -EIO;
5847
5848 if (!device) {
5526 BUG();
5527 }
5528
5529 while (dev_nr < total_devs) {
5530 dev = bbio->stripes[dev_nr].dev;
5531 if (!dev || !dev->bdev || (rw & WRITE && !dev->writeable)) {
5532 bbio_error(bbio, first_bio, logical);
5533 dev_nr++;

--- 303 unchanged lines hidden (view full) ---

5837 }
5838
5839 device = btrfs_find_device(root->fs_info, devid, dev_uuid, fs_uuid);
5840 if (!device || !device->bdev) {
5841 if (!btrfs_test_opt(root, DEGRADED))
5842 return -EIO;
5843
5844 if (!device) {
5849 btrfs_warn(root->fs_info, "devid %llu missing",
5850 (unsigned long long)devid);
5845 btrfs_warn(root->fs_info, "devid %llu missing", devid);
5851 device = add_missing_dev(root, devid, dev_uuid);
5852 if (!device)
5853 return -ENOMEM;
5854 } else if (!device->missing) {
5855 /*
5856 * this happens when a device that was properly setup
5857 * in the device info lists suddenly goes bad.
5858 * device->bdev is NULL, and so we have to set

--- 424 unchanged lines hidden ---
5846 device = add_missing_dev(root, devid, dev_uuid);
5847 if (!device)
5848 return -ENOMEM;
5849 } else if (!device->missing) {
5850 /*
5851 * this happens when a device that was properly setup
5852 * in the device info lists suddenly goes bad.
5853 * device->bdev is NULL, and so we have to set

--- 424 unchanged lines hidden ---