Re: [PATCH 02/17] proc: replace __get_free_page() with kmalloc()
Jan Kara <[email protected]> Mon, 25 May 2026 18:11:21 +0200
| Newsgroups | org.kernel.vger.linux-nilfs,dev.linux.lists.ocfs2-devel,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kvack.linux-mm |
|---|---|
| Message-ID | <hf7onlvom5jb4pmec2mlsjm4snzt34ghakzks44e2nixeg2d43@whbf3sswolhm> |
On Sat 23-05-26 20:54:14, Mike Rapoport (Microsoft) wrote: > A few functions in fs/proc/base.c use __get_free_page() to allocate a > temporary buffer. > > kmalloc() is a better API for such use and it also provides better > scalability and more debugging possibilities. > > Replace use of __get_free_page() with kmalloc(). > > Signed-off-by: Mike Rapoport (Microsoft) <[email protected]> Looks good. Feel free to add: Reviewed-by: Jan Kara <[email protected]> Honza > --- > fs/proc/base.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/fs/proc/base.c b/fs/proc/base.c > index d9acfa89c894..e129dc509b79 100644 > --- a/fs/proc/base.c > +++ b/fs/proc/base.c > @@ -261,7 +261,7 @@ static ssize_t get_mm_proctitle(struct mm_struct *mm, char __user *buf, > if (pos >= PAGE_SIZE) > return 0; > > - page = (char *)__get_free_page(GFP_KERNEL); > + page = kmalloc(PAGE_SIZE, GFP_KERNEL); > if (!page) > return -ENOMEM; > > @@ -284,7 +284,7 @@ static ssize_t get_mm_proctitle(struct mm_struct *mm, char __user *buf, > ret = len; > } > } > - free_page((unsigned long)page); > + kfree(page); > return ret; > } > > @@ -347,7 +347,7 @@ static ssize_t get_mm_cmdline(struct mm_struct *mm, char __user *buf, > if (count > arg_end - pos) > count = arg_end - pos; > > - page = (char *)__get_free_page(GFP_KERNEL); > + page = kmalloc(PAGE_SIZE, GFP_KERNEL); > if (!page) > return -ENOMEM; > > @@ -371,7 +371,7 @@ static ssize_t get_mm_cmdline(struct mm_struct *mm, char __user *buf, > count -= got; > } > > - free_page((unsigned long)page); > + kfree(page); > return len; > } > > @@ -908,7 +908,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf, > if (!mm) > return 0; > > - page = (char *)__get_free_page(GFP_KERNEL); > + page = kmalloc(PAGE_SIZE, GFP_KERNEL); > if (!page) > return -ENOMEM; > > @@ -949,7 +949,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf, > > mmput(mm); > free: > - free_page((unsigned long) page); > + kfree(page); > return copied; > } > > @@ -1016,7 +1016,7 @@ static ssize_t environ_read(struct file *file, char __user *buf, > if (!mm || !mm->env_end) > return 0; > > - page = (char *)__get_free_page(GFP_KERNEL); > + page = kmalloc(PAGE_SIZE, GFP_KERNEL); > if (!page) > return -ENOMEM; > > @@ -1062,7 +1062,7 @@ static ssize_t environ_read(struct file *file, char __user *buf, > mmput(mm); > > free: > - free_page((unsigned long) page); > + kfree(page); > return ret; > } > > > -- > 2.53.0 > -- Jan Kara <[email protected]> SUSE Labs, CR