Re: [PATCH v5 03/78] xarray: Add the xa_lock to the radix_tree_root
From: Darrick J. Wong <hidden>
Date: 2018-01-02 18:01:55
Also in:
linux-f2fs-devel, linux-fsdevel, linux-mm, linux-usb, linux-xfs, lkml
On Tue, Dec 26, 2017 at 07:58:15PM -0800, Matthew Wilcox wrote:
On Tue, Dec 26, 2017 at 07:43:40PM -0800, Matthew Wilcox wrote:quoted
Also add the xa_lock() and xa_unlock() family of wrappers to make it easier to use the lock. If we could rely on -fplan9-extensions in the compiler, we could avoid all of this syntactic sugar, but that wasn't added until gcc 4.6.Oh, in case anyone's wondering, here's how I'd do it with plan9 extensions: struct xarray { spinlock_t; int xa_flags; void *xa_head; }; ... spin_lock_irqsave(&mapping->pages, flags); __delete_from_page_cache(page, NULL); spin_unlock_irqrestore(&mapping->pages, flags); ... The plan9 extensions permit passing a pointer to a struct which has an unnamed element to a function which is expecting a pointer to the type of that element. The compiler does any necessary arithmetic to produce a pointer. It's exactly as if I had written: spin_lock_irqsave(&mapping->pages.xa_lock, flags); __delete_from_page_cache(page, NULL); spin_unlock_irqrestore(&mapping->pages.xa_lock, flags); More details here: https://9p.io/sys/doc/compiler.html
I read the link, and I understand (from section 3.3) that replacing foo.bar.baz.goo with foo.goo is less typing, but otoh the first time I read your example above I thought "we're passing (an array of pages | something that doesn't have the word 'lock' in the name) to spin_lock_irqsave? wtf?" I suppose it does force me to go dig into whatever mapping->pages is to figure out that there's an unnamed spinlock_t and that the compiler can insert the appropriate pointer arithmetic, but now my brain trips over 'pages' being at the end of the selector for parameter 1 which slows down my review reading... OTOH I guess it /did/ motivate me to click the link, so well played, sir. :) --D
-- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
-- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>