diff --git a/btrfs.c b/btrfs.c index 4bfefc02..f8d338c2 100644 --- a/btrfs.c +++ b/btrfs.c @@ -128,6 +128,7 @@ struct btrfs_ioctl_search_args_v2 { #include "xlat/btrfs_balance_flags.h" #include "xlat/btrfs_balance_state.h" #include "xlat/btrfs_compress_types.h" +#include "xlat/btrfs_cont_reading_from_srcdev_mode.h" #include "xlat/btrfs_defrag_flags.h" #include "xlat/btrfs_dev_replace_cmds.h" #include "xlat/btrfs_dev_replace_results.h" @@ -634,8 +635,11 @@ MPERS_PRINTER_DECL(int, btrfs_ioctl, if (args.cmd == BTRFS_IOCTL_DEV_REPLACE_CMD_START) { PRINT_FIELD_U(", start={", args.start, srcdevid); - PRINT_FIELD_U(", ", args.start, - cont_reading_from_srcdev_mode); + PRINT_FIELD_XVAL(", ", args.start, + cont_reading_from_srcdev_mode, + btrfs_cont_reading_from_srcdev_mode, + "BTRFS_IOCTL_DEV_REPLACE_CONT_READING" + "_FROM_SRCDEV_MODE_???"); PRINT_FIELD_CSTRING(", ", args.start, srcdev_name); PRINT_FIELD_CSTRING(", ", args.start, diff --git a/tests/btrfs.c b/tests/btrfs.c index d9b04d65..10350727 100644 --- a/tests/btrfs.c +++ b/tests/btrfs.c @@ -23,6 +23,7 @@ #include "xlat/btrfs_balance_flags.h" #include "xlat/btrfs_balance_state.h" #include "xlat/btrfs_compress_types.h" +#include "xlat/btrfs_cont_reading_from_srcdev_mode.h" #include "xlat/btrfs_defrag_flags.h" #include "xlat/btrfs_dev_stats_values.h" #include "xlat/btrfs_dev_stats_flags.h" @@ -1749,17 +1750,29 @@ btrfs_test_dev_replace_ioctl(void) ioctl(-1, BTRFS_IOC_DEV_REPLACE, NULL); printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", ioc(BTRFS_IOC_DEV_REPLACE)); - ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args); - printf("ioctl(-1, %s, " - "{cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_START%s, start={srcdevid=%" - PRI__u64 ", cont_reading_from_srcdev_mode=%" PRI__u64 - ", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) = -1 EBADF (%m)\n", - ioc(BTRFS_IOC_DEV_REPLACE), - verbose_xlat ? "0 /* " : "", verbose_xlat ? " */" : "", - args.start.srcdevid, - args.start.cont_reading_from_srcdev_mode, - (char *)args.start.srcdev_name, - (char *)args.start.tgtdev_name); + for (unsigned long i = 0; i < 3; i++) { + int saved_errno; + + args.start.cont_reading_from_srcdev_mode = i; + ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args); + saved_errno = errno; + printf("ioctl(-1, %s, " + "{cmd=%sBTRFS_IOCTL_DEV_REPLACE_CMD_START%s" + ", start={srcdevid=%" PRI__u64 + ", cont_reading_from_srcdev_mode=", + ioc(BTRFS_IOC_DEV_REPLACE), + verbose_xlat ? "0 /* " : "", verbose_xlat ? " */" : "", + args.start.srcdevid); + prxval_btrfs(btrfs_cont_reading_from_srcdev_mode, + args.start.cont_reading_from_srcdev_mode, + "BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV" + "_MODE_???", i < 2); + errno = saved_errno; + printf(", srcdev_name=\"%s\", tgtdev_name=\"%s\"}}) " + "= -1 EBADF (%m)\n", + (char *)args.start.srcdev_name, + (char *)args.start.tgtdev_name); + } args.cmd = 1; ioctl(-1, BTRFS_IOC_DEV_REPLACE, &args); diff --git a/xlat/btrfs_cont_reading_from_srcdev_mode.in b/xlat/btrfs_cont_reading_from_srcdev_mode.in new file mode 100644 index 00000000..0a1decfb --- /dev/null +++ b/xlat/btrfs_cont_reading_from_srcdev_mode.in @@ -0,0 +1,2 @@ +BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS 0 +BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID 1