lkml.org 
[lkml]   [2013]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 12/12] mm, thp, tmpfs: misc fixes for thp tmpfs
1) get rid of the actor function pointer in shm as what Kirill did in generic
file operations.

2) add kernel command line option to turn on/off the thp page cache support.

Signed-off-by: Ning Qu <quning@gmail.com>
---
mm/huge_memory.c | 27 +++++++++++++++++++++++++++
mm/shmem.c | 7 ++++---
2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index d36bdac..ea79a70 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -711,6 +711,33 @@ out:
}
__setup("transparent_hugepage=", setup_transparent_hugepage);

+#ifdef CONFIG_TRANSPARENT_HUGEPAGE_PAGECACHE
+static int __init setup_transparent_hugepage_pagecache(char *str)
+{
+ int ret = 0;
+ if (!str)
+ goto out;
+ if (!strcmp(str, "on")) {
+ set_bit(TRANSPARENT_HUGEPAGE_PAGECACHE,
+ &transparent_hugepage_flags);
+ ret = 1;
+ } else if (!strcmp(str, "off")) {
+ clear_bit(TRANSPARENT_HUGEPAGE_PAGECACHE,
+ &transparent_hugepage_flags);
+ ret = 1;
+ }
+out:
+ if (!ret)
+ printk(KERN_WARNING
+ "transparent_hugepage_pagecache= cannot parse, "
+ "ignored\n");
+ return ret;
+}
+
+__setup("transparent_hugepage_pagecache=",
+ setup_transparent_hugepage_pagecache);
+#endif
+
pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma)
{
if (likely(vma->vm_flags & VM_WRITE))
diff --git a/mm/shmem.c b/mm/shmem.c
index 50a3335..18f1d28 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1783,7 +1783,8 @@ static unsigned long pos_to_off(struct page *page, loff_t pos)
return pos & ~page_cache_to_mask(page);
}

-static void do_shmem_file_read(struct file *filp, loff_t *ppos, read_descriptor_t *desc, read_actor_t actor)
+static void do_shmem_file_read(struct file *filp, loff_t *ppos,
+ read_descriptor_t *desc)
{
struct inode *inode = file_inode(filp);
gfp_t gfp = mapping_gfp_mask(inode->i_mapping);
@@ -1885,7 +1886,7 @@ static void do_shmem_file_read(struct file *filp, loff_t *ppos, read_descriptor_
* "pos" here (the actor routine has to update the user buffer
* pointers and the remaining count).
*/
- ret = actor(desc, page, pos_to_off(page, *ppos), nr);
+ ret = file_read_actor(desc, page, pos_to_off(page, *ppos), nr);
*ppos += ret;
index = *ppos >> PAGE_CACHE_SHIFT;

@@ -1922,7 +1923,7 @@ static ssize_t shmem_file_aio_read(struct kiocb *iocb,
if (desc.count == 0)
continue;
desc.error = 0;
- do_shmem_file_read(filp, ppos, &desc, file_read_actor);
+ do_shmem_file_read(filp, ppos, &desc);
retval += desc.written;
if (desc.error) {
retval = retval ?: desc.error;
--
1.8.4


\
 
 \ /
  Last update: 2013-10-15 02:41    [W:1.274 / U:0.948 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site