All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave@sr71.net>
To: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Hugh Dickins <hughd@google.com>,
	Wu Fengguang <fengguang.wu@intel.com>, Jan Kara <jack@suse.cz>,
	Mel Gorman <mgorman@suse.de>,
	linux-mm@kvack.org, Andi Kleen <ak@linux.intel.com>,
	Matthew Wilcox <matthew.r.wilcox@intel.com>,
	"Kirill A. Shutemov" <kirill@shutemov.name>,
	Hillf Danton <dhillf@gmail.com>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv4 21/39] thp, libfs: initial support of thp in simple_read/write_begin/write_end
Date: Tue, 21 May 2013 14:49:41 -0700	[thread overview]
Message-ID: <519BEBF5.4060309@sr71.net> (raw)
In-Reply-To: <1368321816-17719-22-git-send-email-kirill.shutemov@linux.intel.com>

On 05/11/2013 06:23 PM, Kirill A. Shutemov wrote:
> From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> 
> For now we try to grab a huge cache page if gfp_mask has __GFP_COMP.
> It's probably to weak condition and need to be reworked later.
> 
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> ---
>  fs/libfs.c              |   50 ++++++++++++++++++++++++++++++++++++-----------
>  include/linux/pagemap.h |    8 ++++++++
>  2 files changed, 47 insertions(+), 11 deletions(-)
> 
> diff --git a/fs/libfs.c b/fs/libfs.c
> index 916da8c..ce807fe 100644
> --- a/fs/libfs.c
> +++ b/fs/libfs.c
> @@ -383,7 +383,7 @@ EXPORT_SYMBOL(simple_setattr);
>  
>  int simple_readpage(struct file *file, struct page *page)
>  {
> -	clear_highpage(page);
> +	clear_pagecache_page(page);
>  	flush_dcache_page(page);
>  	SetPageUptodate(page);
>  	unlock_page(page);
> @@ -394,21 +394,44 @@ int simple_write_begin(struct file *file, struct address_space *mapping,
>  			loff_t pos, unsigned len, unsigned flags,
>  			struct page **pagep, void **fsdata)
>  {
> -	struct page *page;
> +	struct page *page = NULL;
>  	pgoff_t index;

I know ramfs uses simple_write_begin(), but it's not the only one.  I
think you probably want to create a new ->write_begin() function just
for ramfs rather than modifying this one.

The optimization that you just put in a few patches ago:

>> +static inline struct page *grab_cache_page_write_begin(
>> +{
>> +	if (!transparent_hugepage_pagecache() && (flags & AOP_FLAG_TRANSHUGE))
>> +		return NULL;
>> +	return __grab_cache_page_write_begin(mapping, index, flags);


is now worthless for any user of simple_readpage().

>  	index = pos >> PAGE_CACHE_SHIFT;
>  
> -	page = grab_cache_page_write_begin(mapping, index, flags);
> +	/* XXX: too weak condition? */

Why would it be too weak?

> +	if (mapping_can_have_hugepages(mapping)) {
> +		page = grab_cache_page_write_begin(mapping,
> +				index & ~HPAGE_CACHE_INDEX_MASK,
> +				flags | AOP_FLAG_TRANSHUGE);
> +		/* fallback to small page */
> +		if (!page) {
> +			unsigned long offset;
> +			offset = pos & ~PAGE_CACHE_MASK;
> +			len = min_t(unsigned long,
> +					len, PAGE_CACHE_SIZE - offset);
> +		}

Why does this have to muck with 'len'?  It doesn't appear to be undoing
anything from earlier in the function.  What is it fixing up?

> +		BUG_ON(page && !PageTransHuge(page));
> +	}

So, those semantics for AOP_FLAG_TRANSHUGE are actually pretty strong.
They mean that you can only return a transparent pagecache page, but you
better not return a small page.

Would it have been possible for a huge page to get returned from
grab_cache_page_write_begin(), but had it split up between there and the
BUG_ON()?

Which reminds me... under what circumstances _do_ we split these huge
pages?  How are those circumstances different from the anonymous ones?

> +	if (!page)
> +		page = grab_cache_page_write_begin(mapping, index, flags);
>  	if (!page)
>  		return -ENOMEM;
> -
>  	*pagep = page;
>  
> -	if (!PageUptodate(page) && (len != PAGE_CACHE_SIZE)) {
> -		unsigned from = pos & (PAGE_CACHE_SIZE - 1);
> -
> -		zero_user_segments(page, 0, from, from + len, PAGE_CACHE_SIZE);
> +	if (!PageUptodate(page)) {
> +		unsigned from;
> +
> +		if (PageTransHuge(page) && len != HPAGE_PMD_SIZE) {
> +			from = pos & ~HPAGE_PMD_MASK;
> +			zero_huge_user_segment(page, 0, from);
> +			zero_huge_user_segment(page,
> +					from + len, HPAGE_PMD_SIZE);
> +		} else if (len != PAGE_CACHE_SIZE) {
> +			from = pos & ~PAGE_CACHE_MASK;
> +			zero_user_segments(page, 0, from,
> +					from + len, PAGE_CACHE_SIZE);
> +		}
>  	}
>  	return 0;
>  }
> @@ -443,9 +466,14 @@ int simple_write_end(struct file *file, struct address_space *mapping,
>  
>  	/* zero the stale part of the page if we did a short copy */
>  	if (copied < len) {
> -		unsigned from = pos & (PAGE_CACHE_SIZE - 1);
> -
> -		zero_user(page, from + copied, len - copied);
> +		unsigned from;
> +		if (PageTransHuge(page)) {
> +			from = pos & ~HPAGE_PMD_MASK;
> +			zero_huge_user(page, from + copied, len - copied);
> +		} else {
> +			from = pos & ~PAGE_CACHE_MASK;
> +			zero_user(page, from + copied, len - copied);
> +		}
>  	}

When I see stuff going in to the simple_* functions, I fear that this
code will end up getting copied in to each and every one of the
filesystems that implement these on their own.

I guess this works for now, but I'm worried that the the next fs is just
going to copy-and-paste these.  Guess I'll yell at them when they do it. :)

--
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>

WARNING: multiple messages have this Message-ID (diff)
From: Dave Hansen <dave@sr71.net>
To: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Hugh Dickins <hughd@google.com>,
	Wu Fengguang <fengguang.wu@intel.com>, Jan Kara <jack@suse.cz>,
	Mel Gorman <mgorman@suse.de>,
	linux-mm@kvack.org, Andi Kleen <ak@linux.intel.com>,
	Matthew Wilcox <matthew.r.wilcox@intel.com>,
	"Kirill A. Shutemov" <kirill@shutemov.name>,
	Hillf Danton <dhillf@gmail.com>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv4 21/39] thp, libfs: initial support of thp in simple_read/write_begin/write_end
Date: Tue, 21 May 2013 14:49:41 -0700	[thread overview]
Message-ID: <519BEBF5.4060309@sr71.net> (raw)
In-Reply-To: <1368321816-17719-22-git-send-email-kirill.shutemov@linux.intel.com>

On 05/11/2013 06:23 PM, Kirill A. Shutemov wrote:
> From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> 
> For now we try to grab a huge cache page if gfp_mask has __GFP_COMP.
> It's probably to weak condition and need to be reworked later.
> 
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> ---
>  fs/libfs.c              |   50 ++++++++++++++++++++++++++++++++++++-----------
>  include/linux/pagemap.h |    8 ++++++++
>  2 files changed, 47 insertions(+), 11 deletions(-)
> 
> diff --git a/fs/libfs.c b/fs/libfs.c
> index 916da8c..ce807fe 100644
> --- a/fs/libfs.c
> +++ b/fs/libfs.c
> @@ -383,7 +383,7 @@ EXPORT_SYMBOL(simple_setattr);
>  
>  int simple_readpage(struct file *file, struct page *page)
>  {
> -	clear_highpage(page);
> +	clear_pagecache_page(page);
>  	flush_dcache_page(page);
>  	SetPageUptodate(page);
>  	unlock_page(page);
> @@ -394,21 +394,44 @@ int simple_write_begin(struct file *file, struct address_space *mapping,
>  			loff_t pos, unsigned len, unsigned flags,
>  			struct page **pagep, void **fsdata)
>  {
> -	struct page *page;
> +	struct page *page = NULL;
>  	pgoff_t index;

I know ramfs uses simple_write_begin(), but it's not the only one.  I
think you probably want to create a new ->write_begin() function just
for ramfs rather than modifying this one.

The optimization that you just put in a few patches ago:

>> +static inline struct page *grab_cache_page_write_begin(
>> +{
>> +	if (!transparent_hugepage_pagecache() && (flags & AOP_FLAG_TRANSHUGE))
>> +		return NULL;
>> +	return __grab_cache_page_write_begin(mapping, index, flags);


is now worthless for any user of simple_readpage().

>  	index = pos >> PAGE_CACHE_SHIFT;
>  
> -	page = grab_cache_page_write_begin(mapping, index, flags);
> +	/* XXX: too weak condition? */

Why would it be too weak?

> +	if (mapping_can_have_hugepages(mapping)) {
> +		page = grab_cache_page_write_begin(mapping,
> +				index & ~HPAGE_CACHE_INDEX_MASK,
> +				flags | AOP_FLAG_TRANSHUGE);
> +		/* fallback to small page */
> +		if (!page) {
> +			unsigned long offset;
> +			offset = pos & ~PAGE_CACHE_MASK;
> +			len = min_t(unsigned long,
> +					len, PAGE_CACHE_SIZE - offset);
> +		}

Why does this have to muck with 'len'?  It doesn't appear to be undoing
anything from earlier in the function.  What is it fixing up?

> +		BUG_ON(page && !PageTransHuge(page));
> +	}

So, those semantics for AOP_FLAG_TRANSHUGE are actually pretty strong.
They mean that you can only return a transparent pagecache page, but you
better not return a small page.

Would it have been possible for a huge page to get returned from
grab_cache_page_write_begin(), but had it split up between there and the
BUG_ON()?

Which reminds me... under what circumstances _do_ we split these huge
pages?  How are those circumstances different from the anonymous ones?

> +	if (!page)
> +		page = grab_cache_page_write_begin(mapping, index, flags);
>  	if (!page)
>  		return -ENOMEM;
> -
>  	*pagep = page;
>  
> -	if (!PageUptodate(page) && (len != PAGE_CACHE_SIZE)) {
> -		unsigned from = pos & (PAGE_CACHE_SIZE - 1);
> -
> -		zero_user_segments(page, 0, from, from + len, PAGE_CACHE_SIZE);
> +	if (!PageUptodate(page)) {
> +		unsigned from;
> +
> +		if (PageTransHuge(page) && len != HPAGE_PMD_SIZE) {
> +			from = pos & ~HPAGE_PMD_MASK;
> +			zero_huge_user_segment(page, 0, from);
> +			zero_huge_user_segment(page,
> +					from + len, HPAGE_PMD_SIZE);
> +		} else if (len != PAGE_CACHE_SIZE) {
> +			from = pos & ~PAGE_CACHE_MASK;
> +			zero_user_segments(page, 0, from,
> +					from + len, PAGE_CACHE_SIZE);
> +		}
>  	}
>  	return 0;
>  }
> @@ -443,9 +466,14 @@ int simple_write_end(struct file *file, struct address_space *mapping,
>  
>  	/* zero the stale part of the page if we did a short copy */
>  	if (copied < len) {
> -		unsigned from = pos & (PAGE_CACHE_SIZE - 1);
> -
> -		zero_user(page, from + copied, len - copied);
> +		unsigned from;
> +		if (PageTransHuge(page)) {
> +			from = pos & ~HPAGE_PMD_MASK;
> +			zero_huge_user(page, from + copied, len - copied);
> +		} else {
> +			from = pos & ~PAGE_CACHE_MASK;
> +			zero_user(page, from + copied, len - copied);
> +		}
>  	}

When I see stuff going in to the simple_* functions, I fear that this
code will end up getting copied in to each and every one of the
filesystems that implement these on their own.

I guess this works for now, but I'm worried that the the next fs is just
going to copy-and-paste these.  Guess I'll yell at them when they do it. :)


  reply	other threads:[~2013-05-21 21:49 UTC|newest]

Thread overview: 243+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-12  1:22 [PATCHv4 00/39] Transparent huge page cache Kirill A. Shutemov
2013-05-12  1:22 ` Kirill A. Shutemov
2013-05-12  1:22 ` [PATCHv4 01/39] mm: drop actor argument of do_generic_file_read() Kirill A. Shutemov
2013-05-12  1:22   ` Kirill A. Shutemov
2013-05-21 18:22   ` Dave Hansen
2013-05-21 18:22     ` Dave Hansen
2013-05-12  1:22 ` [PATCHv4 02/39] block: implement add_bdi_stat() Kirill A. Shutemov
2013-05-12  1:22   ` Kirill A. Shutemov
2013-05-21 18:25   ` Dave Hansen
2013-05-21 18:25     ` Dave Hansen
2013-05-22 11:06     ` Kirill A. Shutemov
2013-05-22 11:06       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 03/39] mm: implement zero_huge_user_segment and friends Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-23 10:32   ` Hillf Danton
2013-05-23 10:32     ` Hillf Danton
2013-05-23 11:32     ` Kirill A. Shutemov
2013-05-23 11:32       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 04/39] radix-tree: implement preload for multiple contiguous elements Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 18:58   ` Dave Hansen
2013-05-21 18:58     ` Dave Hansen
2013-05-22 12:03     ` Kirill A. Shutemov
2013-05-22 12:03       ` Kirill A. Shutemov
2013-05-22 14:20       ` Dave Hansen
2013-05-22 14:20         ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 05/39] memcg, thp: charge huge cache pages Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:04   ` Dave Hansen
2013-05-21 19:04     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 06/39] thp, mm: avoid PageUnevictable on active/inactive lru lists Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:17   ` Dave Hansen
2013-05-21 19:17     ` Dave Hansen
2013-05-22 12:34     ` Kirill A. Shutemov
2013-05-22 12:34       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 07/39] thp, mm: basic defines for transparent huge page cache Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-23 10:36   ` Hillf Danton
2013-05-23 10:36     ` Hillf Danton
2013-05-23 15:49     ` Dave Hansen
2013-05-23 15:49       ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 08/39] thp: compile-time and sysfs knob for thp pagecache Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-22 11:19   ` Hillf Danton
2013-05-22 11:19     ` Hillf Danton
2013-05-12  1:23 ` [PATCHv4 09/39] thp, mm: introduce mapping_can_have_hugepages() predicate Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:28   ` Dave Hansen
2013-05-21 19:28     ` Dave Hansen
2013-05-22 13:51     ` Kirill A. Shutemov
2013-05-22 13:51       ` Kirill A. Shutemov
2013-05-22 15:31       ` Dave Hansen
2013-05-22 15:31         ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 10/39] thp: account anon transparent huge pages into NR_ANON_PAGES Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:32   ` Dave Hansen
2013-05-21 19:32     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 11/39] thp: represent file thp pages in meminfo and friends Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:34   ` Dave Hansen
2013-05-21 19:34     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 12/39] thp, mm: rewrite add_to_page_cache_locked() to support huge pages Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:59   ` Dave Hansen
2013-05-21 19:59     ` Dave Hansen
2013-05-23 14:36     ` Kirill A. Shutemov
2013-05-23 14:36       ` Kirill A. Shutemov
2013-05-23 16:00       ` Dave Hansen
2013-05-23 16:00         ` Dave Hansen
2013-05-28 11:59         ` Kirill A. Shutemov
2013-05-28 11:59           ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 13/39] mm: trace filemap: dump page order Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 19:35   ` Dave Hansen
2013-05-21 19:35     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 14/39] thp, mm: rewrite delete_from_page_cache() to support huge pages Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 20:14   ` Dave Hansen
2013-05-21 20:14     ` Dave Hansen
2013-05-28 12:28     ` Kirill A. Shutemov
2013-05-28 12:28       ` Kirill A. Shutemov
2013-06-07 15:10       ` Kirill A. Shutemov
2013-06-07 15:10         ` Kirill A. Shutemov
2013-06-07 15:10         ` Kirill A. Shutemov
2013-06-07 15:56         ` Dave Hansen
2013-06-07 15:56           ` Dave Hansen
2013-06-10 17:41           ` Kirill A. Shutemov
2013-06-10 17:41             ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 15/39] thp, mm: trigger bug in replace_page_cache_page() on THP Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 20:17   ` Dave Hansen
2013-05-21 20:17     ` Dave Hansen
2013-05-28 12:53     ` Kirill A. Shutemov
2013-05-28 12:53       ` Kirill A. Shutemov
2013-05-28 16:33       ` Dave Hansen
2013-05-28 16:33         ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 16/39] thp, mm: locking tail page is a bug Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 20:18   ` Dave Hansen
2013-05-21 20:18     ` Dave Hansen
2013-05-22 14:12     ` Kirill A. Shutemov
2013-05-22 14:12       ` Kirill A. Shutemov
2013-05-22 14:53       ` Dave Hansen
2013-05-22 14:53         ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 17/39] thp, mm: handle tail pages in page_cache_get_speculative() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 20:49   ` Dave Hansen
2013-05-21 20:49     ` Dave Hansen
2013-06-27 12:40     ` Kirill A. Shutemov
2013-06-27 12:40       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 18/39] thp, mm: add event counters for huge page alloc on write to a file Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 20:54   ` Dave Hansen
2013-05-21 20:54     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 19/39] thp, mm: allocate huge pages in grab_cache_page_write_begin() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 21:14   ` Dave Hansen
2013-05-21 21:14     ` Dave Hansen
2013-05-30 13:20     ` Kirill A. Shutemov
2013-05-30 13:20       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 20/39] thp, mm: naive support of thp in generic read/write routines Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 21:28   ` Dave Hansen
2013-05-21 21:28     ` Dave Hansen
2013-06-07 15:17     ` Kirill A. Shutemov
2013-06-07 15:17       ` Kirill A. Shutemov
2013-06-07 15:29       ` Dave Hansen
2013-06-07 15:29         ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 21/39] thp, libfs: initial support of thp in simple_read/write_begin/write_end Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 21:49   ` Dave Hansen [this message]
2013-05-21 21:49     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 22/39] thp: handle file pages in split_huge_page() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 23/39] thp: wait_split_huge_page(): serialize over i_mmap_mutex too Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 22:05   ` Dave Hansen
2013-05-21 22:05     ` Dave Hansen
2013-06-03 15:02     ` Kirill A. Shutemov
2013-06-03 15:02       ` Kirill A. Shutemov
2013-06-03 15:53       ` Dave Hansen
2013-06-03 15:53         ` Dave Hansen
2013-06-03 16:09         ` Kirill A. Shutemov
2013-06-03 16:09           ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 24/39] thp, mm: truncate support for transparent huge page cache Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 22:39   ` Dave Hansen
2013-05-21 22:39     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 25/39] thp, mm: split huge page on mmap file page Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 26/39] ramfs: enable transparent huge page cache Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 22:43   ` Dave Hansen
2013-05-21 22:43     ` Dave Hansen
2013-05-22 14:22     ` Kirill A. Shutemov
2013-05-22 14:22       ` Kirill A. Shutemov
2013-05-22 14:55       ` Dave Hansen
2013-05-22 14:55         ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 27/39] x86-64, mm: proper alignment mappings with hugepages Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 22:56   ` Dave Hansen
2013-05-21 22:56     ` Dave Hansen
2013-06-25 14:56     ` Kirill A. Shutemov
2013-06-25 14:56       ` Kirill A. Shutemov
2013-06-25 16:46       ` Dave Hansen
2013-06-25 16:46         ` Dave Hansen
2013-05-21 23:20   ` Dave Hansen
2013-05-21 23:20     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 28/39] thp: prepare zap_huge_pmd() to uncharge file pages Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-22  7:26   ` Hillf Danton
2013-05-22  7:26     ` Hillf Danton
2013-05-12  1:23 ` [PATCHv4 29/39] thp: move maybe_pmd_mkwrite() out of mk_huge_pmd() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 23:23   ` Dave Hansen
2013-05-21 23:23     ` Dave Hansen
2013-05-22 14:37     ` Kirill A. Shutemov
2013-05-22 14:37       ` Kirill A. Shutemov
2013-05-22 14:56       ` Dave Hansen
2013-05-22 14:56         ` Dave Hansen
2013-05-21 23:23   ` Dave Hansen
2013-05-21 23:23     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 30/39] thp: do_huge_pmd_anonymous_page() cleanup Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-22 11:45   ` Hillf Danton
2013-05-22 11:45     ` Hillf Danton
2013-05-12  1:23 ` [PATCHv4 31/39] thp: consolidate code between handle_mm_fault() and do_huge_pmd_anonymous_page() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 23:38   ` Dave Hansen
2013-05-21 23:38     ` Dave Hansen
2013-05-22  6:51   ` Hillf Danton
2013-05-22  6:51     ` Hillf Danton
2013-05-12  1:23 ` [PATCHv4 32/39] mm: cleanup __do_fault() implementation Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-21 23:57   ` Dave Hansen
2013-05-21 23:57     ` Dave Hansen
2013-05-12  1:23 ` [PATCHv4 33/39] thp, mm: implement do_huge_linear_fault() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-22 12:47   ` Hillf Danton
2013-05-22 12:47     ` Hillf Danton
2013-05-22 15:13     ` Kirill A. Shutemov
2013-05-22 15:13       ` Kirill A. Shutemov
2013-05-22 12:56   ` Hillf Danton
2013-05-22 12:56     ` Hillf Danton
2013-05-22 15:14     ` Kirill A. Shutemov
2013-05-22 15:14       ` Kirill A. Shutemov
2013-05-22 13:24   ` Hillf Danton
2013-05-22 13:24     ` Hillf Danton
2013-05-22 15:26     ` Kirill A. Shutemov
2013-05-22 15:26       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 34/39] thp, mm: handle huge pages in filemap_fault() Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-22 11:37   ` Hillf Danton
2013-05-22 11:37     ` Hillf Danton
2013-05-22 15:34     ` Kirill A. Shutemov
2013-05-22 15:34       ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 35/39] mm: decomposite do_wp_page() and get rid of some 'goto' logic Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 36/39] mm: do_wp_page(): extract VM_WRITE|VM_SHARED case to separate function Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 37/39] thp: handle write-protect exception to file-backed huge pages Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-23 11:57   ` Hillf Danton
2013-05-23 11:57     ` Hillf Danton
2013-05-23 12:08     ` Kirill A. Shutemov
2013-05-23 12:08       ` Kirill A. Shutemov
2013-05-23 12:12       ` Hillf Danton
2013-05-23 12:12         ` Hillf Danton
2013-05-23 12:33         ` Kirill A. Shutemov
2013-05-23 12:33           ` Kirill A. Shutemov
2013-05-12  1:23 ` [PATCHv4 38/39] thp: vma_adjust_trans_huge(): adjust file-backed VMA too Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-23 11:01   ` Hillf Danton
2013-05-23 11:01     ` Hillf Danton
2013-05-12  1:23 ` [PATCHv4 39/39] thp: map file-backed huge pages on fault Kirill A. Shutemov
2013-05-12  1:23   ` Kirill A. Shutemov
2013-05-23 11:36   ` Hillf Danton
2013-05-23 11:36     ` Hillf Danton
2013-05-23 11:48     ` Kirill A. Shutemov
2013-05-23 11:48       ` Kirill A. Shutemov
2013-05-21 18:37 ` [PATCHv4 00/39] Transparent huge page cache Dave Hansen
2013-05-21 18:37   ` Dave Hansen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=519BEBF5.4060309@sr71.net \
    --to=dave@sr71.net \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=dhillf@gmail.com \
    --cc=fengguang.wu@intel.com \
    --cc=hughd@google.com \
    --cc=jack@suse.cz \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kirill@shutemov.name \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=matthew.r.wilcox@intel.com \
    --cc=mgorman@suse.de \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.