From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 18 May 2018 06:13:53 -0400 From: Kent Overstreet To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Andrew Morton , Dave Chinner , darrick.wong@oracle.com, tytso@mit.edu, linux-btrfs@vger.kernel.org, clm@fb.com, jbacik@fb.com, viro@zeniv.linux.org.uk, willy@infradead.org Subject: Re: [PATCH 03/10] locking: bring back lglocks Message-ID: <20180518101353.GA15403@kmo-pixel> References: <20180518074918.13816-1-kent.overstreet@gmail.com> <20180518074918.13816-7-kent.overstreet@gmail.com> <20180518095102.GE12217@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180518095102.GE12217@hirez.programming.kicks-ass.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: On Fri, May 18, 2018 at 11:51:02AM +0200, Peter Zijlstra wrote: > On Fri, May 18, 2018 at 03:49:04AM -0400, Kent Overstreet wrote: > > bcachefs makes use of them - also, add a proper lg_lock_init() > > Why?! lglocks are horrid things, we got rid of them for a reason. They > have terrifying worst case preemption off latencies. Ah. That was missing from your commit message. > Why can't you use something like per-cpu rwsems? Well, a) in my use case, lg_global_lock() pretty much isn't used in normal operation, it's only called when starting mark and sweep gc (which is not needed anymore and disabled by default, it'll eventually get rolled into online fsck) and for device resize b) I'm using it in conjection with percpu counters, and technically yes I certainly _could_ use per-cpu sleepable locks (mutexes would make more sense for me than rwsems), there's a bit of a clash there and it's going to be a bit ugly and messy and it's more work for me. (this_cpu_ptr() no longer makes any sense in that case, so it'd mean auditing and converting all the code that touches the relevant data structures). If you're really that dead set against lglocks I might just come up with a new lock with similar semantics, that doesn't break this_cpu_ptr() but sleeps if the global lock is held...