On Fri, May 10, 2013 at 05:08:30PM +0800, zhang.y...@zte.com.cn wrote: > > > Mel Gorman <mgor...@suse.de> wrote on 2013/05/07 23:20:07: > > > > > Re: [PATCH] futex: bugfix for futex-key conflict when futex use hugepage > > > > On Tue, May 07, 2013 at 08:23:48PM +0800, Zhang Yi wrote: > > > diff -uprN linux3.9-orig/kernel/futex.c linux3.9/kernel/futex.c > > > --- linux3.9-orig/kernel/futex.c 2013-04-15 00:45:16.000000000 +0000 > > > +++ linux3.9/kernel/futex.c 2013-05-06 16:24:40.403525000 +0000 > > > @@ -215,6 +215,22 @@ static void drop_futex_key_refs(union fu > > > } > > > } > > > > > > +/* > > > +* Get subpage index in compound page, and add it into futex_key. > > > +*/ > > > +static void key_add_compound_idx(union futex_key *key, > > > + struct page *head_page, struct page *page) > > > +{ > > > + int compound_idx; > > > + > > > + if (compound_order(head_page) >= MAX_ORDER) > > > + compound_idx = page_to_pfn(page) - page_to_pfn(head_page); > > > + else > > > + compound_idx = page - head_page; > > > + > > > + key->both.offset |= compound_idx << PAGE_SHIFT; > > > +} > > > + > > > > This implicitely assumies it is dealing with a hugetlbfs page. Today, it > > is the case that an inode-based futex with PageCompound is a hugetlbfs > > page but that could change in the future if THP ever backs files. This > > would then break again except it would be harder to fix because THP pages > > can be collapsed underneath you after the futex key has been generated. > > > > As this problem is hugetlbfs-specific should the fix be firmly in > hugetlbfs > > I think we should do. > Eg, user applications want high performance, they may use DPDK which using > hugetlbfs. > > > Should I rework the patch like the following code, and test it? >
Yes please, making sure to fix the bug Thomas pointed out. -- Mel Gorman SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/