From patchwork Tue Nov 17 07:19:33 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [4/7] nandsim: Don't use PF_MEMALLOC Date: Mon, 16 Nov 2009 21:19:33 -0000 From: KOSAKI Motohiro X-Patchwork-Id: 38583 Message-Id: <20091117161843.3DE0.A69D9226@jp.fujitsu.com> To: LKML Cc: Artem Bityutskiy , David Woodhouse , linux-mm , linux-mtd@lists.infradead.org, kosaki.motohiro@jp.fujitsu.com, Andrew Morton Non MM subsystem must not use PF_MEMALLOC. Memory reclaim need few memory, anyone must not prevent it. Otherwise the system cause mysterious hang-up and/or OOM Killer invokation. Cc: David Woodhouse Cc: Artem Bityutskiy Cc: linux-mtd@lists.infradead.org Signed-off-by: KOSAKI Motohiro --- drivers/mtd/nand/nandsim.c | 22 ++-------------------- 1 files changed, 2 insertions(+), 20 deletions(-) diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c index cd0711b..97a8bbb 100644 --- a/drivers/mtd/nand/nandsim.c +++ b/drivers/mtd/nand/nandsim.c @@ -1322,34 +1322,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) { mm_segment_t old_fs; ssize_t tx; - int err, memalloc; + int err; err = get_pages(ns, file, count, *pos); if (err) return err; old_fs = get_fs(); set_fs(get_ds()); - memalloc = set_memalloc(); tx = vfs_read(file, (char __user *)buf, count, pos); - clear_memalloc(memalloc); set_fs(old_fs); put_pages(ns); return tx; @@ -1359,16 +1343,14 @@ static ssize_t write_file(struct nandsim *ns, struct file *file, void *buf, size { mm_segment_t old_fs; ssize_t tx; - int err, memalloc; + int err; err = get_pages(ns, file, count, *pos); if (err) return err; old_fs = get_fs(); set_fs(get_ds()); - memalloc = set_memalloc(); tx = vfs_write(file, (char __user *)buf, count, pos); - clear_memalloc(memalloc); set_fs(old_fs); put_pages(ns); return tx;