From: "Boyer, Andrew" <Andrew.Boyer-8PEkshWhKlo@public.gmane.org>
To: Yuval Shaia <yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Cc: "monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org"
<monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
"yonatanc-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org"
<yonatanc-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send()
Date: Mon, 28 Aug 2017 13:05:09 +0000 [thread overview]
Message-ID: <D5C98CC4.1DF95%Andrew.Boyer@emc.com> (raw)
In-Reply-To: <20170827120128.GB10450@yuvallap>
On 8/27/17, 8:01 AM, "linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org on behalf of Yuval
Shaia" <linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org on behalf of
yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
>On Fri, Aug 25, 2017 at 03:05:46PM -0400, Andrew Boyer wrote:
>> The network stack will call nskb's destructor, rxe_skb_tx_dtor(), if the
>> packet gets dropped by ip_local_out()/ip6_local_out(). Thus we need to
>>add
>> the QP ref before output to avoid extra dereferences during network
>> congestion. This could lead to unwanted destruction of the QP.
>>
>> Fix up the skb_out accounting, too.
>>
>> Fixes: fda85ce91240 ("IB/rxe: Fix kernel panic from skb destructor")
>> Signed-off-by: Andrew Boyer <andrew.boyer-8PEkshWhKlo@public.gmane.org>
>> Acked-by: Moni Shoua <monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>> ---
>> drivers/infiniband/sw/rxe/rxe_net.c | 8 +++++---
>> 1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
>>b/drivers/infiniband/sw/rxe/rxe_net.c
>> index 08f3f90..0810f38 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_net.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_net.c
>> @@ -460,12 +460,17 @@ int rxe_send(struct rxe_dev *rxe, struct
>>rxe_pkt_info *pkt, struct sk_buff *skb)
>> nskb->destructor = rxe_skb_tx_dtor;
>> nskb->sk = pkt->qp->sk->sk;
>>
>> + rxe_add_ref(pkt->qp);
>> + atomic_inc(&pkt->qp->skb_out);
>> +
>> if (av->network_type == RDMA_NETWORK_IPV4) {
>> err = ip_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
>> } else if (av->network_type == RDMA_NETWORK_IPV6) {
>> err = ip6_local_out(dev_net(skb_dst(skb)->dev), nskb->sk, nskb);
>> } else {
>> pr_err("Unknown layer 3 protocol: %d\n", av->network_type);
>> + atomic_dec(&pkt->qp->skb_out);
>> + rxe_drop_ref(pkt->qp);
>> kfree_skb(nskb);
>> return -EINVAL;
>> }
>> @@ -475,10 +480,7 @@ int rxe_send(struct rxe_dev *rxe, struct
>>rxe_pkt_info *pkt, struct sk_buff *skb)
>> return -EAGAIN;
>> }
>
>Shouldn't we also dec and drop ref in case that net_xmit_eval returns
>error?
That¹s the catch. net_xmit_eval() is just looking for error codes; it¹s
not doing the actual transmit. The transmit already started back in
ip_local_out()/ip6_local_out(), and if those end up failing the destructor
will be called. Any cleanup we do in this error path would be duplicated
in the destructor.
-Andrew
>
>>
>> - rxe_add_ref(pkt->qp);
>> - atomic_inc(&pkt->qp->skb_out);
>> kfree_skb(skb);
>> -
>> return 0;
>> }
>>
>> --
>> 1.8.3.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>--
>To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-08-28 13:05 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-25 13:39 [PATCH 0/7] IB/rxe: Bug fixes Andrew Boyer
[not found] ` <1500989968-30889-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 13:39 ` [PATCH 1/7] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
[not found] ` <1500989968-30889-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 8:57 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 2/7] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
[not found] ` <1500989968-30889-3-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 9:35 ` Moni Shoua
[not found] ` <CAG9sBKOet0xv9YaJAc58erVrnTGwzMd630goDgrxUEx4PhXK+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-27 13:19 ` Boyer, Andrew
2017-07-25 13:39 ` [PATCH 3/7] IB/rxe: Remove dangling prototype Andrew Boyer
[not found] ` <1500989968-30889-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 9:36 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 4/7] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
[not found] ` <1500989968-30889-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 10:54 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 5/7] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
[not found] ` <1500989968-30889-6-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 6:41 ` kbuild test robot
[not found] ` <201707271425.T94Zam4o%fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-27 13:24 ` Boyer, Andrew
2017-07-27 12:07 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 6/7] IB/rxe: Fix up one more receive queue drain path that might prevent cleanup Andrew Boyer
[not found] ` <1500989968-30889-7-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-27 12:13 ` Moni Shoua
2017-07-25 13:39 ` [PATCH 7/7] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
[not found] ` <1500989968-30889-8-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-07-25 17:34 ` Or Gerlitz
[not found] ` <CAJ3xEMi7qiygVwngd-1q0x7xOf=whGb667t0RQpZ0uRbchw=oA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-25 18:00 ` Boyer, Andrew
[not found] ` <D59CFD43.1B523%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-07-27 13:25 ` Moni Shoua
2017-07-27 13:27 ` [PATCH 0/7] IB/rxe: Bug fixes Moni Shoua
2017-08-25 19:05 ` [PATCH v1 00/11] " Andrew Boyer
[not found] ` <1503687956-7110-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-25 19:05 ` [PATCH v1 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
[not found] ` <1503687956-7110-2-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:01 ` Yuval Shaia
2017-08-28 13:05 ` Boyer, Andrew [this message]
2017-08-25 19:05 ` [PATCH v1 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
[not found] ` <1503687956-7110-4-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:03 ` Yuval Shaia
2017-08-25 19:05 ` [PATCH v1 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
[not found] ` <1503687956-7110-5-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:14 ` Yuval Shaia
2017-08-25 19:05 ` [PATCH v1 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
[not found] ` <1503687956-7110-9-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 12:20 ` Yuval Shaia
2017-08-25 19:05 ` [PATCH v1 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
2017-08-25 19:05 ` [PATCH v1 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
[not found] ` <1503687956-7110-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-27 10:30 ` Yuval Shaia
2017-08-28 12:38 ` Boyer, Andrew
[not found] ` <D5C986D7.1DF85%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-08-28 13:37 ` Doug Ledford
[not found] ` <e426219f-a558-209b-350c-bd71c39e52eb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-28 13:47 ` Boyer, Andrew
[not found] ` <D5C996DB.1DFB5%Andrew.Boyer-mb1K0bWo544@public.gmane.org>
2017-08-28 14:13 ` Doug Ledford
2017-08-28 13:50 ` Yuval Shaia
2017-08-27 23:00 ` kbuild test robot
2017-08-27 12:33 ` [PATCH v1 00/11] IB/rxe: Bug fixes Yuval Shaia
2017-08-28 20:11 ` [PATCH v2 " Andrew Boyer
[not found] ` <1503951119-25573-1-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-28 20:11 ` [PATCH v2 01/11] IB/rxe: Move refcounting earlier in rxe_send() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 02/11] IB/rxe: Disable completion upcalls when a CQ is destroyed Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 03/11] IB/rxe: Remove dangling prototype Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 04/11] IB/rxe: Fix up the responder's find_resources() function Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 05/11] IB/rxe: Fix destination cache for IPv6 Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 06/11] IB/rxe: Add dst_clone() in prepare_ipv6_hdr() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 07/11] IB/rxe: Fix up rxe_qp_cleanup() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 08/11] IB/rxe: Remove unneeded initialization in prepare6() Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 09/11] IB/rxe: Another fix for broken receive queue draining Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 10/11] IB/rxe: Avoid ICRC errors by copying into the skb first Andrew Boyer
2017-08-28 20:11 ` [PATCH v2 11/11] IB/rxe: Handle NETDEV_CHANGE events Andrew Boyer
[not found] ` <1503951119-25573-12-git-send-email-andrew.boyer-8PEkshWhKlo@public.gmane.org>
2017-08-29 7:53 ` Yuval Shaia
2017-08-28 23:32 ` [PATCH v2 00/11] IB/rxe: Bug fixes Doug Ledford
2017-08-29 7:54 ` Yuval Shaia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D5C98CC4.1DF95%Andrew.Boyer@emc.com \
--to=andrew.boyer-8pekshwhklo@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=monis-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=yonatanc-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=yuval.shaia-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox