static int
 devlink_nl_rate_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
-                            struct netlink_callback *cb)
+                            struct netlink_callback *cb, int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_rate *devlink_rate;
                        continue;
                }
                err = devlink_nl_rate_fill(msg, devlink_rate, cmd, id,
-                                          cb->nlh->nlmsg_seq,
-                                          NLM_F_MULTI, NULL);
+                                          cb->nlh->nlmsg_seq, flags, NULL);
                if (err) {
                        state->idx = idx;
                        break;
 
 static int
 devlink_nl_port_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
-                            struct netlink_callback *cb)
+                            struct netlink_callback *cb, int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_port *devlink_port;
                err = devlink_nl_port_fill(msg, devlink_port,
                                           DEVLINK_CMD_NEW,
                                           NETLINK_CB(cb->skb).portid,
-                                          cb->nlh->nlmsg_seq,
-                                          NLM_F_MULTI, cb->extack);
+                                          cb->nlh->nlmsg_seq, flags,
+                                          cb->extack);
                if (err) {
                        state->idx = port_index;
                        break;
 
 static int devlink_nl_linecard_get_dump_one(struct sk_buff *msg,
                                            struct devlink *devlink,
-                                           struct netlink_callback *cb)
+                                           struct netlink_callback *cb,
+                                           int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_linecard *linecard;
                err = devlink_nl_linecard_fill(msg, devlink, linecard,
                                               DEVLINK_CMD_LINECARD_NEW,
                                               NETLINK_CB(cb->skb).portid,
-                                              cb->nlh->nlmsg_seq,
-                                              NLM_F_MULTI,
+                                              cb->nlh->nlmsg_seq, flags,
                                               cb->extack);
                mutex_unlock(&linecard->state_lock);
                if (err) {
 
 static int
 devlink_nl_sb_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
-                          struct netlink_callback *cb)
+                          struct netlink_callback *cb, int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_sb *devlink_sb;
                err = devlink_nl_sb_fill(msg, devlink, devlink_sb,
                                         DEVLINK_CMD_SB_NEW,
                                         NETLINK_CB(cb->skb).portid,
-                                        cb->nlh->nlmsg_seq,
-                                        NLM_F_MULTI);
+                                        cb->nlh->nlmsg_seq, flags);
                if (err) {
                        state->idx = idx;
                        break;
 static int __sb_pool_get_dumpit(struct sk_buff *msg, int start, int *p_idx,
                                struct devlink *devlink,
                                struct devlink_sb *devlink_sb,
-                               u32 portid, u32 seq)
+                               u32 portid, u32 seq, int flags)
 {
        u16 pool_count = devlink_sb_pool_count(devlink_sb);
        u16 pool_index;
                                              devlink_sb,
                                              pool_index,
                                              DEVLINK_CMD_SB_POOL_NEW,
-                                             portid, seq, NLM_F_MULTI);
+                                             portid, seq, flags);
                if (err)
                        return err;
                (*p_idx)++;
 
 static int
 devlink_nl_sb_pool_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
-                               struct netlink_callback *cb)
+                               struct netlink_callback *cb, int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_sb *devlink_sb;
                err = __sb_pool_get_dumpit(msg, state->idx, &idx,
                                           devlink, devlink_sb,
                                           NETLINK_CB(cb->skb).portid,
-                                          cb->nlh->nlmsg_seq);
+                                          cb->nlh->nlmsg_seq, flags);
                if (err == -EOPNOTSUPP) {
                        err = 0;
                } else if (err) {
 static int __sb_port_pool_get_dumpit(struct sk_buff *msg, int start, int *p_idx,
                                     struct devlink *devlink,
                                     struct devlink_sb *devlink_sb,
-                                    u32 portid, u32 seq)
+                                    u32 portid, u32 seq, int flags)
 {
        struct devlink_port *devlink_port;
        u16 pool_count = devlink_sb_pool_count(devlink_sb);
                                                           devlink_sb,
                                                           pool_index,
                                                           DEVLINK_CMD_SB_PORT_POOL_NEW,
-                                                          portid, seq,
-                                                          NLM_F_MULTI);
+                                                          portid, seq, flags);
                        if (err)
                                return err;
                        (*p_idx)++;
 static int
 devlink_nl_sb_port_pool_get_dump_one(struct sk_buff *msg,
                                     struct devlink *devlink,
-                                    struct netlink_callback *cb)
+                                    struct netlink_callback *cb, int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_sb *devlink_sb;
                err = __sb_port_pool_get_dumpit(msg, state->idx, &idx,
                                                devlink, devlink_sb,
                                                NETLINK_CB(cb->skb).portid,
-                                               cb->nlh->nlmsg_seq);
+                                               cb->nlh->nlmsg_seq, flags);
                if (err == -EOPNOTSUPP) {
                        err = 0;
                } else if (err) {
                                        int start, int *p_idx,
                                        struct devlink *devlink,
                                        struct devlink_sb *devlink_sb,
-                                       u32 portid, u32 seq)
+                                       u32 portid, u32 seq, int flags)
 {
        struct devlink_port *devlink_port;
        unsigned long port_index;
                                                              DEVLINK_SB_POOL_TYPE_INGRESS,
                                                              DEVLINK_CMD_SB_TC_POOL_BIND_NEW,
                                                              portid, seq,
-                                                             NLM_F_MULTI);
+                                                             flags);
                        if (err)
                                return err;
                        (*p_idx)++;
                                                              DEVLINK_SB_POOL_TYPE_EGRESS,
                                                              DEVLINK_CMD_SB_TC_POOL_BIND_NEW,
                                                              portid, seq,
-                                                             NLM_F_MULTI);
+                                                             flags);
                        if (err)
                                return err;
                        (*p_idx)++;
 
 static int devlink_nl_sb_tc_pool_bind_get_dump_one(struct sk_buff *msg,
                                                   struct devlink *devlink,
-                                                  struct netlink_callback *cb)
+                                                  struct netlink_callback *cb,
+                                                  int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_sb *devlink_sb;
                err = __sb_tc_pool_bind_get_dumpit(msg, state->idx, &idx,
                                                   devlink, devlink_sb,
                                                   NETLINK_CB(cb->skb).portid,
-                                                  cb->nlh->nlmsg_seq);
+                                                  cb->nlh->nlmsg_seq, flags);
                if (err == -EOPNOTSUPP) {
                        err = 0;
                } else if (err) {
 
 static int devlink_nl_param_get_dump_one(struct sk_buff *msg,
                                         struct devlink *devlink,
-                                        struct netlink_callback *cb)
+                                        struct netlink_callback *cb,
+                                        int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_param_item *param_item;
                err = devlink_nl_param_fill(msg, devlink, 0, param_item,
                                            DEVLINK_CMD_PARAM_GET,
                                            NETLINK_CB(cb->skb).portid,
-                                           cb->nlh->nlmsg_seq,
-                                           NLM_F_MULTI);
+                                           cb->nlh->nlmsg_seq, flags);
                if (err == -EOPNOTSUPP) {
                        err = 0;
                } else if (err) {
 static int devlink_nl_cmd_region_get_port_dumpit(struct sk_buff *msg,
                                                 struct netlink_callback *cb,
                                                 struct devlink_port *port,
-                                                int *idx,
-                                                int start)
+                                                int *idx, int start, int flags)
 {
        struct devlink_region *region;
        int err = 0;
                                             DEVLINK_CMD_REGION_GET,
                                             NETLINK_CB(cb->skb).portid,
                                             cb->nlh->nlmsg_seq,
-                                            NLM_F_MULTI, region);
+                                            flags, region);
                if (err)
                        goto out;
                (*idx)++;
 
 static int devlink_nl_region_get_dump_one(struct sk_buff *msg,
                                          struct devlink *devlink,
-                                         struct netlink_callback *cb)
+                                         struct netlink_callback *cb,
+                                         int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_region *region;
                err = devlink_nl_region_fill(msg, devlink,
                                             DEVLINK_CMD_REGION_GET,
                                             NETLINK_CB(cb->skb).portid,
-                                            cb->nlh->nlmsg_seq,
-                                            NLM_F_MULTI, region);
+                                            cb->nlh->nlmsg_seq, flags,
+                                            region);
                if (err) {
                        state->idx = idx;
                        return err;
 
        xa_for_each(&devlink->ports, port_index, port) {
                err = devlink_nl_cmd_region_get_port_dumpit(msg, cb, port, &idx,
-                                                           state->idx);
+                                                           state->idx, flags);
                if (err) {
                        state->idx = idx;
                        return err;
 
 static int devlink_nl_trap_get_dump_one(struct sk_buff *msg,
                                        struct devlink *devlink,
-                                       struct netlink_callback *cb)
+                                       struct netlink_callback *cb, int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_trap_item *trap_item;
                err = devlink_nl_trap_fill(msg, devlink, trap_item,
                                           DEVLINK_CMD_TRAP_NEW,
                                           NETLINK_CB(cb->skb).portid,
-                                          cb->nlh->nlmsg_seq,
-                                          NLM_F_MULTI);
+                                          cb->nlh->nlmsg_seq, flags);
                if (err) {
                        state->idx = idx;
                        break;
 
 static int devlink_nl_trap_group_get_dump_one(struct sk_buff *msg,
                                              struct devlink *devlink,
-                                             struct netlink_callback *cb)
+                                             struct netlink_callback *cb,
+                                             int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_trap_group_item *group_item;
                err = devlink_nl_trap_group_fill(msg, devlink, group_item,
                                                 DEVLINK_CMD_TRAP_GROUP_NEW,
                                                 NETLINK_CB(cb->skb).portid,
-                                                cb->nlh->nlmsg_seq,
-                                                NLM_F_MULTI);
+                                                cb->nlh->nlmsg_seq, flags);
                if (err) {
                        state->idx = idx;
                        break;
 
 static int devlink_nl_trap_policer_get_dump_one(struct sk_buff *msg,
                                                struct devlink *devlink,
-                                               struct netlink_callback *cb)
+                                               struct netlink_callback *cb,
+                                               int flags)
 {
        struct devlink_nl_dump_state *state = devlink_dump_state(cb);
        struct devlink_trap_policer_item *policer_item;
                err = devlink_nl_trap_policer_fill(msg, devlink, policer_item,
                                                   DEVLINK_CMD_TRAP_POLICER_NEW,
                                                   NETLINK_CB(cb->skb).portid,
-                                                  cb->nlh->nlmsg_seq,
-                                                  NLM_F_MULTI);
+                                                  cb->nlh->nlmsg_seq, flags);
                if (err) {
                        state->idx = idx;
                        break;