Message ID | 06a2302a1dc575a0829a5b789bb7a412adb2ce95.1553627811.git.larrystevenwise@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Dynamic rdma link creation | expand |
On 3/26/19 1:18 PM, Steve Wise wrote: > This function sends the constructed netlink message and then > receives the response. > > Change rd_recv_msg() to display any error messages. > > Change 'rdma dev set' to use rd_sendrecv_msg(). > > Signed-off-by: Steve Wise <larrystevenwise@gmail.com> > --- > rdma/dev.c | 2 +- > rdma/rdma.h | 2 ++ > rdma/res.h | 1 + > rdma/utils.c | 18 ++++++++++++++++++ > 4 files changed, 22 insertions(+), 1 deletion(-) > > diff --git a/rdma/dev.c b/rdma/dev.c > index 954e0015..33962520 100644 > --- a/rdma/dev.c > +++ b/rdma/dev.c > @@ -268,7 +268,7 @@ static int dev_set_name(struct rd *rd) > mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_DEV_INDEX, rd->dev_idx); > mnl_attr_put_strz(rd->nlh, RDMA_NLDEV_ATTR_DEV_NAME, rd_argv(rd)); > > - return rd_send_msg(rd); > + return rd_sendrecv_msg(rd, seq); > } > > static int dev_one_set(struct rd *rd) > diff --git a/rdma/rdma.h b/rdma/rdma.h > index 1022e9a2..6c7f7d15 100644 > --- a/rdma/rdma.h > +++ b/rdma/rdma.h > @@ -68,6 +68,7 @@ struct rd { > json_writer_t *jw; > bool json_output; > bool pretty_output; > + bool suppress_errors; > struct list_head filter_list; > }; > All of the suppress_errors seems like an unrelated change.
On Tue, Mar 26, 2019 at 02:18:28PM -0500, Steve Wise wrote: > This function sends the constructed netlink message and then > receives the response. > > Change rd_recv_msg() to display any error messages. > > Change 'rdma dev set' to use rd_sendrecv_msg(). > > Signed-off-by: Steve Wise <larrystevenwise@gmail.com> > --- > rdma/dev.c | 2 +- > rdma/rdma.h | 2 ++ > rdma/res.h | 1 + > rdma/utils.c | 18 ++++++++++++++++++ > 4 files changed, 22 insertions(+), 1 deletion(-) > Thanks, Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
On Sun, Mar 31, 2019 at 9:06 PM David Ahern <dsahern@gmail.com> wrote: > > On 3/26/19 1:18 PM, Steve Wise wrote: > > This function sends the constructed netlink message and then > > receives the response. > > > > Change rd_recv_msg() to display any error messages. > > > > Change 'rdma dev set' to use rd_sendrecv_msg(). > > > > Signed-off-by: Steve Wise <larrystevenwise@gmail.com> > > --- > > rdma/dev.c | 2 +- > > rdma/rdma.h | 2 ++ > > rdma/res.h | 1 + > > rdma/utils.c | 18 ++++++++++++++++++ > > 4 files changed, 22 insertions(+), 1 deletion(-) > > > > diff --git a/rdma/dev.c b/rdma/dev.c > > index 954e0015..33962520 100644 > > --- a/rdma/dev.c > > +++ b/rdma/dev.c > > @@ -268,7 +268,7 @@ static int dev_set_name(struct rd *rd) > > mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_DEV_INDEX, rd->dev_idx); > > mnl_attr_put_strz(rd->nlh, RDMA_NLDEV_ATTR_DEV_NAME, rd_argv(rd)); > > > > - return rd_send_msg(rd); > > + return rd_sendrecv_msg(rd, seq); > > } > > > > static int dev_one_set(struct rd *rd) > > diff --git a/rdma/rdma.h b/rdma/rdma.h > > index 1022e9a2..6c7f7d15 100644 > > --- a/rdma/rdma.h > > +++ b/rdma/rdma.h > > @@ -68,6 +68,7 @@ struct rd { > > json_writer_t *jw; > > bool json_output; > > bool pretty_output; > > + bool suppress_errors; > > struct list_head filter_list; > > }; > > > > All of the suppress_errors seems like an unrelated change. > Hey David, I just realized I replied only to you directly, so I'll reply again to everyone. It is a bug fix that showed itself when I moved the error check to rd_recv_msg(), which Leon recommended in the last review cycle. The bug doesn't manifest unless this series is applied, so the suppress errors fix is really only needed as part of this series. Thanks, Steve.
diff --git a/rdma/dev.c b/rdma/dev.c index 954e0015..33962520 100644 --- a/rdma/dev.c +++ b/rdma/dev.c @@ -268,7 +268,7 @@ static int dev_set_name(struct rd *rd) mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_DEV_INDEX, rd->dev_idx); mnl_attr_put_strz(rd->nlh, RDMA_NLDEV_ATTR_DEV_NAME, rd_argv(rd)); - return rd_send_msg(rd); + return rd_sendrecv_msg(rd, seq); } static int dev_one_set(struct rd *rd) diff --git a/rdma/rdma.h b/rdma/rdma.h index 1022e9a2..6c7f7d15 100644 --- a/rdma/rdma.h +++ b/rdma/rdma.h @@ -68,6 +68,7 @@ struct rd { json_writer_t *jw; bool json_output; bool pretty_output; + bool suppress_errors; struct list_head filter_list; }; @@ -119,6 +120,7 @@ bool rd_is_string_filtered_attr(struct rd *rd, const char *key, const char *val, */ int rd_send_msg(struct rd *rd); int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, uint32_t seq); +int rd_sendrecv_msg(struct rd *rd, unsigned int seq); void rd_prepare_msg(struct rd *rd, uint32_t cmd, uint32_t *seq, uint16_t flags); int rd_dev_init_cb(const struct nlmsghdr *nlh, void *data); int rd_attr_cb(const struct nlattr *attr, void *data); diff --git a/rdma/res.h b/rdma/res.h index b4a7e552..525171fc 100644 --- a/rdma/res.h +++ b/rdma/res.h @@ -31,6 +31,7 @@ int res_qp_idx_parse_cb(const struct nlmsghdr *nlh, void *data); if (id) { \ ret = rd_doit_index(rd, &idx); \ if (ret) { \ + rd->suppress_errors = true; \ ret = _res_send_idx_msg(rd, command, \ name##_idx_parse_cb, \ idx, id); \ diff --git a/rdma/utils.c b/rdma/utils.c index 1f6bf330..11ed8a73 100644 --- a/rdma/utils.c +++ b/rdma/utils.c @@ -693,10 +693,28 @@ int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, unsigned int seq) ret = mnl_cb_run(buf, ret, seq, portid, callback, data); } while (ret > 0); + if (ret < 0 && !rd->suppress_errors) + perror("error"); + mnl_socket_close(rd->nl); return ret; } +static int null_cb(const struct nlmsghdr *nlh, void *data) +{ + return MNL_CB_OK; +} + +int rd_sendrecv_msg(struct rd *rd, unsigned int seq) +{ + int ret; + + ret = rd_send_msg(rd); + if (!ret) + ret = rd_recv_msg(rd, null_cb, rd, seq); + return ret; +} + static struct dev_map *_dev_map_lookup(struct rd *rd, const char *dev_name) { struct dev_map *dev_map;
This function sends the constructed netlink message and then receives the response. Change rd_recv_msg() to display any error messages. Change 'rdma dev set' to use rd_sendrecv_msg(). Signed-off-by: Steve Wise <larrystevenwise@gmail.com> --- rdma/dev.c | 2 +- rdma/rdma.h | 2 ++ rdma/res.h | 1 + rdma/utils.c | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-)