Explicitly specify the mm to pass to shmem_insert_page() when the pkram_stream is initialized rather than use the mm of the current thread. This will allow for multiple kernel threads to target the same mm when inserting pages in parallel. Signed-off-by: Anthony Yznaga <anthony.yznaga@xxxxxxxxxx> --- include/linux/pkram.h | 1 + mm/pkram.c | 1 + mm/shmem_pkram.c | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/linux/pkram.h b/include/linux/pkram.h index b47b3aef16e3..cbb79d2803c0 100644 --- a/include/linux/pkram.h +++ b/include/linux/pkram.h @@ -18,6 +18,7 @@ struct pkram_stream { unsigned long next_index; struct address_space *mapping; + struct mm_struct *mm; /* byte data */ struct page *data_page; diff --git a/mm/pkram.c b/mm/pkram.c index 4d4d836fea53..a5e539052af6 100644 --- a/mm/pkram.c +++ b/mm/pkram.c @@ -565,6 +565,7 @@ static void pkram_stream_init(struct pkram_stream *ps, memset(ps, 0, sizeof(*ps)); ps->gfp_mask = gfp_mask; ps->node = node; + ps->mm = current->mm; } static void pkram_stream_init_obj(struct pkram_stream *ps, struct pkram_obj *obj) diff --git a/mm/shmem_pkram.c b/mm/shmem_pkram.c index 3fa9cfbe0003..c97d64393822 100644 --- a/mm/shmem_pkram.c +++ b/mm/shmem_pkram.c @@ -236,7 +236,7 @@ static int load_file_content(struct pkram_stream *ps) if (!page) break; - err = shmem_insert_page(current->mm, ps->mapping->host, index, page); + err = shmem_insert_page(ps->mm, ps->mapping->host, index, page); put_page(page); } while (!err); -- 2.13.3