Nice. With this new option, it should be possible to achieve something like RAID56 corruption test-script say, https://patchwork.kernel.org/patch/9583455/ right? ---- Cheers, Lakshmipathi.G FOSS Programmer. http://www.giis.co.in http://www.webminal.org On Mon, Apr 17, 2017 at 8:56 AM, Qu Wenruo <quwenruo@xxxxxxxxxxxxxx> wrote: > Introduce a new option, --pattern, to specify the pattern to fill > mirror. > > Signed-off-by: Qu Wenruo <quwenruo@xxxxxxxxxxxxxx> > --- > Documentation/btrfs-modify.asciidoc | 5 +++++ > modify/mirror.c | 11 ++++++++++- > 2 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/Documentation/btrfs-modify.asciidoc b/Documentation/btrfs-modify.asciidoc > index ae2ada65..d82fb0df 100644 > --- a/Documentation/btrfs-modify.asciidoc > +++ b/Documentation/btrfs-modify.asciidoc > @@ -41,6 +41,11 @@ stripe number 1. > P for RAID56 1st parity stripe. Only RAID5 and RAID6 support stripe number P. > Q for RAID6 2nd parity stripe. > > +--pattern <pattern>:::: > +Specify to pattern to modify the mirror data5f536652. > ++ > +Default value is "0x66524842" (ascii "BHRf", part of the btrfs magic "_BHRfS_M"). > + > EXIT STATUS > ----------- > *btrfs-modify* returns a zero exit status if all its operations succeed. > diff --git a/modify/mirror.c b/modify/mirror.c > index c89927f6..dd717fbe 100644 > --- a/modify/mirror.c > +++ b/modify/mirror.c > @@ -373,13 +373,15 @@ int modify_mirror(int argc, char **argv) > char *device; > u64 length = (u64)-1; > u64 logical = (u64)-1; > + u32 pattern = 0x66524842; > int stripe = STRIPE_UNINITILIZED; > int ret; > > while (1) { > int c; > enum { GETOPT_VAL_LOGICAL = 257, GETOPT_VAL_LENGTH, > - GETOPT_VAL_STRIPE, GETOPT_VAL_ROOT_INO_OFFSET }; > + GETOPT_VAL_STRIPE, GETOPT_VAL_ROOT_INO_OFFSET, > + GETOPT_VAL_PATTERN }; > static const struct option long_options[] = { > { "logical", required_argument, NULL, > GETOPT_VAL_LOGICAL }, > @@ -388,6 +390,8 @@ int modify_mirror(int argc, char **argv) > { "stripe", required_argument, NULL, GETOPT_VAL_STRIPE }, > { "root-ino-offset", required_argument, NULL, > GETOPT_VAL_ROOT_INO_OFFSET}, > + { "pattern", required_argument, NULL, > + GETOPT_VAL_PATTERN}, > { NULL, 0, NULL, 0 } > }; > > @@ -407,6 +411,9 @@ int modify_mirror(int argc, char **argv) > case GETOPT_VAL_ROOT_INO_OFFSET: > parse_root_ino_offset(&dest, optarg); > break; > + case GETOPT_VAL_PATTERN: > + pattern = arg_strtou32(optarg); > + break; > case '?': > case 'h': > usage(modify_mirror_usage); > @@ -439,6 +446,8 @@ int modify_mirror(int argc, char **argv) > stripe = 0; > } > > + memset(write_buf, pattern, sizeof(write_buf) / sizeof(pattern)); > + > fs_info = open_ctree_fs_info(device, 0, 0, 0, OPEN_CTREE_WRITES); > if (!fs_info) { > error("failed to open btrfs on device %s\n", device); > -- > 2.12.2 > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
