seq: Convert seq_puts and seq_putc to return void
Subsystems (10)
cover seq: Convert seq_puts and seq_putc to return void
These are error prone, so return void adn use seq_has_overflowed instead
Joe Perches (2):
seq_puts: Convert to return void and convert uses too.
seq_putc: Convert to return void and convert uses too.
drivers/char/ipmi/ipmi_msghandler.c | 4 +- drivers/parisc/ccio-dma.c | 7 +- drivers/regulator/dbx500-prcmu.c | 21 ++---- drivers/usb/gadget/udc/goku_udc.c | 81 +++++++++++----------- drivers/watchdog/bcm_kona_wdt.c | 43 +++++++----- fs/seq_file.c | 26 +++---- include/linux/seq_file.h | 4 +- ipc/util.c | 6 +- .../netfilter/nf_conntrack_l3proto_ipv4_compat.c | 4 +- net/netfilter/nf_conntrack_expect.c | 4 +- 10 files changed, 105 insertions(+), 95 deletions(-)
Signature · 1 line
2.1.2
PATCH 1/2 seq_puts: Convert to return void and convert uses too.
Using the return value of seq_puts is error-prone, so make it return void instead.
Use seq_has_overflowed where appropriate instead of the old return value.
--- drivers/parisc/ccio-dma.c | 7 ++-- drivers/regulator/dbx500-prcmu.c | 21 ++++------ drivers/usb/gadget/udc/goku_udc.c | 81 ++++++++++++++++++++------------------- drivers/watchdog/bcm_kona_wdt.c | 43 ++++++++++++--------- fs/seq_file.c | 15 ++++---- include/linux/seq_file.h | 2 +- ipc/util.c | 6 ++- 7 files changed, 89 insertions(+), 86 deletions(-)
drivers/parisc/ccio-dma.c +3 -4
@@ -1101,7 +1101,6 @@ static const struct file_operations ccio_proc_info_fops = {static int ccio_proc_bitmap_info (struct seq_file *m,void *p) { -int len =0 ;struct ioc *ioc = ioc_list;while (ioc !=NULL ) {
@@ -1110,11 +1109,11 @@ static int ccio_proc_bitmap_info(struct seq_file *m, void *p)for (j =0 ; j < (ioc->res_size /sizeof (u32)); j++) {if ((j &7 ) ==0 ) - len +=seq_puts (m,"\n " ); - len +=seq_printf (m,"%08x" , *res_ptr); +seq_puts (m,"\n " ); +seq_printf (m,"%08x" , *res_ptr); res_ptr++; } - len +=seq_puts (m,"\n\n" ); +seq_puts (m,"\n\n" ); ioc = ioc->next;break ;/* XXX - remove me */ }
drivers/regulator/dbx500-prcmu.c +7 -14
@@ -129,14 +129,8 @@ static int ux500_regulator_status_print(struct seq_file *s, void *p)int i;/* print dump header */ - err =seq_puts (s,"ux500-regulator status:\n" ); -if (err <0 ) -dev_err (dev,"seq_puts overflow\n" ); - - err =seq_printf (s,"%31s : %8s : %8s\n" ,"current" , -"before" ,"after" ); -if (err <0 ) -dev_err (dev,"seq_printf overflow\n" ); +seq_puts (s,"ux500-regulator status:\n" ); +seq_printf (s,"%31s : %8s : %8s\n" ,"current" ,"before" ,"after" );for (i =0 ; i < rdebug.num_regulators; i++) {struct dbx500_regulator_info *info;
@@ -144,12 +138,11 @@ static int ux500_regulator_status_print(struct seq_file *s, void *p) info = &rdebug.regulator_array[i];/* print status */ - err =seq_printf (s,"%20s : %8s : %8s : %8s\n" , info->desc.name, - info->is_enabled ?"enabled" :"disabled" , - rdebug.state_before_suspend[i] ?"enabled" :"disabled" , - rdebug.state_after_suspend[i] ?"enabled" :"disabled" ); -if (err <0 ) -dev_err (dev,"seq_printf overflow\n" ); +seq_printf (s,"%20s : %8s : %8s : %8s\n" , + info->desc.name, + info->is_enabled ?"enabled" :"disabled" , + rdebug.state_before_suspend[i] ?"enabled" :"disabled" , + rdebug.state_after_suspend[i] ?"enabled" :"disabled" ); }return 0 ;
drivers/usb/gadget/udc/goku_udc.c +42 -39
96 lines not on this page · raw message
drivers/watchdog/bcm_kona_wdt.c +24 -19
58 lines not on this page · raw message
fs/seq_file.c +8 -7
@@ -683,16 +683,17 @@ int seq_putc(struct seq_file *m, char c) }EXPORT_SYMBOL (seq_putc); -int seq_puts (struct seq_file *m,const char *s) +void seq_puts (struct seq_file *m,const char *s) {int len =strlen (s); -if (m->count + len < m->size) { -memcpy (m->buf + m->count, s, len); - m->count += len; -return 0 ; + +if (m->count + len >= m->size) { +seq_set_overflow (m); +return ; } -seq_set_overflow (m); -return -1 ; + +memcpy (m->buf + m->count, s, len); + m->count += len; }EXPORT_SYMBOL (seq_puts);
include/linux/seq_file.h +1 -1
@@ -116,7 +116,7 @@ loff_t seq_lseek(struct file *, loff_t, int);int seq_release (struct inode *,struct file *);int seq_escape (struct seq_file *,const char *,const char *);int seq_putc (struct seq_file *m,char c); -int seq_puts (struct seq_file *m,const char *s); +void seq_puts (struct seq_file *m,const char *s);int seq_write (struct seq_file *seq,const void *data,size_t len); __printf(2, 3) int seq_printf(struct seq_file *, const char *, ...);
ipc/util.c +4 -2
@@ -837,8 +837,10 @@ static int sysvipc_proc_show(struct seq_file *s, void *it)struct ipc_proc_iter *iter = s->private;struct ipc_proc_iface *iface = iter->iface; -if (it ==SEQ_START_TOKEN ) -return seq_puts (s, iface->header); +if (it ==SEQ_START_TOKEN ) { +seq_puts (s, iface->header); +return seq_has_overflowed (s); + }return iface->show (s, it); }
Signature · 6 lines
2.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH -next 1/2] seq_puts: Convert to return void and convert uses too.
Quoted 2 lines · Joe Perches
Using the return value of
seq_putsis error-prone, so make it return void instead.
Re: [PATCH -next 1/2] seq_puts: Convert to return void and convert uses too.
In reply to Joe Perchesipc/util.c static int sysvipc_proc_show(struct seq_file *s, void *it) · line 842
Quoted 13 lines · Joe Perches
ipc/util.c +3
-2@@ -837,8 +837,10 @@ static int sysvipc_proc_show(struct seq_file *s, void *it)struct ipc_proc_iter *iter = s->private;struct ipc_proc_iface *iface = iter->iface; -if (it ==SEQ_START_TOKEN ) -return seq_puts (s, iface->header); +if (it ==SEQ_START_TOKEN ) { +seq_puts (s, iface->header); +return seq_has_overflowed (s);
It should return 0. The overflow is detected by traverse() that is called from seq_read(). If the overflow happens, the size of the buffer is increased and show() is called again.
ipc/util.c static int sysvipc_proc_show(struct seq_file *s, void *it) · line 845
Quoted 3 lines
ipc/util.c +1
-0+ }return iface->show (s, it);
This should stay as is. It seems that the show() function might also return negative value in case of some other failure. See the error handling of "error = m->op->show(m, p);" in traverse() in fs/seq_file.c
The rest of the patch looks fine.
Best Regards,
Petr
PATCH 2/2 seq_putc: Convert to return void and convert uses too.
In reply to Joe PerchesUsing the return value of seq_putc is error-prone, so make it return void instead.
Reverse the logic in seq_putc to make it like seq_puts.
--- drivers/char/ipmi/ipmi_msghandler.c | 4 +++- fs/seq_file.c | 11 ++++++----- include/linux/seq_file.h | 2 +- net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | 4 +++- net/netfilter/nf_conntrack_expect.c | 4 +++- 5 files changed, 16 insertions(+), 9 deletions(-)
drivers/char/ipmi/ipmi_msghandler.c +3 -1
@@ -1953,7 +1953,9 @@ static int smi_ipmb_proc_show(struct seq_file *m, void *v)seq_printf (m,"%x" , intf->channels[0 ].address);for (i =1 ; i <IPMI_MAX_CHANNELS ; i++)seq_printf (m," %x" , intf->channels[i].address); -return seq_putc (m,'\n' ); +seq_putc (m,'\n' ); + +return 0 ; }static int smi_ipmb_proc_open (struct inode *inode,struct file *file)
fs/seq_file.c +6 -5
@@ -673,13 +673,14 @@ int seq_open_private(struct file *filp, const struct seq_operations *ops, }EXPORT_SYMBOL (seq_open_private); -int seq_putc (struct seq_file *m,char c) +void seq_putc (struct seq_file *m,char c) { -if (m->count < m->size) { - m->buf[m->count++] = c; -return 0 ; +if (m->count >= m->size) { +seq_set_overflow (m); +return ; } -return -1 ; + + m->buf[m->count++] = c; }EXPORT_SYMBOL (seq_putc);
include/linux/seq_file.h +1 -1
@@ -115,7 +115,7 @@ ssize_t seq_read(struct file *, char __user *, size_t, loff_t *);loff_t seq_lseek (struct file *,loff_t ,int );int seq_release (struct inode *,struct file *);int seq_escape (struct seq_file *,const char *,const char *); -int seq_putc (struct seq_file *m,char c); +void seq_putc (struct seq_file *m,char c);void seq_puts (struct seq_file *m,const char *s);int seq_write (struct seq_file *seq,const void *data,size_t len);
net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c +3 -1
@@ -300,7 +300,9 @@ static int exp_seq_show(struct seq_file *s, void *v)__nf_ct_l3proto_find (exp->tuple.src.l3num),__nf_ct_l4proto_find (exp->tuple.src.l3num, exp->tuple.dst.protonum)); -return seq_putc (s,'\n' ); +seq_putc (s,'\n' ); + +return 0 ; }static const struct seq_operations exp_seq_ops = {
net/netfilter/nf_conntrack_expect.c +3 -1
@@ -561,7 +561,9 @@ static int exp_seq_show(struct seq_file *s, void *v) helper->expect_policy[expect->class].name); } -return seq_putc (s,'\n' ); +seq_putc (s,'\n' ); + +return 0 ; }static const struct seq_operations exp_seq_ops = {
Signature · 9 lines
2.1.2 ------------------------------------------------------------------------------ Comprehensive Server Monitoring with Site24x7. Monitor 10 servers for $9/Month. Get alerted through email, SMS, voice calls or mobile push notifications. Take corrective actions from your mobile device. http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
Re: [PATCH -next 2/2] seq_putc: Convert to return void and convert uses too.
Quoted 6 lines · Joe Perches
Using the return value of
seq_putcis error-prone, so make it return void instead.Reverse the logic in
seq_putcto make it likeseq_puts.Signed-off-by Joe Perches <[email protected]>
The changes are correct. The show() functions should return 0 even when there is an overflow. They are called by traverse() from seq_read() that might increase the buffer size and try again.
Best Regards,
Petr
Re: [PATCH -next 2/2] seq_putc: Convert to return void and convert uses too.
Quoted 6 lines · Petr Mladek
Quoted 5 lines · Joe Perches
Using the return value of
seq_putcis error-prone, so make it return void instead.Reverse the logic in
seq_putcto make it likeseq_puts.
Quoted 7 lines
Quoted 1 line
Signed-off-by Joe Perches <[email protected]>Reviewed-by Petr Mladek <[email protected]>The changes are correct. The
show()functions should return 0 even when there is an overflow. They are called bytraverse()fromseq_read()that might increase the buffer size and try again.
Just in case you need this for the netfilter chunks:
Thanks.
Re: [PATCH -next 2/2] seq_putc: Convert to return void and convert uses too.
In reply to Joe PerchesOk by me for the IPMI part.
Quoted 86 lines · Joe Perches
Using the return value of
seq_putcis error-prone, so make it return void instead.Reverse the logic in
seq_putcto make it likeseq_puts.Signed-off-by Joe Perches <[email protected]>--- drivers/char/ipmi/ipmi_msghandler.c | 4 +++- fs/seq_file.c | 11 ++++++----- include/linux/seq_file.h | 2 +- net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | 4 +++- net/netfilter/nf_conntrack_expect.c | 4 +++- 5 files changed, 16 insertions(+), 9 deletions(-)drivers/char/ipmi/ipmi_msghandler.c +3
-1@@ -1953,7 +1953,9 @@ static int smi_ipmb_proc_show(struct seq_file *m, void *v)seq_printf (m,"%x" , intf->channels[0 ].address);for (i =1 ; i <IPMI_MAX_CHANNELS ; i++)seq_printf (m," %x" , intf->channels[i].address); -return seq_putc (m,'\n' ); +seq_putc (m,'\n' ); + +return 0 ; }static int smi_ipmb_proc_open (struct inode *inode,struct file *file)fs/seq_file.c +6
-5@@ -673,13 +673,14 @@ int seq_open_private(struct file *filp, const struct seq_operations *ops, }EXPORT_SYMBOL (seq_open_private); -int seq_putc (struct seq_file *m,char c) +void seq_putc (struct seq_file *m,char c) { -if (m->count < m->size) { - m->buf[m->count++] = c; -return 0 ; +if (m->count >= m->size) { +seq_set_overflow (m); +return ; } -return -1 ; + + m->buf[m->count++] = c; }EXPORT_SYMBOL (seq_putc);include/linux/seq_file.h +1
-1@@ -115,7 +115,7 @@ ssize_t seq_read(struct file *, char __user *, size_t, loff_t *);loff_t seq_lseek (struct file *,loff_t ,int );int seq_release (struct inode *,struct file *);int seq_escape (struct seq_file *,const char *,const char *); -int seq_putc (struct seq_file *m,char c); +void seq_putc (struct seq_file *m,char c);void seq_puts (struct seq_file *m,const char *s);int seq_write (struct seq_file *seq,const void *data,size_t len);net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c +3
-1@@ -300,7 +300,9 @@ static int exp_seq_show(struct seq_file *s, void *v)__nf_ct_l3proto_find (exp->tuple.src.l3num),__nf_ct_l4proto_find (exp->tuple.src.l3num, exp->tuple.dst.protonum)); -return seq_putc (s,'\n' ); +seq_putc (s,'\n' ); + +return 0 ; }static const struct seq_operations exp_seq_ops = {net/netfilter/nf_conntrack_expect.c +0
-0
net/netfilter/nf_conntrack_expect.c static int exp_seq_show(struct seq_file *s, void *v) · line 569
Quoted 10 lines
net/netfilter/nf_conntrack_expect.c +3
-1@@ -561,7 +561,9 @@ static int exp_seq_show(struct seq_file *s, void *v) helper->expect_policy[expect->class].name); } -return seq_putc (s,'\n' ); +seq_putc (s,'\n' ); + +return 0 ; }static const struct seq_operations exp_seq_ops = {
------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications. Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk