[RFC 37/43] shmem: PKRAM: enable bulk loading of preserved pages into shmem

From: Anthony Yznaga
Date: Wed May 06 2020 - 20:45:53 EST


Make use of new interfaces for loading and inserting preserved pages
into a shmem file in bulk.

Signed-off-by: Anthony Yznaga <anthony.yznaga@xxxxxxxxxx>
---
mm/shmem_pkram.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/mm/shmem_pkram.c b/mm/shmem_pkram.c
index 4992b6c3e54e..435488368104 100644
--- a/mm/shmem_pkram.c
+++ b/mm/shmem_pkram.c
@@ -315,18 +315,29 @@ static inline void pkram_load_report_one_done(void)
static int do_load_file_content(struct pkram_stream *ps)
{
unsigned long index;
- struct page *page;
- int err = 0;
+ int i, err;
+
+ err = pkram_prepare_load_pages(ps);
+ if (err)
+ return err;

do {
- page = pkram_load_page(ps, &index, NULL);
- if (!page)
+ err = pkram_load_pages(ps, &index);
+ if (err) {
+ if (err == -ENODATA)
+ err = 0;
break;
+ }

- err = shmem_insert_page(ps->mm, ps->mapping->host, index, page);
- put_page(page);
+ err = shmem_insert_pages(ps->mm, ps->mapping->host, index,
+ ps->pages, ps->nr_pages);
+
+ for (i = 0; i < ps->nr_pages; i++)
+ put_page(ps->pages[i]);
} while (!err);

+ pkram_finish_load_pages(ps);
+
return err;
}

--
2.13.3