diff options
author | Rémi Denis-Courmont <remi.denis-courmont@nokia.com> | 2010-09-29 22:33:50 +0000 |
---|---|---|
committer | Jonas ABERG <jonas.aberg@stericsson.com> | 2011-01-24 10:48:11 +0100 |
commit | 8f79243d6902e276824096d09095a8499ad45059 (patch) | |
tree | 7c99562041c9efe880039efa333b92733f52cbc3 /net | |
parent | 7ddfc1278f43266b5a485d53c183e3b67c791921 (diff) |
Phonet: restore flow control credits when sending fails
This patch restores the below flow control patch submitted by Rémi
Denis-Courmont, which accidentaly got lost due to Pipe controller patch
on Phonet.
commit 1a98214feef2221cd7c24b17cd688a5a9d85b2ea
Author: Rémi Denis-Courmont <remi.denis-courmont@nokia.com>
Date: Mon Aug 30 12:57:03 2010 +0000
Phonet: restore flow control credits when sending fails
Signed-off-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kumar Sanghvi <kumar.sanghvi@stericsson.com>
Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Change-Id: If6a5e9749962a74a945bcc39dc325dd861792b50
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/13159
Reviewed-by: QATOOLS
Reviewed-by: B Sampath KUMAR <sampath.kumar@stericsson.com>
Tested-by: B Sampath KUMAR <sampath.kumar@stericsson.com>
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/phonet/pep.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/phonet/pep.c b/net/phonet/pep.c index 7c65631682b..b4b990e84ec 100644 --- a/net/phonet/pep.c +++ b/net/phonet/pep.c @@ -1289,6 +1289,7 @@ static int pipe_skb_send(struct sock *sk, struct sk_buff *skb) { struct pep_sock *pn = pep_sk(sk); struct pnpipehdr *ph; + int err; #ifdef CONFIG_PHONET_PIPECTRLR struct sockaddr_pn spn = { @@ -1317,10 +1318,15 @@ static int pipe_skb_send(struct sock *sk, struct sk_buff *skb) ph->pipe_handle = pn->pipe_handle; #ifdef CONFIG_PHONET_PIPECTRLR - return pn_skb_send(sk, skb, &spn); + err = pn_skb_send(sk, skb, &spn); #else - return pn_skb_send(sk, skb, &pipe_srv); + err = pn_skb_send(sk, skb, &pipe_srv); #endif + + if (err && pn_flow_safe(pn->tx_fc)) + atomic_inc(&pn->tx_credits); + return err; + } static int pep_sendmsg(struct kiocb *iocb, struct sock *sk, |