mirror of
https://github.com/kdave/btrfs-progs
synced 2025-02-13 08:07:06 +00:00
btrfs-progs: zoned: introduce zoned support for device replace
This patch checks if the target file system is flagged as ZONED. If it is, the device to be added is flagged PREP_DEVICE_ZONED. Also add checks to prevent mixing non-zoned devices and zoned devices. Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
b8b9da2eab
commit
494c2ea467
@ -122,12 +122,14 @@ static const char *const cmd_replace_start_usage[] = {
|
||||
static int cmd_replace_start(const struct cmd_struct *cmd,
|
||||
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;
|
||||
int i;
|
||||
int fdmnt = -1;
|
||||
int fddstdev = -1;
|
||||
int zoned;
|
||||
char *path;
|
||||
char *srcdev;
|
||||
char *dstdev = NULL;
|
||||
@ -182,6 +184,14 @@ static int cmd_replace_start(const struct cmd_struct *cmd,
|
||||
if (fdmnt < 0)
|
||||
goto leave_with_error;
|
||||
|
||||
ret = ioctl(fdmnt, BTRFS_IOC_GET_FEATURES, &feature_flags);
|
||||
if (ret) {
|
||||
error("zoned: ioctl(GET_FEATURES) on '%s' returns error: %m",
|
||||
path);
|
||||
goto leave_with_error;
|
||||
}
|
||||
zoned = (feature_flags.incompat_flags & BTRFS_FEATURE_INCOMPAT_ZONED);
|
||||
|
||||
/* 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;
|
||||
@ -286,7 +296,8 @@ static int cmd_replace_start(const struct cmd_struct *cmd,
|
||||
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 |
|
||||
(zoned ? PREP_DEVICE_ZONED : 0));
|
||||
if (ret)
|
||||
goto leave_with_error;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user