Re: [PATCHv3 4/5] mm: make compound_head() robust
From: Hugh Dickins <hughd@google.com>
Date: 2015-08-26 22:28:49
Also in:
lkml
On Wed, 26 Aug 2015, Paul E. McKenney wrote:
On Wed, Aug 26, 2015 at 11:18:45AM -0700, Hugh Dickins wrote:quoted
On Tue, 25 Aug 2015, Paul E. McKenney wrote:quoted
On Tue, Aug 25, 2015 at 10:46:44PM +0200, Vlastimil Babka wrote:quoted
On 25.8.2015 22:11, Paul E. McKenney wrote:quoted
On Tue, Aug 25, 2015 at 09:33:54PM +0300, Kirill A. Shutemov wrote:quoted
On Tue, Aug 25, 2015 at 01:44:13PM +0200, Vlastimil Babka wrote:quoted
On 08/21/2015 02:10 PM, Kirill A. Shutemov wrote:quoted
On Thu, Aug 20, 2015 at 04:36:43PM -0700, Andrew Morton wrote:quoted
On Wed, 19 Aug 2015 12:21:45 +0300 "Kirill A. Shutemov" [off-list ref] wrote:quoted
The patch introduces page->compound_head into third double word block in front of compound_dtor and compound_order. That means it shares storage space with: - page->lru.next; - page->next; - page->rcu_head.next; - page->pmd_huge_pte;We should probably ask Paul about the chances that rcu_head.next would like to use the bit too one day?+Paul.The call_rcu() function does stomp that bit, but if you stop using that bit before you invoke call_rcu(), no problem.You mean that it sets the bit 0 of rcu_head.next during its processing?Not at the moment, though RCU will splat if given a misaligned rcu_head structure because of the possibility to use that bit to flag callbacks that do nothing but free memory. If RCU needs to do that (e.g., to promote energy efficiency), then that bit might well be set during RCU grace-period processing.But if you do one day implement that, wouldn't sl?b.c have to use call_rcu_with_added_meaning() instead of call_rcu(), to be in danger of getting that bit set? (No rcu_head is placed in a PageTail page.)Good point, call_rcu_lazy(), but yes.quoted
So although it might be a little strange not to use a variant intended for freeing memory when indeed that's what it's doing, it would not be the end of the world for SLAB_DESTROY_BY_RCU to carry on using straight call_rcu(), in defence of the struct page safety Kirill is proposing.As long as you are OK with the bottom bit being zero throughout the RCU processing, yes.
That's exactly what we want: sounds like we have no problem, thanks Paul. Hugh -- 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>