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