Re: [PATCH 03/17] ocfs2/dlm: replace __get_free_page() with kmalloc()
Jan Kara <[email protected]> Mon, 25 May 2026 18:13:36 +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 | <zozs55fvd3cifliymnyfo6uzakhhu4rerhiod6kpiix6hbn3an@ysj2ih7fuvqq> |
On Sat 23-05-26 20:54:15, Mike Rapoport (Microsoft) wrote: > A few places in ocsfs2 allocate temporary buffers with __get_free_page() or > get_zeroed_page(). > > kmalloc() is a better API for such use and it also provides better > scalability and more debugging possibilities. > > Replace use of __get_free_page() and get_zeroed_page() with kmalloc() and > kzalloc() respectively. > > Signed-off-by: Mike Rapoport (Microsoft) <[email protected]> Looks good. Feel free to add: Reviewed-by: Jan Kara <[email protected]> Honza > --- > fs/ocfs2/dlm/dlmdebug.c | 24 +++++++++--------------- > fs/ocfs2/dlm/dlmdomain.c | 8 +++++--- > fs/ocfs2/dlm/dlmmaster.c | 5 ++--- > fs/ocfs2/dlm/dlmrecovery.c | 4 ++-- > 4 files changed, 18 insertions(+), 23 deletions(-) > > diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c > index fe4fdd09bae3..6ca8b3b68eef 100644 > --- a/fs/ocfs2/dlm/dlmdebug.c > +++ b/fs/ocfs2/dlm/dlmdebug.c > @@ -260,10 +260,10 @@ void dlm_print_one_mle(struct dlm_master_list_entry *mle) > { > char *buf; > > - buf = (char *) get_zeroed_page(GFP_ATOMIC); > + buf = kzalloc(PAGE_SIZE, GFP_ATOMIC); > if (buf) { > dump_mle(mle, buf, PAGE_SIZE - 1); > - free_page((unsigned long)buf); > + kfree(buf); > } > } > > @@ -280,7 +280,7 @@ static struct dentry *dlm_debugfs_root; > /* begin - utils funcs */ > static int debug_release(struct inode *inode, struct file *file) > { > - free_page((unsigned long)file->private_data); > + kfree(file->private_data); > return 0; > } > > @@ -327,17 +327,15 @@ static int debug_purgelist_open(struct inode *inode, struct file *file) > struct dlm_ctxt *dlm = inode->i_private; > char *buf = NULL; > > - buf = (char *) get_zeroed_page(GFP_NOFS); > + buf = kzalloc(PAGE_SIZE, GFP_NOFS); > if (!buf) > - goto bail; > + return -ENOMEM; > > i_size_write(inode, debug_purgelist_print(dlm, buf, PAGE_SIZE - 1)); > > file->private_data = buf; > > return 0; > -bail: > - return -ENOMEM; > } > > static const struct file_operations debug_purgelist_fops = { > @@ -384,17 +382,15 @@ static int debug_mle_open(struct inode *inode, struct file *file) > struct dlm_ctxt *dlm = inode->i_private; > char *buf = NULL; > > - buf = (char *) get_zeroed_page(GFP_NOFS); > + buf = kzalloc(PAGE_SIZE, GFP_NOFS); > if (!buf) > - goto bail; > + return -ENOMEM; > > i_size_write(inode, debug_mle_print(dlm, buf, PAGE_SIZE - 1)); > > file->private_data = buf; > > return 0; > -bail: > - return -ENOMEM; > } > > static const struct file_operations debug_mle_fops = { > @@ -775,17 +771,15 @@ static int debug_state_open(struct inode *inode, struct file *file) > struct dlm_ctxt *dlm = inode->i_private; > char *buf = NULL; > > - buf = (char *) get_zeroed_page(GFP_NOFS); > + buf = kzalloc(PAGE_SIZE, GFP_NOFS); > if (!buf) > - goto bail; > + return -ENOMEM; > > i_size_write(inode, debug_state_print(dlm, buf, PAGE_SIZE - 1)); > > file->private_data = buf; > > return 0; > -bail: > - return -ENOMEM; > } > > static const struct file_operations debug_state_fops = { > diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c > index dc9da9133c8e..97bb9400e24b 100644 > --- a/fs/ocfs2/dlm/dlmdomain.c > +++ b/fs/ocfs2/dlm/dlmdomain.c > @@ -63,7 +63,7 @@ static inline void byte_copymap(u8 dmap[], unsigned long smap[], > static void dlm_free_pagevec(void **vec, int pages) > { > while (pages--) > - free_page((unsigned long)vec[pages]); > + kfree(vec[pages]); > kfree(vec); > } > > @@ -75,9 +75,11 @@ static void **dlm_alloc_pagevec(int pages) > if (!vec) > return NULL; > > - for (i = 0; i < pages; i++) > - if (!(vec[i] = (void *)__get_free_page(GFP_KERNEL))) > + for (i = 0; i < pages; i++) { > + vec[i] = kmalloc(PAGE_SIZE, GFP_KERNEL); > + if (!vec[i]) > goto out_free; > + } > > mlog(0, "Allocated DLM hash pagevec; %d pages (%lu expected), %lu buckets per page\n", > pages, (unsigned long)DLM_HASH_PAGES, > diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c > index 93eff38fdadd..aee3b4c56dcc 100644 > --- a/fs/ocfs2/dlm/dlmmaster.c > +++ b/fs/ocfs2/dlm/dlmmaster.c > @@ -2548,7 +2548,7 @@ static int dlm_migrate_lockres(struct dlm_ctxt *dlm, > > /* preallocate up front. if this fails, abort */ > ret = -ENOMEM; > - mres = (struct dlm_migratable_lockres *) __get_free_page(GFP_NOFS); > + mres = kmalloc(PAGE_SIZE, GFP_NOFS); > if (!mres) { > mlog_errno(ret); > goto leave; > @@ -2725,8 +2725,7 @@ static int dlm_migrate_lockres(struct dlm_ctxt *dlm, > if (wake) > wake_up(&res->wq); > > - if (mres) > - free_page((unsigned long)mres); > + kfree(mres); > > dlm_put(dlm); > > diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c > index 128872bd945d..9b97bf73df22 100644 > --- a/fs/ocfs2/dlm/dlmrecovery.c > +++ b/fs/ocfs2/dlm/dlmrecovery.c > @@ -837,7 +837,7 @@ int dlm_request_all_locks_handler(struct o2net_msg *msg, u32 len, void *data, > } > > /* this will get freed by dlm_request_all_locks_worker */ > - buf = (char *) __get_free_page(GFP_NOFS); > + buf = kmalloc(PAGE_SIZE, GFP_NOFS); > if (!buf) { > kfree(item); > dlm_put(dlm); > @@ -933,7 +933,7 @@ static void dlm_request_all_locks_worker(struct dlm_work_item *item, void *data) > } > } > leave: > - free_page((unsigned long)data); > + kfree(data); > } > > > > -- > 2.53.0 > -- Jan Kara <[email protected]> SUSE Labs, CR