The function bitmap_scnprintf_len() is currently not used, but the returned
value is 4 times larger than needed. This value is also only a good upper
bound. Which should be mentioned in the comment.The correct number of chars needed for the buffer, exluding any new line and
terminating zero is:int bitmap_scnprintf_len(int len)
{
return /* complete hunks with commas */
((len / CHUNKSZ) * 9)
/* partial hunk, 4 bits in one char */
+ (((len % CHUNKSZ) + 3) / 4)
/* one less comma, if no partial hunk */
- !(len % CHUNKSZ);
}Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Cc: Mike Travis <travis@sgi.com>
Cc: Paul Jackson <pj@sgi.com>---
lib/bitmap.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)diff --git a/lib/bitmap.c b/lib/bitmap.c
index a6939e1..47e6f0f 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -325,7 +325,7 @@ int bitmap_scnprintf_len(unsigned int len)
/* we need 9 chars per word for 32 bit words (8 hexdigits + sep/null) */
int bitslen = ALIGN(len, CHUNKSZ);
int wordlen = CHUNKSZ / 4;
- int buflen = (bitslen / wordlen) * (wordlen + 1) * sizeof(char);
+ int buflen = (bitslen / CHUNKSZ) * (wordlen + 1);return buflen;
}
--
1.5.4--
How about we just remove that function?
--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.940.382.4214
--
I am afraid no. See:
include/linux/cpumask.h:292: return bitmap_scnprintf_len(len);
--
Good point.
Then how about we also remove from cpumask.h:
#define cpumask_scnprintf_len(len) \
__cpumask_scnprintf_len((len))
static inline int __cpumask_scnprintf_len(int len)
{
return bitmap_scnprintf_len(len);
}--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.940.382.4214
--
That's fine with me. A later version of the patch did have
the function removed but it didn't get picked up. The other
changes there were to use function pointers instead of the
flag variable to select list or mask output format, and the
addition of mask variants for the cpu/{present,possible,
online,system} map outputs.I'll dig that one back up and resubmit it.
Thanks,
Mike
--
I'm fine with this too. I did a hasty audit of cpumask_scnprintf()
users, and no one can use these functions.But one last note to the cpumask_scnprintf_len() macro: this macro
should really not have an argument, it should be forced to NR_CPUS.
Else a user could have a too small buffer for the call to
cpumask_scnprintf(), which always calls bitmap_scnprintf() with
Fine.Regards.
--
| FUJITA Tomonori | Re: Linux 2.6.25-rc4 |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Jan Engelhardt | intel iommu (Re: -mm merge plans for 2.6.23) |
| Artem Bityutskiy | [PATCH 11/44 take 2] [UBI] allocation unit header |
git: | |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Natalie Protasevich | [BUG] New Kernel Bugs |
