[From nobody Thu Jun 25 05:54:42 2020
Received: from mail-ve1eur01on0054.outbound.protection.outlook.com
 ([104.47.1.54] helo=EUR01-VE1-obe.outbound.protection.outlook.com)
 by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux))
 id 1fU6gh-00027I-41
 for openwrt-devel@lists.openwrt.org; Sat, 16 Jun 2018 08:36:01 +0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=darbyshire-bryant.me.uk; s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Qm2ZzGgH26/q1Azv9u/NtHcHXsnjF0bNecE4b8gN0Xc=;
 b=KSXIUEkk2+5jt+jNKp4yXzVkccwAqgLlitApkgkzMfi6Sa7qlNxMZOjNbV0DDtxozdCvi+1jIwGeORwr//C4n4OwcsHSnMlGsXg7ba8E+M+C9WSSP1P696iTQkPsiKOtv/uJgC+JCIvGK/UyqPUMxJAZyvhGQ47lFUTfLO9uQaE=
Received: from localhost.localdomain (167.98.58.244) by
 AM0PR07MB4242.eurprd07.prod.outlook.com (2603:10a6:208:b8::26) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.863.6; Sat, 16 Jun 2018 08:35:51 +0000
From: Kevin Darbyshire-Bryant &lt;ldir@darbyshire-bryant.me.uk&gt;
To: openwrt-devel@lists.openwrt.org
Cc: Kevin Darbyshire-Bryant &lt;ldir@darbyshire-bryant.me.uk&gt;
Subject: [PATCH v2 2/2] kernel: atm: pppoatm fix vc-mux connection failures
Date: Sat, 16 Jun 2018 09:35:20 +0100
Message-Id: &lt;20180616083520.89541-2-ldir@darbyshire-bryant.me.uk&gt;
X-Mailer: git-send-email 2.15.1 (Apple Git-101)
In-Reply-To: &lt;20180616083520.89541-1-ldir@darbyshire-bryant.me.uk&gt;
References: &lt;20180616083520.89541-1-ldir@darbyshire-bryant.me.uk&gt;
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [167.98.58.244]
X-ClientProxiedBy: CWLP265CA0186.GBRP265.PROD.OUTLOOK.COM
 (2603:10a6:401:4d::30) To AM0PR07MB4242.eurprd07.prod.outlook.com
 (2603:10a6:208:b8::26)
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: f09a2a85-1645-4457-973a-08d5d3642aeb
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0;
 RULEID:(7020095)(4652020)(7021125)(5600026)(711020)(4534165)(7022125)(4603075)(4627221)(201702281549075)(7048125)(7024125)(7027125)(7028125)(7023125)(2017052603328)(7153060)(7193020);
 SRVR:AM0PR07MB4242; 
X-Microsoft-Exchange-Diagnostics: 1; AM0PR07MB4242;
 3:OByEJm9+R/UmDm4WzXYOBxZNklmjqSAp+XQgInGvPzuUgNWZcBCusinL4Gn+ZBhLAlQe30UZOQRxSWQjv+WhsO5QB8ixXokXIQHqr8ssGTla9ZwfVOK27UmmTAnTFaZmgyLs+em4HidTW1+4Xji+JQo7eTNt/hks3/YAr5KfysJzyGqiX3pwhFMZwyou2OZhBN21NJjxekr3r19QimVJvGeXP/zgSJ3CtcPyMbrUCExSr6U+MiOt0nJ01uy5Kql6;
 25:pb+3f+dpEHNE+73kGCyrptJKkUeSKGsLKfYwxBd3UUb9dGsdXTn1MnQEcFmyDzcevN0jRHLn5pGqZiYeyO5SoA/NtgmqdEfvUAOzGpOlYwp4/hV/HIxAGYO+OKHDYt87P+74Z2C4q8by+INN7zZBY5lCRa8xnJuWINqvxxFRRLYwKbR7sVoq3Qwt2Xkvd+f24iXz6B9ADmEn9FlidQgESEPVcGXB0tFeszEu+cF/Enix1zFLezoABdVaQTNqN9CeIRc34mN80FyvcS322naWanj31pB6q4IN1HTFFaK7k0jnmiIAtow0yTwmYB5rkKYCucbAnFe9GHI+wRsE63/VdQ==;
 31:saSGcQkWHkowsz6+7EbrAaV7Vw2BsNQcP7yFoQLp4UheZFEOT7Aco4thlB3cuCM5H63ALtNu+yEsXWVRAxjDeCwvrGbKdm1G3tJI7s/PrlWuttIAElb1+npuHoCagJc9RupkSpNp/dPf+HgWid/O9GfLr/YlQEAv6H+bVjCGgCHiZDxBlaTszFW7LRUOh4j72ZgHtDusb8CKu9judFpj59I+9hT7xUoZAqRQ+PvAEIg=
X-MS-TrafficTypeDiagnostic: AM0PR07MB4242:
Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=kevin@darbyshire-bryant.me.uk; 
X-Microsoft-Antispam-PRVS: &lt;AM0PR07MB424256FD86FB165DED256AB0A5730@AM0PR07MB4242.eurprd07.prod.outlook.com&gt;
X-Exchange-Antispam-Report-Test: UriScan:(228905959029699);
X-MS-Exchange-SenderADCheck: 1
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231254)(944501410)(52105095)(10201501046)(93006095)(93001095)(149027)(150027)(6041310)(20161123560045)(20161123562045)(20161123564045)(20161123558120)(2016111802025)(6043046)(6072148)(201708071742011)(7699016);
 SRVR:AM0PR07MB4242; BCL:0; PCL:0; RULEID:; SRVR:AM0PR07MB4242; 
X-Microsoft-Exchange-Diagnostics: 1; AM0PR07MB4242;
 4:Rh5+egZ6xJLeyO63O6DsPahGk8gYZxRRTYRAuel+Ra5dMeS+z2SyLmijVwjvs+6oTisQ/ho2I4tESUaAN+i++ImxukScfmIaG79nik4mfSFO+o+3QWAOTTK6poatsBxEnOTcq2mQKMef6BMFE9LrMXunsPOF8z3gzbVvlMvuM5kmUf5ArOolBuaGkDNJisA4xwnDAM+iJhP0pI+tEMiR3UhZwGvxLGgiwqrviRrCXHJZAweG2HmsVZyvF7HMXSa2HobnN27DDGsg+rAijdrLFBkw1/zR3CBRe/xExDGg5ovvYqKK3n/HCpP1RnV8c+ez
X-Forefront-PRVS: 0705EB1700
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(6069001)(39380400002)(346002)(376002)(366004)(39830400003)(396003)(199004)(189003)(51444003)(7736002)(47776003)(8936002)(8676002)(59450400001)(2361001)(81166006)(50226002)(81156014)(478600001)(1076002)(52116002)(3846002)(50466002)(66066001)(2351001)(106356001)(74482002)(97736004)(105586002)(76176011)(51416003)(305945005)(48376002)(6512007)(25786009)(68736007)(6116002)(6666003)(316002)(476003)(6486002)(486006)(2616005)(446003)(16586007)(6916009)(186003)(386003)(26005)(575784001)(107886003)(5660300001)(11346002)(4326008)(6506007)(53936002)(16526019)(2906002)(956004)(36756003)(169013001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR07MB4242; H:localhost.localdomain; FPR:;
 SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; 
Received-SPF: None (protection.outlook.com: darbyshire-bryant.me.uk does not
 designate permitted sender hosts)
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM0PR07MB4242;
 23:ORfM4A5WPspE1FX43Q8QjwYbOqdj0AWZiXpUSCNhO?=
 =?us-ascii?Q?SDjd0xW7uBholYf4Mfe3UD7btfeAUA5rTdq+Bi2/SKhIQ/mE+4jPRamDI0TB?=
 =?us-ascii?Q?zRLf9saR87PyksQj/5p4fVeADYfyK4LuCkVVxZQwaC8UfrtdkoGAYpYCX9hC?=
 =?us-ascii?Q?rSG0tWMRyihwV4i25SmXQDrZSSLH44JKThaCjNVOUkqQT3J/+MOW6j31t1AH?=
 =?us-ascii?Q?kdEJe4NTSaMgK1WbZwU+uEg6wTgC6HGfCRtsyHrjYB5639uK0JE7sCeDw0ks?=
 =?us-ascii?Q?MLi5n9QGVe6rEuDCufDHwwz8cKZSJFLpuCrkP9TewY9a/IsrGe1lwSds5OBp?=
 =?us-ascii?Q?E3cVq/wWYvniR3OvO0GlgSH7rdWb1Axa3CDam2wAJDk6QGq28GMN9kqo0fM1?=
 =?us-ascii?Q?1BaJtrJ9jloMu7VBMxPXkvuwRWbBwZ6A2pG7zEtraDPztctfz55vW85So3pU?=
 =?us-ascii?Q?NwpBLDbAAhj0MmJor5x+XJAZeVaDfIyXUFOk961tyKHIcleIcvoPj1tI5Bty?=
 =?us-ascii?Q?reY2vTBCQjoaJI42BCeAO4xD8it3VlWfOfM6Rj/aESD2n2sHye2JWzt21VgR?=
 =?us-ascii?Q?YONDdfu9qOaq/kw/VqVHJzwQHXQFwMpFj9r2rW8SlVmKY+s0nzLKv1Pr5qSv?=
 =?us-ascii?Q?qrjFntTRF2k6dw5XFPRu5GyXzu4TdjyjXF2ugk54BhpIQvpLam3O9NV32vzb?=
 =?us-ascii?Q?Zp+98M9aghq5dbY+7AUrCNv/oOgAcvCukv/F6K0jCV1s2QQQIlFsVGXPyudW?=
 =?us-ascii?Q?lbdVsa5f3Vcc2ugwoXNDi7qVd+jYPYrxeoIivAH8ObEHbGaPa0wFHNeePHyn?=
 =?us-ascii?Q?oaYJwHA/N45XsRV3aZRCvZW3J2TDuUojcTJU0Cl/Nayg1ZjF9d/gkbd7ig7F?=
 =?us-ascii?Q?s3uzudW9XwqKiRV6Ji8vFJ7huRHhUdPqwFTOaKb7LxSgtWvfGMkMMmhYQSdq?=
 =?us-ascii?Q?KJtForHR7Nt9oKb9D6wpic/5R3NyFBnBUy6Yq8Q1N7r+BVEgtk/OdOahe8zv?=
 =?us-ascii?Q?xho1GSKALSgLkMsqu8gU7mFL2NTXLzUCyd7lQjhfPg6OXoT/UvEAnlOK5h2z?=
 =?us-ascii?Q?hhU9AjI7tv7RLJFMG8ZdvoOH7X4w/MLx6eV/g2wVAfxyWFHybucLtGbCZ0SQ?=
 =?us-ascii?Q?5IoHz5etAeq4V/zZDB9EvjBfexQWGlBworJSKzcjVNqtTqqcIeTl0id9r2M0?=
 =?us-ascii?Q?BRo7eerPI8pjpzTvG5sVWgVAVC4o4ItCMU+Gl/tWJNBlHHc/L4U91l22JQb1?=
 =?us-ascii?Q?dbCxATob69iU026Hh+sK8jE2biKxZe+U3ILQRlN93l4iQ6H/BnXhVx3C8Arz?=
 =?us-ascii?Q?ogSqNcz9CB7mnmwlhmAr0q4fKZ2K2Ug7RFM2q6K75lyJqgodsRSophsmldj3?=
 =?us-ascii?Q?y3xr2lSgxocXdxLcBGqXu1Gn04=3D?=
X-Microsoft-Antispam-Message-Info: KC0vZpUfU/71orczA2qKdDeHqsLRwZt7anaY04IVe6YkGslYfJhAQTEfH2pPOEUa6EnBhJ1NiNTu9DuHPGyQXntFAWwEFEo+0cputGVLVZVjjLjwlJDY9LSG7D88dAwkDGN37NUTFcB6xmiypKctpQitYcIxMC33W0ZE9ckZRABp3FSJ9JASAaQLX5xyVwFT
X-Microsoft-Exchange-Diagnostics: 1; AM0PR07MB4242;
 6:n0noIH1wPf4cZd2mtGC2MTXS38BuNi/DDjCd6cFCcVaHQq9GcsiZVlqA/uX8nAvFxJMZm8/SjFfeozcOsxbrOfMBoeVKs2b7XLlV5tqmqUcNJhUuO2oOT5yFhhfU8wwjbLf37D1FZok4vcV4bNa/nnQVS40XJhT1cI9pQcfAZrFaXfGhE6ldclDnIR3QAdX40ZCEXdNQ5qrgOZmsQ0gy+t4U1C1ONZevAsB8j5k1RGZnpBw0WWVA3CQKk+tBbUO7q+qliGz2lbKI0VWC4jjtN1KeHuxWxzeLnodZ+8iXe8sCR/vKlS4x4M8lVNrwqZ+/aAgQ1K8P05irhDm7XgHIenStZQvr7VgKhei4KPOwjfq/bx6QQ+RZ1R4PX5YN+icwiu+9WEmwIp0ibtjKIW8/jx71bzDLVq98oAuT9EILl5CQ4f+PyKdu4S4oUZtXVF0wg0eGiAceA83VtfkWG0RJdA==;
 5:8j18uydJpiCcAWiuQQkomfYf9Gaf4zeZRLguhlk1fxWrYv4PUwFmxFoTTvKXtgr40/+Y1dm414faSHMnjSo+Xl283m9JZ1ZgqCrS2thxmmqvZcoUbAovPMZnOzuPZqSJ936lNIHH/oWEgK5wrmubkTlsyLG2mY4z8yvMO2AXr+c=;
 24:tsPS6xM2xVUWBL3OxZM9HPSCsWjJbW2HyvDzQBRlZz5jZWLZ7d4glKaflGL5AO5TcMZkfnZydJQXmDFDSV6jsAkV+ubLFvJoRSaou2vzbRc=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; AM0PR07MB4242;
 7:lLIfR2X4koyatg/Mmyu6ZQqbNVPdwUdpXrxospBcfwDC+SiMaWLRLpD3M+Pk6HXlBwlSyWJd9yHkauxrc0oo/hPLcgwTfUNGla9jr4X6riCMv5+RhfGEBoV2IsZb5ujOPdpUBnLYBf6BLpFj6yGJiKrqOe76BJo5HK+4ZtSNcMCSeOnZnU2v2Yl5MBHs5mCMlzAVcxDS8Bn3q2/4muYD/Fg0BRDtChAEezTDjCWyRdt3Zwo0iiibZ/mykLpRI78u
X-OriginatorOrg: darbyshire-bryant.me.uk
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2018 08:35:51.2165 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: f09a2a85-1645-4457-973a-08d5d3642aeb
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 9151708b-c553-406f-8e56-694f435154a4
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR07MB4242
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 
X-CRM114-CacheID: sfid-20180616_013559_345770_22224136 
X-CRM114-Status: GOOD (  18.31  )
X-Spam-Score: -0.1 (/)
X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary:
 Content analysis details:   (-0.1 points)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at http://www.dnswl.org/, no
 trust [104.47.1.54 listed in list.dnswl.org]
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
 -0.0 SPF_PASS               SPF: sender matches SPF record
 -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's
 domain
 -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
 0.1 DKIM_SIGNED            Message has a DKIM or DK signature,
 not necessarily valid

Backport a hot off the press upstream kernel ATM fix:

Preserve value of skb-&gt;truesize when accounting to vcc

&quot;There's a hack in pskb_expand_head() to avoid adjusting skb-&gt;truesize
for certain skbs. Ideally it would cover ATM too. It doesn't. Just
stashing the accounted value and using it in atm_raw_pop() is probably
the easiest way to cope.&quot;

The issue was introduced in upstream by:

commit 14afee4b6092fde451ee17604e5f5c89da33e71e
Author: Reshetova, Elena &lt;elena.reshetova@intel.com&gt;
Date:   Fri Jun 30 13:08:00 2017 +0300

    net: convert sock.sk_wmem_alloc from atomic_t to refcount_t

Sincerest thanks to Mathias Kresin &lt;dev@kresin.me&gt; for debugging
assistance and to David Woodhouse &lt;dwmw2@infradead.org&gt; for further
guidance, cajoling &amp; patience in interpreting the debug I was giving him
and producing a fix!

Fixes FS#1567

Signed-off-by: Kevin Darbyshire-Bryant &lt;ldir@darbyshire-bryant.me.uk&gt;
---
 ...-sock.sk_wmem_alloc-from-atomic_t-to-refc.patch | 186 +++++++++++++++++++++
 1 file changed, 186 insertions(+)
 create mode 100644 target/linux/generic/backport-4.14/080-net-convert-sock.sk_wmem_alloc-from-atomic_t-to-refc.patch

diff --git a/target/linux/generic/backport-4.14/080-net-convert-sock.sk_wmem_alloc-from-atomic_t-to-refc.patch b/target/linux/generic/backport-4.14/080-net-convert-sock.sk_wmem_alloc-from-atomic_t-to-refc.patch
new file mode 100644
index 0000000000..8108d99348
--- /dev/null
+++ b/target/linux/generic/backport-4.14/080-net-convert-sock.sk_wmem_alloc-from-atomic_t-to-refc.patch
@@ -0,0 +1,186 @@
+From 99967eb67d14b2ed17b194a8dac357d641a06e43 Mon Sep 17 00:00:00 2001
+From: David Woodhouse &lt;dwmw2@infradead.org&gt;
+Date: Fri, 15 Jun 2018 21:00:27 +0100
+Subject: [PATCH] net: convert sock.sk_wmem_alloc from atomic_t to refcount_t
+
+On Fri, 2018-06-15 at 14:44 +0100, David Woodhouse wrote:
+&gt;
+&gt; &gt; Or simply use a new field in ATM_SKB(skb) to remember a stable
+&gt; &gt; truesize used in both sides (add/sub)
+&gt;
+&gt; Right, that was my second suggestion (&quot;copy the accounted value...&quot;).
+&gt;
+&gt; It's a bit of a hack, and I think that actually *using* sock_wfree()
+&gt; instead of what's currently in atm_pop_raw() would be the better
+&gt; solution. Does anyone remember why we didn't do that in the first
+&gt; place?
+
+That does end up being quite hairy. I don't think it's worth doing.
+
+This should probably suffice to fix it...
+
+Kevin this is going to conflict with the ifx_atm_alloc_skb() hack in
+the tree you're working on, but that needs to be killed with fire
+anyway. It's utterly pointless as discussed.
+
+From 3368eaeb0a2f09138894dde0f26f879e5228005a Mon Sep 17 00:00:00 2001
+From: David Woodhouse &lt;dwmw2@infradead.org&gt;
+Date: Fri, 15 Jun 2018 20:49:20 +0100
+Subject: [PATCH] atm: Preserve value of skb-&gt;truesize when accounting to vcc
+
+There's a hack in pskb_expand_head() to avoid adjusting skb-&gt;truesize
+for certain skbs. Ideally it would cover ATM too. It doesn't. Just
+stashing the accounted value and using it in atm_raw_pop() is probably
+the easiest way to cope.
+
+Signed-off-by: David Woodhouse &lt;dwmw2@infradead.org&gt;
+Signed-off-by: Kevin Darbyshire-Bryant &lt;ldir@darbyshire-bryant.me.uk&gt;
+---
+ include/linux/atmdev.h | 15 +++++++++++++++
+ net/atm/br2684.c       |  3 +--
+ net/atm/clip.c         |  3 +--
+ net/atm/common.c       |  3 +--
+ net/atm/lec.c          |  3 +--
+ net/atm/mpc.c          |  3 +--
+ net/atm/pppoatm.c      |  3 +--
+ net/atm/raw.c          |  4 ++--
+ 8 files changed, 23 insertions(+), 14 deletions(-)
+
+diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
+index 0c27515d..8124815e 100644
+--- a/include/linux/atmdev.h
++++ b/include/linux/atmdev.h
+@@ -214,6 +214,7 @@ struct atmphy_ops {
+ struct atm_skb_data {
+ 	struct atm_vcc	*vcc;		/* ATM VCC */
+ 	unsigned long	atm_options;	/* ATM layer options */
++	unsigned int	acct_truesize;  /* truesize accounted to vcc */
+ };
+ 
+ #define VCC_HTABLE_SIZE 32
+@@ -241,6 +242,20 @@ void vcc_insert_socket(struct sock *sk);
+ 
+ void atm_dev_release_vccs(struct atm_dev *dev);
+ 
++static inline void atm_account_tx(struct atm_vcc *vcc, struct sk_buff *skb)
++{
++	/*
++	 * Because ATM skbs may not belong to a sock (and we don't
++	 * necessarily want to), skb-&gt;truesize may be adjusted,
++	 * escaping the hack in pskb_expand_head() which avoids
++	 * doing so for some cases. So stash the value of truesize
++	 * at the time we accounted it, and atm_pop_raw() can use
++	 * that value later, in case it changes.
++	 */
++	refcount_add(skb-&gt;truesize, &amp;sk_atm(vcc)-&gt;sk_wmem_alloc);
++	ATM_SKB(skb)-&gt;acct_truesize = skb-&gt;truesize;
++	ATM_SKB(skb)-&gt;atm_options = vcc-&gt;atm_options;
++}
+ 
+ static inline void atm_force_charge(struct atm_vcc *vcc,int truesize)
+ {
+diff --git a/net/atm/br2684.c b/net/atm/br2684.c
+index 4e111196..bc21f8e8 100644
+--- a/net/atm/br2684.c
++++ b/net/atm/br2684.c
+@@ -252,8 +252,7 @@ static int br2684_xmit_vcc(struct sk_buff *skb, struct net_device *dev,
+ 
+ 	ATM_SKB(skb)-&gt;vcc = atmvcc = brvcc-&gt;atmvcc;
+ 	pr_debug(&quot;atm_skb(%p)-&gt;vcc(%p)-&gt;dev(%p)\n&quot;, skb, atmvcc, atmvcc-&gt;dev);
+-	refcount_add(skb-&gt;truesize, &amp;sk_atm(atmvcc)-&gt;sk_wmem_alloc);
+-	ATM_SKB(skb)-&gt;atm_options = atmvcc-&gt;atm_options;
++	atm_account_tx(atmvcc, skb);
+ 	dev-&gt;stats.tx_packets++;
+ 	dev-&gt;stats.tx_bytes += skb-&gt;len;
+ 
+diff --git a/net/atm/clip.c b/net/atm/clip.c
+index 65f706e4..60920a42 100644
+--- a/net/atm/clip.c
++++ b/net/atm/clip.c
+@@ -381,8 +381,7 @@ static netdev_tx_t clip_start_xmit(struct sk_buff *skb,
+ 		memcpy(here, llc_oui, sizeof(llc_oui));
+ 		((__be16 *) here)[3] = skb-&gt;protocol;
+ 	}
+-	refcount_add(skb-&gt;truesize, &amp;sk_atm(vcc)-&gt;sk_wmem_alloc);
+-	ATM_SKB(skb)-&gt;atm_options = vcc-&gt;atm_options;
++	atm_account_tx(vcc, skb);
+ 	entry-&gt;vccs-&gt;last_use = jiffies;
+ 	pr_debug(&quot;atm_skb(%p)-&gt;vcc(%p)-&gt;dev(%p)\n&quot;, skb, vcc, vcc-&gt;dev);
+ 	old = xchg(&amp;entry-&gt;vccs-&gt;xoff, 1);	/* assume XOFF ... */
+diff --git a/net/atm/common.c b/net/atm/common.c
+index 83d6f40e..9935cc1f 100644
+--- a/net/atm/common.c
++++ b/net/atm/common.c
+@@ -633,10 +633,9 @@ int vcc_sendmsg(struct socket *sock, struct msghdr *m, size_t size)
+ 		goto out;
+ 	}
+ 	pr_debug(&quot;%d += %d\n&quot;, sk_wmem_alloc_get(sk), skb-&gt;truesize);
+-	refcount_add(skb-&gt;truesize, &amp;sk-&gt;sk_wmem_alloc);
++	atm_account_tx(vcc, skb);
+ 
+ 	skb-&gt;dev = NULL; /* for paths shared with net_device interfaces */
+-	ATM_SKB(skb)-&gt;atm_options = vcc-&gt;atm_options;
+ 	if (!copy_from_iter_full(skb_put(skb, size), size, &amp;m-&gt;msg_iter)) {
+ 		kfree_skb(skb);
+ 		error = -EFAULT;
+diff --git a/net/atm/lec.c b/net/atm/lec.c
+index 5741b647..9f236569 100644
+--- a/net/atm/lec.c
++++ b/net/atm/lec.c
+@@ -182,9 +182,8 @@ lec_send(struct atm_vcc *vcc, struct sk_buff *skb)
+ 	struct net_device *dev = skb-&gt;dev;
+ 
+ 	ATM_SKB(skb)-&gt;vcc = vcc;
+-	ATM_SKB(skb)-&gt;atm_options = vcc-&gt;atm_options;
++	atm_account_tx(vcc, skb);
+ 
+-	refcount_add(skb-&gt;truesize, &amp;sk_atm(vcc)-&gt;sk_wmem_alloc);
+ 	if (vcc-&gt;send(vcc, skb) &lt; 0) {
+ 		dev-&gt;stats.tx_dropped++;
+ 		return;
+diff --git a/net/atm/mpc.c b/net/atm/mpc.c
+index 56771472..db9a1838 100644
+--- a/net/atm/mpc.c
++++ b/net/atm/mpc.c
+@@ -555,8 +555,7 @@ static int send_via_shortcut(struct sk_buff *skb, struct mpoa_client *mpc)
+ 					sizeof(struct llc_snap_hdr));
+ 	}
+ 
+-	refcount_add(skb-&gt;truesize, &amp;sk_atm(entry-&gt;shortcut)-&gt;sk_wmem_alloc);
+-	ATM_SKB(skb)-&gt;atm_options = entry-&gt;shortcut-&gt;atm_options;
++	atm_account_tx(entry-&gt;shortcut, skb);
+ 	entry-&gt;shortcut-&gt;send(entry-&gt;shortcut, skb);
+ 	entry-&gt;packets_fwded++;
+ 	mpc-&gt;in_ops-&gt;put(entry);
+diff --git a/net/atm/pppoatm.c b/net/atm/pppoatm.c
+index 21d9d341..af8c4b38 100644
+--- a/net/atm/pppoatm.c
++++ b/net/atm/pppoatm.c
+@@ -350,8 +350,7 @@ static int pppoatm_send(struct ppp_channel *chan, struct sk_buff *skb)
+ 		return 1;
+ 	}
+ 
+-	refcount_add(skb-&gt;truesize, &amp;sk_atm(ATM_SKB(skb)-&gt;vcc)-&gt;sk_wmem_alloc);
+-	ATM_SKB(skb)-&gt;atm_options = ATM_SKB(skb)-&gt;vcc-&gt;atm_options;
++	atm_account_tx(vcc, skb);
+ 	pr_debug(&quot;atm_skb(%p)-&gt;vcc(%p)-&gt;dev(%p)\n&quot;,
+ 		 skb, ATM_SKB(skb)-&gt;vcc, ATM_SKB(skb)-&gt;vcc-&gt;dev);
+ 	ret = ATM_SKB(skb)-&gt;vcc-&gt;send(ATM_SKB(skb)-&gt;vcc, skb)
+diff --git a/net/atm/raw.c b/net/atm/raw.c
+index ee10e8d4..b3ba44aa 100644
+--- a/net/atm/raw.c
++++ b/net/atm/raw.c
+@@ -35,8 +35,8 @@ static void atm_pop_raw(struct atm_vcc *vcc, struct sk_buff *skb)
+ 	struct sock *sk = sk_atm(vcc);
+ 
+ 	pr_debug(&quot;(%d) %d -= %d\n&quot;,
+-		 vcc-&gt;vci, sk_wmem_alloc_get(sk), skb-&gt;truesize);
+-	WARN_ON(refcount_sub_and_test(skb-&gt;truesize, &amp;sk-&gt;sk_wmem_alloc));
++		 vcc-&gt;vci, sk_wmem_alloc_get(sk), ATM_SKB(skb)-&gt;acct_truesize);
++	WARN_ON(refcount_sub_and_test(ATM_SKB(skb)-&gt;acct_truesize, &amp;sk-&gt;sk_wmem_alloc));
+ 	dev_kfree_skb_any(skb);
+ 	sk-&gt;sk_write_space(sk);
+ }
+-- 
+2.15.1 (Apple Git-101)
+
-- 
2.15.1 (Apple Git-101)


]