The kernel has gained support for reading from regions without needing to
create a snapshot. To use this support, the DEVLINK_ATTR_REGION_DIRECT
attribute must be added to the command.
For the "read" command, if the user did not specify a snapshot, add the new
attribute to request a direct read. The "dump" command will still require a
snapshot. While technically a dump could be performed without a snapshot it
is not guaranteed to be atomic unless the region size is no larger than
256 bytes.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
int err;
err = dl_argv_parse(dl, DL_OPT_HANDLE_REGION | DL_OPT_REGION_ADDRESS |
- DL_OPT_REGION_LENGTH | DL_OPT_REGION_SNAPSHOT_ID,
- 0);
+ DL_OPT_REGION_LENGTH,
+ DL_OPT_REGION_SNAPSHOT_ID);
if (err)
return err;
dl_opts_put(nlh, dl);
+ /* If user didn't provide a snapshot id, perform a direct read */
+ if (!(dl->opts.present & DL_OPT_REGION_SNAPSHOT_ID))
+ mnl_attr_put(nlh, DEVLINK_ATTR_REGION_DIRECT, 0, NULL);
+
pr_out_section_start(dl, "read");
err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_region_read_cb, dl);
pr_out_section_end(dl);