lkml.org 
[lkml]   [2019]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/12] btrfs-progs: introduce support for dev-place HMZONED device
    Date
    This patch check if the target file system is flagged as HMZONED. If it is,
    the device to be added is flagged PREP_DEVICE_HMZONED. Also add checks to
    prevent mixing non-zoned devices and zoned devices.

    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    ---
    cmds-replace.c | 12 +++++++++++-
    1 file changed, 11 insertions(+), 1 deletion(-)

    diff --git a/cmds-replace.c b/cmds-replace.c
    index 713d200938d4..c752ceaadb77 100644
    --- a/cmds-replace.c
    +++ b/cmds-replace.c
    @@ -116,6 +116,7 @@ static const char *const cmd_replace_start_usage[] = {

    static int cmd_replace_start(int argc, char **argv)
    {
    + struct btrfs_ioctl_feature_flags feature_flags;
    struct btrfs_ioctl_dev_replace_args start_args = {0};
    struct btrfs_ioctl_dev_replace_args status_args = {0};
    int ret;
    @@ -123,6 +124,7 @@ static int cmd_replace_start(int argc, char **argv)
    int c;
    int fdmnt = -1;
    int fddstdev = -1;
    + int hmzoned;
    char *path;
    char *srcdev;
    char *dstdev = NULL;
    @@ -163,6 +165,13 @@ static int cmd_replace_start(int argc, char **argv)
    if (fdmnt < 0)
    goto leave_with_error;

    + ret = ioctl(fdmnt, BTRFS_IOC_GET_FEATURES, &feature_flags);
    + if (ret) {
    + error("ioctl(GET_FEATURES) on '%s' returns error: %m", path);
    + goto leave_with_error;
    + }
    + hmzoned = feature_flags.incompat_flags & BTRFS_FEATURE_INCOMPAT_HMZONED;
    +
    /* check for possible errors before backgrounding */
    status_args.cmd = BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS;
    status_args.result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_RESULT;
    @@ -257,7 +266,8 @@ static int cmd_replace_start(int argc, char **argv)
    strncpy((char *)start_args.start.tgtdev_name, dstdev,
    BTRFS_DEVICE_PATH_NAME_MAX);
    ret = btrfs_prepare_device(fddstdev, dstdev, &dstdev_block_count, 0,
    - PREP_DEVICE_ZERO_END | PREP_DEVICE_VERBOSE);
    + PREP_DEVICE_ZERO_END | PREP_DEVICE_VERBOSE |
    + (hmzoned ? PREP_DEVICE_HMZONED | PREP_DEVICE_DISCARD : 0));
    if (ret)
    goto leave_with_error;

    --
    2.21.0
    \
     
     \ /
      Last update: 2019-06-07 15:18    [W:4.050 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site