]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
devlink: support direct region read requests
authorJacob Keller <jacob.e.keller@intel.com>
Mon, 5 Dec 2022 22:59:31 +0000 (14:59 -0800)
committerDavid Ahern <dsahern@kernel.org>
Thu, 8 Dec 2022 16:21:10 +0000 (09:21 -0700)
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>
devlink/devlink.c

index 4a5eee7a13e8840f0339f031b7332e2ff4123d75..e62215f84f18f6f8115db66e3e59377b5e7e05bb 100644 (file)
@@ -8603,8 +8603,8 @@ static int cmd_region_read(struct dl *dl)
        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;
 
@@ -8613,6 +8613,10 @@ static int cmd_region_read(struct dl *dl)
 
        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);