OSDN Git Service

btrfs: log, when replace, is canceled by the user
authorAnand Jain <anand.jain@oracle.com>
Tue, 13 Feb 2018 03:53:43 +0000 (11:53 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 26 Mar 2018 13:09:34 +0000 (15:09 +0200)
For debugging or administration purposes, we would want to know if and
when the user cancels the replace, to complement the existing messages
when dev-replace starts or finishes.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ update changelog, fold fix for RCU warning from Nikolay ]
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/dev-replace.c

index c523478..e279f04 100644 (file)
@@ -703,6 +703,7 @@ int btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info)
 {
        struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
        struct btrfs_device *tgt_device = NULL;
+       struct btrfs_device *src_device = NULL;
        struct btrfs_trans_handle *trans;
        struct btrfs_root *root = fs_info->tree_root;
        int result;
@@ -724,6 +725,7 @@ int btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info)
        case BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED:
                result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
                tgt_device = dev_replace->tgtdev;
+               src_device = dev_replace->srcdev;
                dev_replace->tgtdev = NULL;
                dev_replace->srcdev = NULL;
                break;
@@ -741,6 +743,12 @@ int btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info)
        }
        ret = btrfs_commit_transaction(trans);
        WARN_ON(ret);
+
+       btrfs_info_in_rcu(fs_info,
+               "dev_replace from %s (devid %llu) to %s canceled",
+               btrfs_dev_name(src_device), src_device->devid,
+               btrfs_dev_name(tgt_device));
+
        if (tgt_device)
                btrfs_destroy_dev_replace_tgtdev(fs_info, tgt_device);