“2825982d9d66ebba4b532a07391dfbb357f71c5f”上不存在“README.md”
提交 b9109b7d 编写于 作者: A Andrew Boyer 提交者: Doug Ledford

IB/rxe: Fix destination cache for IPv6

To successfully match an IPv6 path, the path cookie must match. Store it
in the QP so that the IPv6 path can be reused.

Replace open-coded version of dst_check() with the actual call, fixing the
logic. The open-coded version skips the check call if dst->obsolete is 0
(DST_OBSOLETE_NONE), proceeding to replace the route. DST_OBSOLETE_NONE
means that the route may continue to be used, though.

Fixes: 4ed6ad1e ("IB/rxe: Cache dst in QP instead of getting it...")
Signed-off-by: NAndrew Boyer <andrew.boyer@dell.com>
Signed-off-by: NDoug Ledford <dledford@redhat.com>
上级 d45d2956
无相关合并请求
......@@ -191,7 +191,7 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
if (qp_type(qp) == IB_QPT_RC)
dst = sk_dst_get(qp->sk->sk);
if (!dst || !(dst->obsolete && dst->ops->check(dst, 0))) {
if (!dst || !dst_check(dst, qp->dst_cookie)) {
if (dst)
dst_release(dst);
......@@ -209,6 +209,11 @@ static struct dst_entry *rxe_find_route(struct rxe_dev *rxe,
saddr6 = &av->sgid_addr._sockaddr_in6.sin6_addr;
daddr6 = &av->dgid_addr._sockaddr_in6.sin6_addr;
dst = rxe_find_route6(rxe->ndev, saddr6, daddr6);
#if IS_ENABLED(CONFIG_IPV6)
if (dst)
qp->dst_cookie =
rt6_get_cookie((struct rt6_info *)dst);
#endif
}
}
......
......@@ -248,6 +248,7 @@ struct rxe_qp {
struct rxe_rq rq;
struct socket *sk;
u32 dst_cookie;
struct rxe_av pri_av;
struct rxe_av alt_av;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册