Messages in this thread | | | Date | Mon, 13 Oct 2008 10:38:06 +0400 | From | Alexey Dobriyan <> | Subject | Re: [PATCH 1/4] seq_file: don't call bitmap_scnprintf_len() |
| |
On Sun, Oct 12, 2008 at 05:29:17PM +0800, Lai Jiangshan wrote: > "m->count + len < m->size" is true commonly, so bitmap_scnprintf() > is commonly called. this fix saves a call to bitmap_scnprintf_len().
This saves a call if seq buffer is already full which is not a common situation, so you're optimising for rare situations and adding branch for common ones.
> --- a/fs/seq_file.c > +++ b/fs/seq_file.c > @@ -452,17 +452,18 @@ int seq_dentry(struct seq_file *m, struct dentry *dentry, char *esc) > > int seq_bitmap(struct seq_file *m, unsigned long *bits, unsigned int nr_bits) > { > - size_t len = bitmap_scnprintf_len(nr_bits); > - > - if (m->count + len < m->size) { > - bitmap_scnprintf(m->buf + m->count, m->size - m->count, > - bits, nr_bits); > - m->count += len; > - return 0; > + if (m->count < m->size) { > + int len = bitmap_scnprintf(m->buf + m->count, > + m->size - m->count, bits, nr_bits); > + if (m->count + len < m->size) { > + m->count += len; > + return 0; > + } > } > m->count = m->size; > return -1; > } > +EXPORT_SYMBOL(seq_bitmap);
Modular users, where are they?
| |