diff options
Diffstat (limited to 'fs/btrfs/dev-replace.c')
-rw-r--r-- | fs/btrfs/dev-replace.c | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index 2cfc3dfff64f..564c92638b20 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c | |||
@@ -102,7 +102,8 @@ no_valid_dev_replace_entry_found: | |||
102 | ptr = btrfs_item_ptr(eb, slot, struct btrfs_dev_replace_item); | 102 | ptr = btrfs_item_ptr(eb, slot, struct btrfs_dev_replace_item); |
103 | 103 | ||
104 | if (item_size != sizeof(struct btrfs_dev_replace_item)) { | 104 | if (item_size != sizeof(struct btrfs_dev_replace_item)) { |
105 | pr_warn("btrfs: dev_replace entry found has unexpected size, ignore entry\n"); | 105 | btrfs_warn(fs_info, |
106 | "dev_replace entry found has unexpected size, ignore entry"); | ||
106 | goto no_valid_dev_replace_entry_found; | 107 | goto no_valid_dev_replace_entry_found; |
107 | } | 108 | } |
108 | 109 | ||
@@ -145,13 +146,19 @@ no_valid_dev_replace_entry_found: | |||
145 | if (!dev_replace->srcdev && | 146 | if (!dev_replace->srcdev && |
146 | !btrfs_test_opt(dev_root, DEGRADED)) { | 147 | !btrfs_test_opt(dev_root, DEGRADED)) { |
147 | ret = -EIO; | 148 | ret = -EIO; |
148 | pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "srcdev (devid %llu) is missing, need to run 'btrfs dev scan'?\n", | 149 | btrfs_warn(fs_info, |
149 | src_devid); | 150 | "cannot mount because device replace operation is ongoing and"); |
151 | btrfs_warn(fs_info, | ||
152 | "srcdev (devid %llu) is missing, need to run 'btrfs dev scan'?", | ||
153 | src_devid); | ||
150 | } | 154 | } |
151 | if (!dev_replace->tgtdev && | 155 | if (!dev_replace->tgtdev && |
152 | !btrfs_test_opt(dev_root, DEGRADED)) { | 156 | !btrfs_test_opt(dev_root, DEGRADED)) { |
153 | ret = -EIO; | 157 | ret = -EIO; |
154 | pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "tgtdev (devid %llu) is missing, need to run btrfs dev scan?\n", | 158 | btrfs_warn(fs_info, |
159 | "cannot mount because device replace operation is ongoing and"); | ||
160 | btrfs_warn(fs_info, | ||
161 | "tgtdev (devid %llu) is missing, need to run 'btrfs dev scan'?", | ||
155 | BTRFS_DEV_REPLACE_DEVID); | 162 | BTRFS_DEV_REPLACE_DEVID); |
156 | } | 163 | } |
157 | if (dev_replace->tgtdev) { | 164 | if (dev_replace->tgtdev) { |
@@ -210,7 +217,7 @@ int btrfs_run_dev_replace(struct btrfs_trans_handle *trans, | |||
210 | } | 217 | } |
211 | ret = btrfs_search_slot(trans, dev_root, &key, path, -1, 1); | 218 | ret = btrfs_search_slot(trans, dev_root, &key, path, -1, 1); |
212 | if (ret < 0) { | 219 | if (ret < 0) { |
213 | pr_warn("btrfs: error %d while searching for dev_replace item!\n", | 220 | btrfs_warn(fs_info, "error %d while searching for dev_replace item!", |
214 | ret); | 221 | ret); |
215 | goto out; | 222 | goto out; |
216 | } | 223 | } |
@@ -230,7 +237,7 @@ int btrfs_run_dev_replace(struct btrfs_trans_handle *trans, | |||
230 | */ | 237 | */ |
231 | ret = btrfs_del_item(trans, dev_root, path); | 238 | ret = btrfs_del_item(trans, dev_root, path); |
232 | if (ret != 0) { | 239 | if (ret != 0) { |
233 | pr_warn("btrfs: delete too small dev_replace item failed %d!\n", | 240 | btrfs_warn(fs_info, "delete too small dev_replace item failed %d!", |
234 | ret); | 241 | ret); |
235 | goto out; | 242 | goto out; |
236 | } | 243 | } |
@@ -243,7 +250,7 @@ int btrfs_run_dev_replace(struct btrfs_trans_handle *trans, | |||
243 | ret = btrfs_insert_empty_item(trans, dev_root, path, | 250 | ret = btrfs_insert_empty_item(trans, dev_root, path, |
244 | &key, sizeof(*ptr)); | 251 | &key, sizeof(*ptr)); |
245 | if (ret < 0) { | 252 | if (ret < 0) { |
246 | pr_warn("btrfs: insert dev_replace item failed %d!\n", | 253 | btrfs_warn(fs_info, "insert dev_replace item failed %d!", |
247 | ret); | 254 | ret); |
248 | goto out; | 255 | goto out; |
249 | } | 256 | } |
@@ -305,7 +312,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
305 | struct btrfs_device *src_device = NULL; | 312 | struct btrfs_device *src_device = NULL; |
306 | 313 | ||
307 | if (btrfs_fs_incompat(fs_info, RAID56)) { | 314 | if (btrfs_fs_incompat(fs_info, RAID56)) { |
308 | pr_warn("btrfs: dev_replace cannot yet handle RAID5/RAID6\n"); | 315 | btrfs_warn(fs_info, "dev_replace cannot yet handle RAID5/RAID6"); |
309 | return -EINVAL; | 316 | return -EINVAL; |
310 | } | 317 | } |
311 | 318 | ||
@@ -325,7 +332,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
325 | ret = btrfs_init_dev_replace_tgtdev(root, args->start.tgtdev_name, | 332 | ret = btrfs_init_dev_replace_tgtdev(root, args->start.tgtdev_name, |
326 | &tgt_device); | 333 | &tgt_device); |
327 | if (ret) { | 334 | if (ret) { |
328 | pr_err("btrfs: target device %s is invalid!\n", | 335 | btrfs_err(fs_info, "target device %s is invalid!", |
329 | args->start.tgtdev_name); | 336 | args->start.tgtdev_name); |
330 | mutex_unlock(&fs_info->volume_mutex); | 337 | mutex_unlock(&fs_info->volume_mutex); |
331 | return -EINVAL; | 338 | return -EINVAL; |
@@ -341,7 +348,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
341 | } | 348 | } |
342 | 349 | ||
343 | if (tgt_device->total_bytes < src_device->total_bytes) { | 350 | if (tgt_device->total_bytes < src_device->total_bytes) { |
344 | pr_err("btrfs: target device is smaller than source device!\n"); | 351 | btrfs_err(fs_info, "target device is smaller than source device!"); |
345 | ret = -EINVAL; | 352 | ret = -EINVAL; |
346 | goto leave_no_lock; | 353 | goto leave_no_lock; |
347 | } | 354 | } |
@@ -366,7 +373,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
366 | dev_replace->tgtdev = tgt_device; | 373 | dev_replace->tgtdev = tgt_device; |
367 | 374 | ||
368 | printk_in_rcu(KERN_INFO | 375 | printk_in_rcu(KERN_INFO |
369 | "btrfs: dev_replace from %s (devid %llu) to %s started\n", | 376 | "BTRFS: dev_replace from %s (devid %llu) to %s started\n", |
370 | src_device->missing ? "<missing disk>" : | 377 | src_device->missing ? "<missing disk>" : |
371 | rcu_str_deref(src_device->name), | 378 | rcu_str_deref(src_device->name), |
372 | src_device->devid, | 379 | src_device->devid, |
@@ -489,7 +496,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, | |||
489 | 496 | ||
490 | if (scrub_ret) { | 497 | if (scrub_ret) { |
491 | printk_in_rcu(KERN_ERR | 498 | printk_in_rcu(KERN_ERR |
492 | "btrfs: btrfs_scrub_dev(%s, %llu, %s) failed %d\n", | 499 | "BTRFS: btrfs_scrub_dev(%s, %llu, %s) failed %d\n", |
493 | src_device->missing ? "<missing disk>" : | 500 | src_device->missing ? "<missing disk>" : |
494 | rcu_str_deref(src_device->name), | 501 | rcu_str_deref(src_device->name), |
495 | src_device->devid, | 502 | src_device->devid, |
@@ -504,7 +511,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, | |||
504 | } | 511 | } |
505 | 512 | ||
506 | printk_in_rcu(KERN_INFO | 513 | printk_in_rcu(KERN_INFO |
507 | "btrfs: dev_replace from %s (devid %llu) to %s) finished\n", | 514 | "BTRFS: dev_replace from %s (devid %llu) to %s) finished\n", |
508 | src_device->missing ? "<missing disk>" : | 515 | src_device->missing ? "<missing disk>" : |
509 | rcu_str_deref(src_device->name), | 516 | rcu_str_deref(src_device->name), |
510 | src_device->devid, | 517 | src_device->devid, |
@@ -699,7 +706,7 @@ void btrfs_dev_replace_suspend_for_unmount(struct btrfs_fs_info *fs_info) | |||
699 | BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED; | 706 | BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED; |
700 | dev_replace->time_stopped = get_seconds(); | 707 | dev_replace->time_stopped = get_seconds(); |
701 | dev_replace->item_needs_writeback = 1; | 708 | dev_replace->item_needs_writeback = 1; |
702 | pr_info("btrfs: suspending dev_replace for unmount\n"); | 709 | btrfs_info(fs_info, "suspending dev_replace for unmount"); |
703 | break; | 710 | break; |
704 | } | 711 | } |
705 | 712 | ||
@@ -728,8 +735,9 @@ int btrfs_resume_dev_replace_async(struct btrfs_fs_info *fs_info) | |||
728 | break; | 735 | break; |
729 | } | 736 | } |
730 | if (!dev_replace->tgtdev || !dev_replace->tgtdev->bdev) { | 737 | if (!dev_replace->tgtdev || !dev_replace->tgtdev->bdev) { |
731 | pr_info("btrfs: cannot continue dev_replace, tgtdev is missing\n" | 738 | btrfs_info(fs_info, "cannot continue dev_replace, tgtdev is missing"); |
732 | "btrfs: you may cancel the operation after 'mount -o degraded'\n"); | 739 | btrfs_info(fs_info, |
740 | "you may cancel the operation after 'mount -o degraded'"); | ||
733 | btrfs_dev_replace_unlock(dev_replace); | 741 | btrfs_dev_replace_unlock(dev_replace); |
734 | return 0; | 742 | return 0; |
735 | } | 743 | } |
@@ -755,14 +763,14 @@ static int btrfs_dev_replace_kthread(void *data) | |||
755 | kfree(status_args); | 763 | kfree(status_args); |
756 | do_div(progress, 10); | 764 | do_div(progress, 10); |
757 | printk_in_rcu(KERN_INFO | 765 | printk_in_rcu(KERN_INFO |
758 | "btrfs: continuing dev_replace from %s (devid %llu) to %s @%u%%\n", | 766 | "BTRFS: continuing dev_replace from %s (devid %llu) to %s @%u%%\n", |
759 | dev_replace->srcdev->missing ? "<missing disk>" : | 767 | dev_replace->srcdev->missing ? "<missing disk>" : |
760 | rcu_str_deref(dev_replace->srcdev->name), | 768 | rcu_str_deref(dev_replace->srcdev->name), |
761 | dev_replace->srcdev->devid, | 769 | dev_replace->srcdev->devid, |
762 | dev_replace->tgtdev ? | 770 | dev_replace->tgtdev ? |
763 | rcu_str_deref(dev_replace->tgtdev->name) : | 771 | rcu_str_deref(dev_replace->tgtdev->name) : |
764 | "<missing target disk>", | 772 | "<missing target disk>", |
765 | (unsigned int)progress); | 773 | (unsigned int)progress); |
766 | } | 774 | } |
767 | btrfs_dev_replace_continue_on_mount(fs_info); | 775 | btrfs_dev_replace_continue_on_mount(fs_info); |
768 | atomic_set(&fs_info->mutually_exclusive_operation_running, 0); | 776 | atomic_set(&fs_info->mutually_exclusive_operation_running, 0); |