2011-02-07 11:05:10

by Felix Fietkau

[permalink] [raw]
Subject: [PATCH 2.6.38] mac80211: fix the skb cloned check in the tx path

Using skb_header_cloned to check if it's safe to write to the skb is not
enough - mac80211 also touches the tailroom of the skb.
Initially this check was only used to increase a counter, however this
commit changed the code to also skip skb data reallocation if no extra
head/tailroom was needed:

commit 4cd06a344db752f513437138953af191cbe9a691
mac80211: skip unnecessary pskb_expand_head calls

It added a regression at least with iwl3945, which is fixed by this patch.

Reported-by: Dmitry Torokhov <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
---
net/mac80211/tx.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 2915168..fc1d728 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1549,7 +1549,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local,
skb_orphan(skb);
}

- if (skb_header_cloned(skb))
+ if (skb_cloned(skb))
I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
else if (head_need || tail_need)
I802_DEBUG_INC(local->tx_expand_skb_head);
--
1.7.3.2



2011-02-07 17:07:57

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: [PATCH 2.6.38] mac80211: fix the skb cloned check in the tx path

On Mon, Feb 07, 2011 at 12:05:00PM +0100, Felix Fietkau wrote:
> Using skb_header_cloned to check if it's safe to write to the skb is not
> enough - mac80211 also touches the tailroom of the skb.
> Initially this check was only used to increase a counter, however this
> commit changed the code to also skip skb data reallocation if no extra
> head/tailroom was needed:
>
> commit 4cd06a344db752f513437138953af191cbe9a691
> mac80211: skip unnecessary pskb_expand_head calls
>
> It added a regression at least with iwl3945, which is fixed by this patch.
>
> Reported-by: Dmitry Torokhov <[email protected]>

Make it

Tested-by: Dmitry Torokhov <[email protected]>

as well since it cures my issue with sshfs getting stuck under load.

Would be nice if the patch made it in .38.

Thanks!


> Signed-off-by: Felix Fietkau <[email protected]>
> ---
> net/mac80211/tx.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 2915168..fc1d728 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -1549,7 +1549,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local,
> skb_orphan(skb);
> }
>
> - if (skb_header_cloned(skb))
> + if (skb_cloned(skb))
> I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
> else if (head_need || tail_need)
> I802_DEBUG_INC(local->tx_expand_skb_head);
> --
> 1.7.3.2
>

--
Dmitry