CRIU needs OVS_DP_ATTR_PER_CPU_PIDS to checkpoint/restore newest
openvswitch versions.
Add pids to generic datapath reply. Limit exported pids amount to
nr_cpu_ids.

Signed-off-by: Andrey Zhadchenko <andrey.zhadche...@virtuozzo.com>
Acked-by: Christian Brauner (Microsoft) <brau...@kernel.org>
Signed-off-by: Jakub Kicinski <k...@kernel.org>

(cherry picked from ms commit 347541e299d50c154f69ead0fcac2917a63e4481)
Signed-off-by: Andrey Zhadchenko <andrey.zhadche...@virtuozzo.com>
---
 net/openvswitch/datapath.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index be2686a7b93f..2855dcdf6ef1 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1515,6 +1515,7 @@ static size_t ovs_dp_cmd_msg_size(void)
        msgsize += nla_total_size_64bit(sizeof(struct ovs_dp_megaflow_stats));
        msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_USER_FEATURES */
        msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_MASKS_CACHE_SIZE 
*/
+       msgsize += nla_total_size(sizeof(u32) * nr_cpu_ids); /* 
OVS_DP_ATTR_PER_CPU_PIDS */
 
        return msgsize;
 }
@@ -1526,7 +1527,8 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, 
struct sk_buff *skb,
        struct ovs_header *ovs_header;
        struct ovs_dp_stats dp_stats;
        struct ovs_dp_megaflow_stats dp_megaflow_stats;
-       int err;
+       struct dp_nlsk_pids *pids = ovsl_dereference(dp->upcall_portids);
+       int err, pids_len;
 
        ovs_header = genlmsg_put(skb, portid, seq, &dp_datapath_genl_family,
                                 flags, cmd);
@@ -1556,6 +1558,12 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, 
struct sk_buff *skb,
                        ovs_flow_tbl_masks_cache_size(&dp->table)))
                goto nla_put_failure;
 
+       if (dp->user_features & OVS_DP_F_DISPATCH_UPCALL_PER_CPU && pids) {
+               pids_len = min(pids->n_pids, nr_cpu_ids) * sizeof(u32);
+               if (nla_put(skb, OVS_DP_ATTR_PER_CPU_PIDS, pids_len, 
&pids->pids))
+                       goto nla_put_failure;
+       }
+
        genlmsg_end(skb, ovs_header);
        return 0;
 
-- 
2.31.1

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to