|
@@ -40,6 +40,7 @@
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/random.h>
|
|
|
#include <linux/sched.h>
|
|
|
+#include <linux/sched/mm.h>
|
|
|
#include <linux/fs.h>
|
|
|
#include <linux/pagemap.h>
|
|
|
#include <linux/seq_file.h>
|
|
@@ -1368,31 +1369,18 @@ static int get_pages(struct nandsim *ns, struct file *file, size_t count, loff_t
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int set_memalloc(void)
|
|
|
-{
|
|
|
- if (current->flags & PF_MEMALLOC)
|
|
|
- return 0;
|
|
|
- current->flags |= PF_MEMALLOC;
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-static void clear_memalloc(int memalloc)
|
|
|
-{
|
|
|
- if (memalloc)
|
|
|
- current->flags &= ~PF_MEMALLOC;
|
|
|
-}
|
|
|
-
|
|
|
static ssize_t read_file(struct nandsim *ns, struct file *file, void *buf, size_t count, loff_t pos)
|
|
|
{
|
|
|
ssize_t tx;
|
|
|
- int err, memalloc;
|
|
|
+ int err;
|
|
|
+ unsigned int noreclaim_flag;
|
|
|
|
|
|
err = get_pages(ns, file, count, pos);
|
|
|
if (err)
|
|
|
return err;
|
|
|
- memalloc = set_memalloc();
|
|
|
+ noreclaim_flag = memalloc_noreclaim_save();
|
|
|
tx = kernel_read(file, pos, buf, count);
|
|
|
- clear_memalloc(memalloc);
|
|
|
+ memalloc_noreclaim_restore(noreclaim_flag);
|
|
|
put_pages(ns);
|
|
|
return tx;
|
|
|
}
|
|
@@ -1400,14 +1388,15 @@ static ssize_t read_file(struct nandsim *ns, struct file *file, void *buf, size_
|
|
|
static ssize_t write_file(struct nandsim *ns, struct file *file, void *buf, size_t count, loff_t pos)
|
|
|
{
|
|
|
ssize_t tx;
|
|
|
- int err, memalloc;
|
|
|
+ int err;
|
|
|
+ unsigned int noreclaim_flag;
|
|
|
|
|
|
err = get_pages(ns, file, count, pos);
|
|
|
if (err)
|
|
|
return err;
|
|
|
- memalloc = set_memalloc();
|
|
|
+ noreclaim_flag = memalloc_noreclaim_save();
|
|
|
tx = kernel_write(file, buf, count, pos);
|
|
|
- clear_memalloc(memalloc);
|
|
|
+ memalloc_noreclaim_restore(noreclaim_flag);
|
|
|
put_pages(ns);
|
|
|
return tx;
|
|
|
}
|