From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967980AbdAFINy (ORCPT ); Fri, 6 Jan 2017 03:13:54 -0500 Received: from mout.gmx.net ([212.227.17.20]:64697 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966693AbdAFINq (ORCPT ); Fri, 6 Jan 2017 03:13:46 -0500 Message-ID: <1483690403.11478.8.camel@gmx.de> Subject: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc() From: Mike Galbraith To: Sebastian Andrzej Siewior , Thomas Gleixner Cc: LKML , linux-rt-users , Steven Rostedt Date: Fri, 06 Jan 2017 09:13:23 +0100 In-Reply-To: <20161223163213.szj43nv7rnelkbty@linutronix.de> References: <20161223163213.szj43nv7rnelkbty@linutronix.de> Content-Type: text/plain; charset="us-ascii" X-Mailer: Evolution 3.16.5 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:wzU0hNb71SBwweDG0ezlDfUofOsszvmvPoHGu17q0fJFOYmD6i4 laa5wL/DnoNiX5MVn8HJudHQoaPcipKzPQ5LLFv0wTo+JMFG5aiYQryPsV7XjegYc+Bm0bE KkUmsHX9TTx7/x2DqwKV42tPhBTQnVbcb3+M8ZPIlxwNvboSdmr0pjSTRGELB76ICTM8ZBW rrssm1pQGFStnvz7xLukg== X-UI-Out-Filterresults: notjunk:1;V01:K0:F9EGS7gyoa8=:AVnGOM6uM4C7Bc9JvObVfj yV+awDM68PgupLIcHxMMMipCHtLW0c4YjnZ+ov7MvmAMp1GFjeyuiXxXGVVNjEVF5jDcmHr0R sM/SINjKtLx9wTCVt0iaHzEknfjMKg33xAV03D3aeBIz23fWvwRHReGvzRRJRTCaUr4ZniunB 00TVdR1TDa2M05As8Wbohjnt6V3Gl5TI7W2bP/37updrpFemL/9vRqsDgr2p0PqOPYX0qImX0 GaztatcSfcnR3Noqct5u6KWEJtOgMx6JurFqfsZXMiYhYGppwWl+dTvTm4V857bqvE0aT7z9K Rb36DKetKrkNsjjy4sABvY44T8qbxc3b+vs7Px99kjommsyvU8NoP16z144Ui6o76YWdhohDO MWZpnUhmCsL1wcmsmRUFTWV4/Ove7JnC6jpL/fj+JTKBFBUXA5nzhEKfhlUa8FAVsmTpEQjuX gvZaMRBa0ewBQzXLH+h6eMKFrtaTdaXckzwOSDJqUkXUWDgCgGJNIY5OkDLLWO+fAvmvRAeaP S6GrEqyji4JKkio8GU+M+NFcddY0UKgcf7dxuMPSM8yWjJBsrH/fYE89a3VZxPEMK9yMBMX0f e9u1Tghf4jRRVQL7Qj8gORRKKKvbZukyDVVQ12OxPJ9cFrV+/V0lUmvV1L6cPGHD39k3HQIWq 0poGp078/svhXOKIZe0ypiBOcbh2Zm4p3QQMF/3+mnv7Gy7m2tehKlDaIrcDyoR7VWxS3S3XJ /+BfrY99B+RIn3gr/1JWKxPGQg/YNWabhBepRcd9WqlUY3GAZxI5PU8BC+RsWyB4hcaZeLo04 eicJOGi Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org radix-tree: Partially disable memcg accounting in radix_tree_node_alloc() Having no preload, which turns accounting off for non-rt kernels, trying to allocate coming from shmem_fault() when memcg is full sends us scurrying off to pagefault_out_of_memory(), with dramatic (usually terminal) consequences. LTP's madvise06 testcase triggers this quite well, and per gitk, the below was the beginning of RT memcg woes. 58e698af4c63 radix-tree: account radix_tree_node to memory cgroup Turn memcg accounting off for RT in the problematic path. Signed-off-by: Mike Galbraith Cc: stable-rt@vger.kernel.org # +v4.6-rt --- lib/radix-tree.c | 7 +++++++ 1 file changed, 7 insertions(+) --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -303,6 +303,13 @@ radix_tree_node_alloc(struct radix_tree_ if (!gfpflags_allow_blocking(gfp_mask) && !in_interrupt()) { struct radix_tree_preload *rtp; +#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_MEMCG) + /* + * Arriving here from shmem_fault() and meeting a full memcg + * will send us to pagefault_out_of_memory(), and a dead box. + */ + gfp_mask &= ~__GFP_ACCOUNT; +#endif /* * Even if the caller has preloaded, try to allocate from the * cache first for the new node to get accounted to the memory