* [PATCH] fs/coda: get rid of CODA_ALLOC() @ 2019-02-14 6:58 Dan Carpenter 2019-02-14 7:04 ` Julia Lawall 0 siblings, 1 reply; 6+ messages in thread From: Dan Carpenter @ 2019-02-14 6:58 UTC (permalink / raw) To: Jan Harkes; +Cc: coda, codalist, linux-kernel, kernel-janitors These days we have kvzalloc() so we can delete CODA_ALLOC(). I made a couple related changes in coda_psdev_write(). First, I added some error handling to avoid a NULL dereference if the allocation failed. Second, I used kvmalloc() instead of kvzalloc() because we copy over the memory on the next line so there is no need to zero it first. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> --- fs/coda/coda_linux.h | 10 ---------- fs/coda/psdev.c | 6 +++++- fs/coda/upcall.c | 4 ++-- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/fs/coda/coda_linux.h b/fs/coda/coda_linux.h index 126155cadfa9..1ea9521e79d7 100644 --- a/fs/coda/coda_linux.h +++ b/fs/coda/coda_linux.h @@ -63,16 +63,6 @@ unsigned short coda_flags_to_cflags(unsigned short); void coda_sysctl_init(void); void coda_sysctl_clean(void); -#define CODA_ALLOC(ptr, cast, size) do { \ - if (size < PAGE_SIZE) \ - ptr = kzalloc((unsigned long) size, GFP_KERNEL); \ - else \ - ptr = (cast)vzalloc((unsigned long) size); \ - if (!ptr) \ - pr_warn("kernel malloc returns 0 at %s:%d\n", __FILE__, __LINE__); \ -} while (0) - - #define CODA_FREE(ptr, size) kvfree((ptr)) /* inode to cnode access functions */ diff --git a/fs/coda/psdev.c b/fs/coda/psdev.c index c5234c21b539..49d44a485c9a 100644 --- a/fs/coda/psdev.c +++ b/fs/coda/psdev.c @@ -124,7 +124,11 @@ static ssize_t coda_psdev_write(struct file *file, const char __user *buf, hdr.opcode, hdr.unique); nbytes = size; } - CODA_ALLOC(dcbuf, union outputArgs *, nbytes); + dcbuf = kvmalloc(nbytes, GFP_KERNEL); + if (!dcbuf) { + retval = -ENOMEM; + goto out; + } if (copy_from_user(dcbuf, buf, nbytes)) { CODA_FREE(dcbuf, nbytes); retval = -EFAULT; diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c index 1175a1722411..203f029bcdc3 100644 --- a/fs/coda/upcall.c +++ b/fs/coda/upcall.c @@ -46,7 +46,7 @@ static void *alloc_upcall(int opcode, int size) { union inputArgs *inp; - CODA_ALLOC(inp, union inputArgs *, size); + inp = kvzalloc(size, GFP_KERNEL); if (!inp) return ERR_PTR(-ENOMEM); @@ -743,7 +743,7 @@ static int coda_upcall(struct venus_comm *vcp, sig_req = kmalloc(sizeof(struct upc_req), GFP_KERNEL); if (!sig_req) goto exit; - CODA_ALLOC((sig_req->uc_data), char *, sizeof(struct coda_in_hdr)); + sig_req->uc_data = kvzalloc(sizeof(struct coda_in_hdr), GFP_KERNEL); if (!sig_req->uc_data) { kfree(sig_req); goto exit; -- 2.17.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] fs/coda: get rid of CODA_ALLOC() 2019-02-14 6:58 [PATCH] fs/coda: get rid of CODA_ALLOC() Dan Carpenter @ 2019-02-14 7:04 ` Julia Lawall 2019-02-14 7:37 ` Dan Carpenter ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Julia Lawall @ 2019-02-14 7:04 UTC (permalink / raw) To: Dan Carpenter; +Cc: Jan Harkes, coda, codalist, linux-kernel, kernel-janitors On Thu, 14 Feb 2019, Dan Carpenter wrote: > These days we have kvzalloc() so we can delete CODA_ALLOC(). Maybe it would be better to get rid fo CODA_FREE as well? julia > > I made a couple related changes in coda_psdev_write(). First, I > added some error handling to avoid a NULL dereference if the allocation > failed. Second, I used kvmalloc() instead of kvzalloc() because we > copy over the memory on the next line so there is no need to zero it > first. > > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> > --- > fs/coda/coda_linux.h | 10 ---------- > fs/coda/psdev.c | 6 +++++- > fs/coda/upcall.c | 4 ++-- > 3 files changed, 7 insertions(+), 13 deletions(-) > > diff --git a/fs/coda/coda_linux.h b/fs/coda/coda_linux.h > index 126155cadfa9..1ea9521e79d7 100644 > --- a/fs/coda/coda_linux.h > +++ b/fs/coda/coda_linux.h > @@ -63,16 +63,6 @@ unsigned short coda_flags_to_cflags(unsigned short); > void coda_sysctl_init(void); > void coda_sysctl_clean(void); > > -#define CODA_ALLOC(ptr, cast, size) do { \ > - if (size < PAGE_SIZE) \ > - ptr = kzalloc((unsigned long) size, GFP_KERNEL); \ > - else \ > - ptr = (cast)vzalloc((unsigned long) size); \ > - if (!ptr) \ > - pr_warn("kernel malloc returns 0 at %s:%d\n", __FILE__, __LINE__); \ > -} while (0) > - > - > #define CODA_FREE(ptr, size) kvfree((ptr)) > > /* inode to cnode access functions */ > diff --git a/fs/coda/psdev.c b/fs/coda/psdev.c > index c5234c21b539..49d44a485c9a 100644 > --- a/fs/coda/psdev.c > +++ b/fs/coda/psdev.c > @@ -124,7 +124,11 @@ static ssize_t coda_psdev_write(struct file *file, const char __user *buf, > hdr.opcode, hdr.unique); > nbytes = size; > } > - CODA_ALLOC(dcbuf, union outputArgs *, nbytes); > + dcbuf = kvmalloc(nbytes, GFP_KERNEL); > + if (!dcbuf) { > + retval = -ENOMEM; > + goto out; > + } > if (copy_from_user(dcbuf, buf, nbytes)) { > CODA_FREE(dcbuf, nbytes); > retval = -EFAULT; > diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c > index 1175a1722411..203f029bcdc3 100644 > --- a/fs/coda/upcall.c > +++ b/fs/coda/upcall.c > @@ -46,7 +46,7 @@ static void *alloc_upcall(int opcode, int size) > { > union inputArgs *inp; > > - CODA_ALLOC(inp, union inputArgs *, size); > + inp = kvzalloc(size, GFP_KERNEL); > if (!inp) > return ERR_PTR(-ENOMEM); > > @@ -743,7 +743,7 @@ static int coda_upcall(struct venus_comm *vcp, > sig_req = kmalloc(sizeof(struct upc_req), GFP_KERNEL); > if (!sig_req) goto exit; > > - CODA_ALLOC((sig_req->uc_data), char *, sizeof(struct coda_in_hdr)); > + sig_req->uc_data = kvzalloc(sizeof(struct coda_in_hdr), GFP_KERNEL); > if (!sig_req->uc_data) { > kfree(sig_req); > goto exit; > -- > 2.17.1 > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] fs/coda: get rid of CODA_ALLOC() 2019-02-14 7:04 ` Julia Lawall @ 2019-02-14 7:37 ` Dan Carpenter 2019-02-14 7:48 ` Dan Carpenter 2019-02-14 8:38 ` [PATCH 2] coda: get rid of CODA_FREE() Dan Carpenter 2 siblings, 0 replies; 6+ messages in thread From: Dan Carpenter @ 2019-02-14 7:37 UTC (permalink / raw) To: Julia Lawall; +Cc: Jan Harkes, coda, codalist, linux-kernel, kernel-janitors On Thu, Feb 14, 2019 at 08:04:43AM +0100, Julia Lawall wrote: > > > On Thu, 14 Feb 2019, Dan Carpenter wrote: > > > These days we have kvzalloc() so we can delete CODA_ALLOC(). > > Maybe it would be better to get rid fo CODA_FREE as well? I feel like that's a separate issue. The CODA_FREE() macro already uses kvfree() so it doesn't bother me as much as the CODA_ALLOC() macro. regards, dan carpenter ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] fs/coda: get rid of CODA_ALLOC() 2019-02-14 7:04 ` Julia Lawall 2019-02-14 7:37 ` Dan Carpenter @ 2019-02-14 7:48 ` Dan Carpenter 2019-02-14 8:38 ` [PATCH 2] coda: get rid of CODA_FREE() Dan Carpenter 2 siblings, 0 replies; 6+ messages in thread From: Dan Carpenter @ 2019-02-14 7:48 UTC (permalink / raw) To: Julia Lawall; +Cc: Jan Harkes, coda, codalist, linux-kernel, kernel-janitors On Thu, Feb 14, 2019 at 08:04:43AM +0100, Julia Lawall wrote: > > > On Thu, 14 Feb 2019, Dan Carpenter wrote: > > > These days we have kvzalloc() so we can delete CODA_ALLOC(). > > Maybe it would be better to get rid fo CODA_FREE as well? > Actually, you're right. CODA_FREE() is especially weird without a CODA_ALLOC(). But let me send that as a second patch. regards, dan carpenter ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2] coda: get rid of CODA_FREE() 2019-02-14 7:04 ` Julia Lawall 2019-02-14 7:37 ` Dan Carpenter 2019-02-14 7:48 ` Dan Carpenter @ 2019-02-14 8:38 ` Dan Carpenter 2019-02-14 17:10 ` Jan Harkes 2 siblings, 1 reply; 6+ messages in thread From: Dan Carpenter @ 2019-02-14 8:38 UTC (permalink / raw) To: Jan Harkes; +Cc: coda, codalist, linux-kernel, kernel-janitors, Julia Lawall The CODA_FREE() macro just calls kvfree(). We can call that directly instead. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> --- fs/coda/coda_linux.h | 2 -- fs/coda/psdev.c | 8 ++++---- fs/coda/upcall.c | 36 ++++++++++++++++++------------------ 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/fs/coda/coda_linux.h b/fs/coda/coda_linux.h index 1ea9521e79d7..517a363245c9 100644 --- a/fs/coda/coda_linux.h +++ b/fs/coda/coda_linux.h @@ -63,8 +63,6 @@ unsigned short coda_flags_to_cflags(unsigned short); void coda_sysctl_init(void); void coda_sysctl_clean(void); -#define CODA_FREE(ptr, size) kvfree((ptr)) - /* inode to cnode access functions */ static inline struct coda_inode_info *ITOC(struct inode *inode) diff --git a/fs/coda/psdev.c b/fs/coda/psdev.c index 49d44a485c9a..decfbfda6bc4 100644 --- a/fs/coda/psdev.c +++ b/fs/coda/psdev.c @@ -130,7 +130,7 @@ static ssize_t coda_psdev_write(struct file *file, const char __user *buf, goto out; } if (copy_from_user(dcbuf, buf, nbytes)) { - CODA_FREE(dcbuf, nbytes); + kvfree(dcbuf); retval = -EFAULT; goto out; } @@ -138,7 +138,7 @@ static ssize_t coda_psdev_write(struct file *file, const char __user *buf, /* what downcall errors does Venus handle ? */ error = coda_downcall(vcp, hdr.opcode, dcbuf); - CODA_FREE(dcbuf, nbytes); + kvfree(dcbuf); if (error) { pr_warn("%s: coda_downcall error: %d\n", __func__, error); @@ -261,7 +261,7 @@ static ssize_t coda_psdev_read(struct file * file, char __user * buf, goto out; } - CODA_FREE(req->uc_data, sizeof(struct coda_in_hdr)); + kvfree(req->uc_data); kfree(req); out: mutex_unlock(&vcp->vc_mutex); @@ -323,7 +323,7 @@ static int coda_psdev_release(struct inode * inode, struct file * file) /* Async requests need to be freed here */ if (req->uc_flags & CODA_REQ_ASYNC) { - CODA_FREE(req->uc_data, sizeof(struct coda_in_hdr)); + kvfree(req->uc_data); kfree(req); continue; } diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c index 203f029bcdc3..9fa12118f1bc 100644 --- a/fs/coda/upcall.c +++ b/fs/coda/upcall.c @@ -85,7 +85,7 @@ int venus_rootfid(struct super_block *sb, struct CodaFid *fidp) if (!error) *fidp = outp->coda_root.VFid; - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -104,7 +104,7 @@ int venus_getattr(struct super_block *sb, struct CodaFid *fid, if (!error) *attr = outp->coda_getattr.attr; - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -123,7 +123,7 @@ int venus_setattr(struct super_block *sb, struct CodaFid *fid, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -153,7 +153,7 @@ int venus_lookup(struct super_block *sb, struct CodaFid *fid, *type = outp->coda_lookup.vtype; } - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -173,7 +173,7 @@ int venus_close(struct super_block *sb, struct CodaFid *fid, int flags, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -194,7 +194,7 @@ int venus_open(struct super_block *sb, struct CodaFid *fid, if (!error) *fh = outp->coda_open_by_fd.fh; - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -224,7 +224,7 @@ int venus_mkdir(struct super_block *sb, struct CodaFid *dirfid, *newfid = outp->coda_mkdir.VFid; } - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -262,7 +262,7 @@ int venus_rename(struct super_block *sb, struct CodaFid *old_fid, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -295,7 +295,7 @@ int venus_create(struct super_block *sb, struct CodaFid *dirfid, *newfid = outp->coda_create.VFid; } - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -318,7 +318,7 @@ int venus_rmdir(struct super_block *sb, struct CodaFid *dirfid, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -340,7 +340,7 @@ int venus_remove(struct super_block *sb, struct CodaFid *dirfid, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -370,7 +370,7 @@ int venus_readlink(struct super_block *sb, struct CodaFid *fid, *(buffer + retlen) = '\0'; } - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -398,7 +398,7 @@ int venus_link(struct super_block *sb, struct CodaFid *fid, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -433,7 +433,7 @@ int venus_symlink(struct super_block *sb, struct CodaFid *fid, error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -449,7 +449,7 @@ int venus_fsync(struct super_block *sb, struct CodaFid *fid) inp->coda_fsync.VFid = *fid; error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -467,7 +467,7 @@ int venus_access(struct super_block *sb, struct CodaFid *fid, int mask) error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -543,7 +543,7 @@ int venus_pioctl(struct super_block *sb, struct CodaFid *fid, } exit: - CODA_FREE(inp, insize); + kvfree(inp); return error; } @@ -565,7 +565,7 @@ int venus_statfs(struct dentry *dentry, struct kstatfs *sfs) sfs->f_ffree = outp->coda_statfs.stat.f_ffree; } - CODA_FREE(inp, insize); + kvfree(inp); return error; } -- 2.17.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2] coda: get rid of CODA_FREE() 2019-02-14 8:38 ` [PATCH 2] coda: get rid of CODA_FREE() Dan Carpenter @ 2019-02-14 17:10 ` Jan Harkes 0 siblings, 0 replies; 6+ messages in thread From: Jan Harkes @ 2019-02-14 17:10 UTC (permalink / raw) To: Dan Carpenter; +Cc: linux-kernel, kernel-janitors, Julia Lawall On Thu, Feb 14, 2019 at 11:38:22AM +0300, Dan Carpenter wrote: > The CODA_FREE() macro just calls kvfree(). We can call that directly > instead. Added these to my (getting long) list of things that I really should get upstreamed sometime soon now. Jan ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-02-14 17:28 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-02-14 6:58 [PATCH] fs/coda: get rid of CODA_ALLOC() Dan Carpenter 2019-02-14 7:04 ` Julia Lawall 2019-02-14 7:37 ` Dan Carpenter 2019-02-14 7:48 ` Dan Carpenter 2019-02-14 8:38 ` [PATCH 2] coda: get rid of CODA_FREE() Dan Carpenter 2019-02-14 17:10 ` Jan Harkes
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox