diff mbox series

[iproute2-next,v3] devlink: support kernel-side snapshot id allocation

Message ID 20200430175759.1301789-5-kuba@kernel.org
State Changes Requested
Delegated to: David Ahern
Headers show
Series [iproute2-next,v3] devlink: support kernel-side snapshot id allocation | expand

Commit Message

Jakub Kicinski April 30, 2020, 5:57 p.m. UTC
Make ID argument optional and read the snapshot info
that kernel sends us.

$ devlink region new netdevsim/netdevsim1/dummy
netdevsim/netdevsim1/dummy: snapshot 0
$ devlink -jp region new netdevsim/netdevsim1/dummy
{
    "regions": {
        "netdevsim/netdevsim1/dummy": {
            "snapshot": [ 1 ]
        }
    }
}
$ devlink region show netdevsim/netdevsim1/dummy
netdevsim/netdevsim1/dummy: size 32768 snapshot [0 1]

v3: back to v1..

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 devlink/devlink.c | 26 +++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

Comments

Jiri Pirko May 2, 2020, 5:58 a.m. UTC | #1
Thu, Apr 30, 2020 at 07:57:59PM CEST, kuba@kernel.org wrote:
>Make ID argument optional and read the snapshot info
>that kernel sends us.
>
>$ devlink region new netdevsim/netdevsim1/dummy
>netdevsim/netdevsim1/dummy: snapshot 0
>$ devlink -jp region new netdevsim/netdevsim1/dummy
>{
>    "regions": {
>        "netdevsim/netdevsim1/dummy": {
>            "snapshot": [ 1 ]
>        }
>    }
>}
>$ devlink region show netdevsim/netdevsim1/dummy
>netdevsim/netdevsim1/dummy: size 32768 snapshot [0 1]
>
>v3: back to v1..
>
>Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Reviewed-by: Jiri Pirko <jiri@mellanox.com>
David Ahern May 5, 2020, 4:14 p.m. UTC | #2
On 4/30/20 11:57 AM, Jakub Kicinski wrote:
> Make ID argument optional and read the snapshot info
> that kernel sends us.
> 
> $ devlink region new netdevsim/netdevsim1/dummy
> netdevsim/netdevsim1/dummy: snapshot 0
> $ devlink -jp region new netdevsim/netdevsim1/dummy
> {
>     "regions": {
>         "netdevsim/netdevsim1/dummy": {
>             "snapshot": [ 1 ]
>         }
>     }
> }
> $ devlink region show netdevsim/netdevsim1/dummy
> netdevsim/netdevsim1/dummy: size 32768 snapshot [0 1]
> 
> v3: back to v1..
> 
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
>  devlink/devlink.c | 26 +++++++++++++++++++++++---
>  1 file changed, 23 insertions(+), 3 deletions(-)

this does not apply to current iproute2-next
Jakub Kicinski May 5, 2020, 4:20 p.m. UTC | #3
On Tue, 5 May 2020 10:14:24 -0600 David Ahern wrote:
> On 4/30/20 11:57 AM, Jakub Kicinski wrote:
> > Make ID argument optional and read the snapshot info
> > that kernel sends us.
> > 
> > $ devlink region new netdevsim/netdevsim1/dummy
> > netdevsim/netdevsim1/dummy: snapshot 0
> > $ devlink -jp region new netdevsim/netdevsim1/dummy
> > {
> >     "regions": {
> >         "netdevsim/netdevsim1/dummy": {
> >             "snapshot": [ 1 ]
> >         }
> >     }
> > }
> > $ devlink region show netdevsim/netdevsim1/dummy
> > netdevsim/netdevsim1/dummy: size 32768 snapshot [0 1]
> > 
> > v3: back to v1..
> > 
> > Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> > ---
> >  devlink/devlink.c | 26 +++++++++++++++++++++++---
> >  1 file changed, 23 insertions(+), 3 deletions(-)  
> 
> this does not apply to current iproute2-next

Hm. This was on top of Jake's patch, but Stephen took that one into
iproute2, since the kernel feature is in 5.7 already. What is the
protocol here? Can you merge iproute2 into iproute2-next? :S
David Ahern May 5, 2020, 4:59 p.m. UTC | #4
On 5/5/20 10:20 AM, Jakub Kicinski wrote:
> On Tue, 5 May 2020 10:14:24 -0600 David Ahern wrote:
>> On 4/30/20 11:57 AM, Jakub Kicinski wrote:
>>> Make ID argument optional and read the snapshot info
>>> that kernel sends us.
>>>
>>> $ devlink region new netdevsim/netdevsim1/dummy
>>> netdevsim/netdevsim1/dummy: snapshot 0
>>> $ devlink -jp region new netdevsim/netdevsim1/dummy
>>> {
>>>     "regions": {
>>>         "netdevsim/netdevsim1/dummy": {
>>>             "snapshot": [ 1 ]
>>>         }
>>>     }
>>> }
>>> $ devlink region show netdevsim/netdevsim1/dummy
>>> netdevsim/netdevsim1/dummy: size 32768 snapshot [0 1]
>>>
>>> v3: back to v1..
>>>
>>> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
>>> ---
>>>  devlink/devlink.c | 26 +++++++++++++++++++++++---
>>>  1 file changed, 23 insertions(+), 3 deletions(-)  
>>
>> this does not apply to current iproute2-next
> 
> Hm. This was on top of Jake's patch, but Stephen took that one into
> iproute2, since the kernel feature is in 5.7 already. What is the
> protocol here? Can you merge iproute2 into iproute2-next? :S
> 

merged and pushed. can you resend? I deleted it after it failed to apply
and now has vanished.
Jakub Kicinski May 5, 2020, 5:05 p.m. UTC | #5
On Tue, 5 May 2020 10:59:28 -0600 David Ahern wrote:
> merged and pushed. can you resend? I deleted it after it failed to apply
> and now has vanished.

Thanks! Resent now
Jakub Kicinski May 5, 2020, 5:06 p.m. UTC | #6
On Tue, 5 May 2020 10:05:36 -0700 Jakub Kicinski wrote:
> On Tue, 5 May 2020 10:59:28 -0600 David Ahern wrote:
> > merged and pushed. can you resend? I deleted it after it failed to apply
> > and now has vanished.  
> 
> Thanks! Resent now

Ah damn, I didn't add Jiri's review tag, should I resent again?
diff mbox series

Patch

diff --git a/devlink/devlink.c b/devlink/devlink.c
index bd48a73bc0e4..507972c360a7 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -6476,6 +6476,23 @@  static int cmd_region_read(struct dl *dl)
 	return err;
 }
 
+static int cmd_region_snapshot_new_cb(const struct nlmsghdr *nlh, void *data)
+{
+	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
+	struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
+	struct dl *dl = data;
+
+	mnl_attr_parse(nlh, sizeof(*genl), attr_cb, tb);
+	if (!tb[DEVLINK_ATTR_BUS_NAME] || !tb[DEVLINK_ATTR_DEV_NAME] ||
+	    !tb[DEVLINK_ATTR_REGION_NAME] ||
+	    !tb[DEVLINK_ATTR_REGION_SNAPSHOT_ID])
+		return MNL_CB_ERROR;
+
+	pr_out_region(dl, tb);
+
+	return MNL_CB_OK;
+}
+
 static int cmd_region_snapshot_new(struct dl *dl)
 {
 	struct nlmsghdr *nlh;
@@ -6484,12 +6501,15 @@  static int cmd_region_snapshot_new(struct dl *dl)
 	nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_REGION_NEW,
 			       NLM_F_REQUEST | NLM_F_ACK);
 
-	err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION |
-				DL_OPT_REGION_SNAPSHOT_ID, 0);
+	err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION,
+				DL_OPT_REGION_SNAPSHOT_ID);
 	if (err)
 		return err;
 
-	return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+	pr_out_section_start(dl, "regions");
+	err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_region_snapshot_new_cb, dl);
+	pr_out_section_end(dl);
+	return err;
 }
 
 static void cmd_region_help(void)