diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c index 07a706d8887f..12999ca95506 100644 --- a/drivers/md/dm-verity-target.c +++ b/drivers/md/dm-verity-target.c @@ -17,6 +17,7 @@ #include "dm-verity-fec.h" #include #include "dm-verity-verify-sig.h" +#include #include #include @@ -29,7 +30,6 @@ #define DM_VERITY_MAX_CORRUPTED_ERRS 100 -#define DM_VERITY_OPT_DEVICE_WAIT "device_wait" #define DM_VERITY_OPT_LOGGING "ignore_corruption" #define DM_VERITY_OPT_RESTART "restart_on_corruption" #define DM_VERITY_OPT_IGN_ZEROES "ignore_zero_blocks" @@ -42,7 +42,17 @@ static unsigned dm_verity_prefetch_cluster = DM_VERITY_DEFAULT_PREFETCH_SIZE; module_param_named(prefetch_cluster, dm_verity_prefetch_cluster, uint, S_IRUGO | S_IWUSR); +/* + * If rootwait parameter defined, wait for root device to be available + * before continuing with verity target + */ static int dm_device_wait; +static int __init dm_verity_root_wait_setup(char *s) +{ + dm_device_wait = 1; + return 0; +} +early_param("rootwait", dm_verity_root_wait_setup); struct dm_verity_prefetch_work { struct work_struct work; @@ -888,39 +898,6 @@ out: return r; } - -static int verity_parse_pre_opt_args(struct dm_arg_set *as, struct dm_verity *v) -{ - int r; - unsigned int argc; - const char *arg_name; - struct dm_target *ti = v->ti; - static struct dm_arg _args[] = { - {0, DM_VERITY_OPTS_MAX, "Invalid number of feature args"}, - }; - - r = dm_read_arg_group(_args, as, &argc, &ti->error); - if (r) - return -EINVAL; - - if (!argc) - return 0; - - do { - arg_name = dm_shift_arg(as); - argc--; - - if (!strcasecmp(arg_name, DM_VERITY_OPT_DEVICE_WAIT)) { - - dm_device_wait = 1; - continue; - } - - } while (argc); - - return 0; -} - static int verity_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v, struct dm_verity_sig_opts *verify_args) { @@ -972,9 +949,6 @@ static int verity_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v, return r; continue; - } else if (!strcasecmp(arg_name, DM_VERITY_OPT_DEVICE_WAIT)) { - continue; - } else if (verity_verify_is_sig_opt_arg(arg_name)) { r = verity_verify_sig_parse_opt_args(as, v, verify_args, @@ -1043,15 +1017,6 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv) goto bad; } - /* Optional parameters which are parsed pre required args. */ - if ((argc - 10)) { - as.argc = argc - 10; - as.argv = argv + 10; - r = verity_parse_pre_opt_args(&as, v); - if (r < 0) - goto bad; - } - if (sscanf(argv[0], "%u%c", &num, &dummy) != 1 || num > 1) { ti->error = "Invalid version";