diff options
author | Chris Mason <clm@fb.com> | 2015-10-12 19:24:15 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-10-12 19:24:15 -0400 |
commit | 62fb50ab7c903357c92cef2f7677235b92ac575f (patch) | |
tree | 28f66d4e2c14b508b6b24795bfadf11aaada2d75 /fs/btrfs/dev-replace.c | |
parent | 640926ffdda7e817965d3bfb5bbbc51598ccf49b (diff) | |
parent | 73416dab235e5ff030e3b3c61da0cd6ced324fc9 (diff) |
Merge branch 'anand/sysfs-updates-v4.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux into for-linus-4.4
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/dev-replace.c')
-rw-r--r-- | fs/btrfs/dev-replace.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index ede1c1ad0baf..a64ca942b63f 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c | |||
@@ -327,19 +327,6 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
327 | args->start.tgtdev_name[0] == '\0') | 327 | args->start.tgtdev_name[0] == '\0') |
328 | return -EINVAL; | 328 | return -EINVAL; |
329 | 329 | ||
330 | /* | ||
331 | * Here we commit the transaction to make sure commit_total_bytes | ||
332 | * of all the devices are updated. | ||
333 | */ | ||
334 | trans = btrfs_attach_transaction(root); | ||
335 | if (!IS_ERR(trans)) { | ||
336 | ret = btrfs_commit_transaction(trans, root); | ||
337 | if (ret) | ||
338 | return ret; | ||
339 | } else if (PTR_ERR(trans) != -ENOENT) { | ||
340 | return PTR_ERR(trans); | ||
341 | } | ||
342 | |||
343 | /* the disk copy procedure reuses the scrub code */ | 330 | /* the disk copy procedure reuses the scrub code */ |
344 | mutex_lock(&fs_info->volume_mutex); | 331 | mutex_lock(&fs_info->volume_mutex); |
345 | ret = btrfs_dev_replace_find_srcdev(root, args->start.srcdevid, | 332 | ret = btrfs_dev_replace_find_srcdev(root, args->start.srcdevid, |
@@ -356,6 +343,19 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
356 | if (ret) | 343 | if (ret) |
357 | return ret; | 344 | return ret; |
358 | 345 | ||
346 | /* | ||
347 | * Here we commit the transaction to make sure commit_total_bytes | ||
348 | * of all the devices are updated. | ||
349 | */ | ||
350 | trans = btrfs_attach_transaction(root); | ||
351 | if (!IS_ERR(trans)) { | ||
352 | ret = btrfs_commit_transaction(trans, root); | ||
353 | if (ret) | ||
354 | return ret; | ||
355 | } else if (PTR_ERR(trans) != -ENOENT) { | ||
356 | return PTR_ERR(trans); | ||
357 | } | ||
358 | |||
359 | btrfs_dev_replace_lock(dev_replace); | 359 | btrfs_dev_replace_lock(dev_replace); |
360 | switch (dev_replace->replace_state) { | 360 | switch (dev_replace->replace_state) { |
361 | case BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED: | 361 | case BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED: |
@@ -375,10 +375,6 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
375 | WARN_ON(!tgt_device); | 375 | WARN_ON(!tgt_device); |
376 | dev_replace->tgtdev = tgt_device; | 376 | dev_replace->tgtdev = tgt_device; |
377 | 377 | ||
378 | ret = btrfs_kobj_add_device(tgt_device->fs_devices, tgt_device); | ||
379 | if (ret) | ||
380 | btrfs_err(root->fs_info, "kobj add dev failed %d\n", ret); | ||
381 | |||
382 | btrfs_info_in_rcu(root->fs_info, | 378 | btrfs_info_in_rcu(root->fs_info, |
383 | "dev_replace from %s (devid %llu) to %s started", | 379 | "dev_replace from %s (devid %llu) to %s started", |
384 | src_device->missing ? "<missing disk>" : | 380 | src_device->missing ? "<missing disk>" : |
@@ -401,6 +397,10 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
401 | args->result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR; | 397 | args->result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR; |
402 | btrfs_dev_replace_unlock(dev_replace); | 398 | btrfs_dev_replace_unlock(dev_replace); |
403 | 399 | ||
400 | ret = btrfs_sysfs_add_device_link(tgt_device->fs_devices, tgt_device); | ||
401 | if (ret) | ||
402 | btrfs_err(root->fs_info, "kobj add dev failed %d\n", ret); | ||
403 | |||
404 | btrfs_wait_ordered_roots(root->fs_info, -1); | 404 | btrfs_wait_ordered_roots(root->fs_info, -1); |
405 | 405 | ||
406 | /* force writing the updated state information to disk */ | 406 | /* force writing the updated state information to disk */ |
@@ -586,7 +586,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, | |||
586 | mutex_unlock(&uuid_mutex); | 586 | mutex_unlock(&uuid_mutex); |
587 | 587 | ||
588 | /* replace the sysfs entry */ | 588 | /* replace the sysfs entry */ |
589 | btrfs_kobj_rm_device(fs_info->fs_devices, src_device); | 589 | btrfs_sysfs_rm_device_link(fs_info->fs_devices, src_device); |
590 | btrfs_rm_dev_replace_free_srcdev(fs_info, src_device); | 590 | btrfs_rm_dev_replace_free_srcdev(fs_info, src_device); |
591 | 591 | ||
592 | /* write back the superblocks */ | 592 | /* write back the superblocks */ |