From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756344AbcEXQpo (ORCPT ); Tue, 24 May 2016 12:45:44 -0400 Received: from mail-db3on0140.outbound.protection.outlook.com ([157.55.234.140]:12811 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751435AbcEXQpm (ORCPT ); Tue, 24 May 2016 12:45:42 -0400 Authentication-Results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=virtuozzo.com; Date: Tue, 24 May 2016 19:13:36 +0300 From: Vladimir Davydov To: Eric Dumazet CC: Andrew Morton , Alexander Viro , Johannes Weiner , Michal Hocko , , , , , Subject: Re: [PATCH RESEND 7/8] pipe: account to kmemcg Message-ID: <20160524161336.GA11150@esperanza> References: <2c2545563b6201f118946f96dd8cfc90e564aff6.1464079538.git.vdavydov@virtuozzo.com> <1464094742.5939.46.camel@edumazet-glaptop3.roam.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1464094742.5939.46.camel@edumazet-glaptop3.roam.corp.google.com> X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: HE1PR02CA0068.eurprd02.prod.outlook.com (10.163.170.36) To DB5PR08MB0581.eurprd08.prod.outlook.com (10.169.32.139) X-MS-Office365-Filtering-Correlation-Id: df9f0e29-b92a-4d56-82ac-08d383ee61d2 X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0581;2:gttXt89QiYtp6Ggd3wt836AWzLAFdCVrPq9gPeuFhHViFEzwyAcONvla5mF7Zv3CXZKKxXtjlx9+rcIHwRhuNvSNvRIZwnqp//dbd/6Jbbb3DKU1LC3jUlbS/64MxIEcMtdMaf7duRVOww+u/J9lNcEhs7iax5s3xI33V5vC53TGO0KJCehWw2n1OWt1vAjE;3:OKWuI2Z6NfCkSJXAyVJaLSQ6j9su1L6C14r3UCyiLIWKal3rV+roOT4MjCklsP127VjScAqnaiahwvCyMqSGuPyrdeF84ORiCbLAqWiJ/fhEn+APjzHKdFcYVcfI4Iw4;25:t2g+HJ2SJWag5YwZzreBVxDJhWA+tZNwDF/4Dh8sIlSaxJKD7HeRjw4ehhb4M1vysoUsAqF5tKSdZwgJdXNnV2Y2bagfM8qAY6OqG+NWVHG7uANub9eIrfTWQiJCS4Lmq7pm+3ZSKWlPQbRjI4imGeQbXI2ZgdZ4bURod2fJHs3qCpoNzo8pOvDCbRkYwDam/WfpdgSAKfdz3MQ72wfJqZYmY4Sh2xXyDMeSmrzxJyhRAPnjBknOQ3/e6LnKOTl5ZAeEYxKzeGgT2EToQx0RPCkaQ9S5xJKIwNNpoRUdVRqAEUXs2nYXBLTDgD+PsmCFaiFSbk2TD6OJlPRSs36B7XNM8j9z7Hxfy9THLgDdBSsx7mFh5IVnTP02AOEnktCKmwqNtu5k54LwAQEYIzY/ICyqF6dafce9lw1cUeLOc64= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR08MB0581; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041072)(6043046);SRVR:DB5PR08MB0581;BCL:0;PCL:0;RULEID:;SRVR:DB5PR08MB0581; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0581;4:twKVfMiNCoaBHVouF3OrM1HgSL6ugtnHt2bZenD6o1M+aHF+b6OfvwdZ1EfymJ04QOicAzsXf6sXoJZmQ7HJIkmRQ89gqUWgK0uInaPeMWCtvIOmZR+bpHOI2aCYs1aPiXJUG2cfDQLVR5Qc9wZn5eJOIfsW9tQOiKk3q9HGJOC+Ep8QYL3bjsrHcMNBsFJmtuG+Xh/NNQvKzK78qgKtsrMXQWLqWsb1voTX9yDT1KPOdIkXu2E3A6hPoDrRMHt41R0ef/MNZQAgMPgAOG58IFsj5kLGuHyR/V4ieA889DazLROWJ3CqdkNjyWXJQE0YWsexZtvKJP63RouS00AQwzwHAIwGFEN51HgD2nNOACLOXp+sZE59IeYsik2zvfyJT7aDcXHfRzgRB+u8KSIqOBtuFTUjWQxdex9UedkHHMo= X-Forefront-PRVS: 09525C61DB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(24454002)(9686002)(50466002)(77096005)(97756001)(92566002)(2906002)(80792005)(33716001)(46406003)(2950100001)(54356999)(76176999)(50986999)(5008740100001)(5004730100002)(110136002)(586003)(3846002)(6116002)(1076002)(23726003)(47776003)(42186005)(33656002)(86362001)(4326007)(81166006)(189998001)(66066001)(8676002)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB5PR08MB0581;H:esperanza;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0581;23:qzT1kfBdBIA8nQr0LxYRymTFDjPs1WFqkuj48B/knneq1E8xMwFI3GK7BuHJHyBz3vm35F2+i35bTjHi7p+07zNoZ2q8qJ9Ek+NWQXL/8nlE02FVrEr5MHYJLISMytS132LJ8kRHtzFQAWTwpvYgjnMe1qCHWungA+Z6PKFRdN4dHoAJMqHVFnGr1W3eh9XfJ8ZTygmTmL4UU8MS5MOWZpXpmqU16w5Xi+/KIhc3CUnK3zebp65pyOpoQ+001qPdmatr3IMi66g7QfS3WjAcWrOjlhEK4SA6KFGJPUP8xvNFyomGPuWWImlapYoYX/TKtWch7ou0+PpL5n393QUXHymhIPGjVklSwdl8sRQIFePw+9HI7MGKT6kI8VdOXGKkpVxaZnAfWWxTw1DSu6SrskD/48EPldKvIIVRKwnot0x+5TYWJh2jxy2vKCCN0wOEoWpnS4QD0fVBcr0a4l8NSRLIjXUms40nfog/G5JjCrOACsdKT0Ug+0AHK5l+HvftyZm1KTpaS6jZsk0fBkBVxboiOd84UGUTr16p9Zru4bSBhBAUw+Raeaga/7v6SnSlrCme4FAnDrOjGsSS4mxlDfc2hzW+zh9aK6kY/R7Xt4CpNSE0SA/+4qP1bQ10qiTRcAvl4TtBd8zbcSenOsvP2V5sSlTaCx4AReKdV73U5j258qLop7sejhGZCjn24eIR/DVrlPkKDZOcRYc9YhwrLwz++CYbn93+eWgSvhRoIeVo/40yfD2GU9vyc0WthVX4Ggr4yurW78FWyJ5fmrFNqsTeL/ksfR6aQvx/Oj7o6e61w/C5Btc5CIAQs1rxexH0CGvw6z/fE1RZnPDOdk0I8xK/Akx55kye5PIrbj4RnuaDjKBQZNpfJFaTPevXNgiptx34KNIfnBye8Y59DcRD+g== X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0581;5:6hd/Qe11NbDlfBUTS7yL0dqaG9t0tkrJBQIxKxPapJUf1hg9gqm1fZgbWgX4u0BeWXEl6IiXGS9L/uiyJvnRgLNBuZUx0sMfmiWvBDsOdJklSQckY8+npYupV4EtLoSple1XO7pmNoGN1oaeRRjDow==;24:N1P3h5PAQU8nhmFFiLZoQdSneXvNwMMwHXUNWZ4FUWpq/tHi8ox3mvpdEScSczbVzigmZT/iZrhhJSnwcNKmqUNhQkJyTRlNt1Z+MEP6yDw=;7:VEE/teWa3WQLRDfemTtciDI/cDXFm5/IPMJeohglHdJzrlg3j70nRJ96cxIhRjkTN1koFfcdWjik05tGrB1DusK9ygvpQfCceI4eVbcVnkQPpG2Nr3hgRY8KRsDI7Zr5zBw9nY0BO54DMBfrFG8ZYds+dr00SvgBuAskU0S3a0DRRWSjtnfX1EzedCNfM59F;20:LWpPSkM0wy822numm8ehmm3tq8FyLk6GeLIvZ9Hm/Y1hGI9a8qwhr0qdWUfriW0KHYJ3SxTgqGiMVY4HEUPM44KaKmHWuBJOmHdUE/D1meAtncxPmlHbyghbhAatB4OqriG1sSf/rDK3qPeASuuHYa0r8/GKq6MX16/ktbO/tZE= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2016 16:13:43.6637 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB0581 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 24, 2016 at 05:59:02AM -0700, Eric Dumazet wrote: ... > > +static int anon_pipe_buf_steal(struct pipe_inode_info *pipe, > > + struct pipe_buffer *buf) > > +{ > > + struct page *page = buf->page; > > + > > + if (page_count(page) == 1) { > > This looks racy : some cpu could have temporarily elevated page count. All pipe operations (pipe_buf_operations->get, ->release, ->steal) are supposed to be called under pipe_lock. So, if we see a pipe_buffer->page with refcount of 1 in ->steal, that means that we are the only its user and it can't be spliced to another pipe. In fact, I just copied the code from generic_pipe_buf_steal, adding kmemcg related checks along the way, so it should be fine. Thanks, Vladimir > > > + if (memcg_kmem_enabled()) { > > + memcg_kmem_uncharge(page, 0); > > + __ClearPageKmemcg(page); > > + } > > + __SetPageLocked(page); > > + return 0; > > + } > > + return 1; > > +}