From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753177AbdLHWJO (ORCPT ); Fri, 8 Dec 2017 17:09:14 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:45322 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752350AbdLHWJM (ORCPT ); Fri, 8 Dec 2017 17:09:12 -0500 Date: Fri, 8 Dec 2017 14:09:09 -0800 From: Andrew Morton To: "Huang\, Ying" Cc: Minchan Kim , "Paul E. McKenney" , , , Hugh Dickins , "Johannes Weiner" , Tim Chen , Shaohua Li , Mel Gorman , =?UTF-8?Q?J=EF=BF=BDr=EF=BF=BDme?= Glisse , Michal Hocko , Andrea Arcangeli , David Rientjes , Rik van Riel , Jan Kara , Dave Jiang , Aaron Lu Subject: Re: [PATCH -mm] mm, swap: Fix race between swapoff and some swap operations Message-Id: <20171208140909.4e31ba4f1235b638ae68fd5c@linux-foundation.org> In-Reply-To: <87k1xxbohp.fsf@yhuang-dev.intel.com> References: <20171207011426.1633-1-ying.huang@intel.com> <20171207162937.6a179063a7c92ecac77e44af@linux-foundation.org> <20171208014346.GA8915@bbox> <87po7pg4jt.fsf@yhuang-dev.intel.com> <20171208082644.GA14361@bbox> <87k1xxbohp.fsf@yhuang-dev.intel.com> X-Mailer: Sylpheed 3.4.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 08 Dec 2017 16:41:38 +0800 "Huang\, Ying" wrote: > > Why do we need srcu here? Is it enough with rcu like below? > > > > It might have a bug/room to be optimized about performance/naming. > > I just wanted to show my intention. > > Yes. rcu should work too. But if we use rcu, it may need to be called > several times to make sure the swap device under us doesn't go away, for > example, when checking si->max in __swp_swapcount() and > add_swap_count_continuation(). And I found we need rcu to protect swap > cache radix tree array too. So I think it may be better to use one > calling to srcu_read_lock/unlock() instead of multiple callings to > rcu_read_lock/unlock(). Or use stop_machine() ;) It's very crude but it sure is simple. Does anyone have a swapoff-intensive workload?