From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752559AbdLLPvl (ORCPT ); Tue, 12 Dec 2017 10:51:41 -0500 Received: from iolanthe.rowland.org ([192.131.102.54]:50372 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1752265AbdLLPvi (ORCPT ); Tue, 12 Dec 2017 10:51:38 -0500 Date: Tue, 12 Dec 2017 10:51:37 -0500 (EST) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Joe Perches cc: Matthew Wilcox , Andrew Morton , Andy Whitcroft , Dave Chinner , Byungchul Park , "Theodore Ts'o" , Matthew Wilcox , Ross Zwisler , Jens Axboe , Rehas Sachdeva , , , , , , , , , Subject: Re: [PATCH v4 72/73] xfs: Convert mru cache to XArray In-Reply-To: <1513035963.3036.17.camel@perches.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 11 Dec 2017, Joe Perches wrote: > > - I don't understand the error for xa_head here: > > > > struct xarray { > > spinlock_t xa_lock; > > gfp_t xa_flags; > > void __rcu * xa_head; > > }; > > > > Do people really think that: > > > > struct xarray { > > spinlock_t xa_lock; > > gfp_t xa_flags; > > void __rcu *xa_head; > > }; > > > > is more aesthetically pleasing? And not just that, but it's an *error* > > so the former is *RIGHT* and this is *WRONG*. And not just a matter Not sure what was meant here. Neither one is *WRONG* in the sense of being invalid C code. In the sense of what checkpatch will accept, the former is *WRONG* and the latter is *RIGHT* -- the opposite of what was written. > > of taste? > > No opinion really. > That's from Andy Whitcroft's original implementation. This one, at least, is easy to explain. The original version tends to lead to bugs, or easily misunderstood code. Consider if another variable was added to the declaration; it could easily turn into: void __rcu * xa_head, xa_head2; (The compiler will reject this, but it wouldn't if the underlying type had been int instead of void.) Doing it the other way makes the meaning a lot more clear: void __rcu *xa_head, *xa_head2; This is an idiom specifically intended to reduce the likelihood of errors. Rather like avoiding assignments inside conditionals. Alan Stern