On Wed, 19 Aug 2015 12:21:45 +0300 "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> wrote: > Hugh has pointed that compound_head() call can be unsafe in some > context. There's one example: > [...] > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 0735bc0a351a..a4c4b7d07473 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h [...] > -/* > - * If we access compound page synchronously such as access to > - * allocated page, there is no need to handle tail flag race, so we can > - * check tail flag directly without any synchronization primitive. > - */ > -static inline struct page *compound_head_fast(struct page *page) > -{ > - if (unlikely(PageTail(page))) > - return page->first_page; > - return page; > -} > - [...] > @@ -548,13 +508,7 @@ static inline struct page *virt_to_head_page(const void *x) > { > struct page *page = virt_to_page(x); > > - /* > - * We don't need to worry about synchronization of tail flag > - * when we call virt_to_head_page() since it is only called for > - * already allocated page and this page won't be freed until > - * this virt_to_head_page() is finished. So use _fast variant. > - */ > - return compound_head_fast(page); > + return compound_head(page); > } I hope this does not slow down the SLAB/slub allocator? (which calls virt_to_head_page() frequently) -- Best regards, Jesper Dangaard Brouer MSc.CS, Sr. Network Kernel Developer at Red Hat Author of http://www.iptv-analyzer.org LinkedIn: http://www.linkedin.com/in/brouer -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>