diff options
Diffstat (limited to 'lib/bitmap.c')
| -rw-r--r-- | lib/bitmap.c | 22 | 
1 files changed, 8 insertions, 14 deletions
| diff --git a/lib/bitmap.c b/lib/bitmap.c index 2fd07f6df0b8..eead55aa7170 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -13,6 +13,7 @@  #include <linux/bitops.h>  #include <linux/bug.h>  #include <linux/kernel.h> +#include <linux/mm.h>  #include <linux/slab.h>  #include <linux/string.h>  #include <linux/uaccess.h> @@ -36,11 +37,6 @@   * carefully filter out these unused bits from impacting their   * results.   * - * These operations actually hold to a slightly stronger rule: - * if you don't input any bitmaps to these ops that have some - * unused bits set, then they won't output any set unused bits - * in output bitmaps. - *   * The byte ordering of bitmaps is more natural on little   * endian architectures.  See the big-endian headers   * include/asm-ppc64/bitops.h and include/asm-s390/bitops.h @@ -466,20 +462,18 @@ EXPORT_SYMBOL(bitmap_parse_user);   * ranges if list is specified or hex digits grouped into comma-separated   * sets of 8 digits/set. Returns the number of characters written to buf.   * - * It is assumed that @buf is a pointer into a PAGE_SIZE area and that - * sufficient storage remains at @buf to accommodate the - * bitmap_print_to_pagebuf() output. + * It is assumed that @buf is a pointer into a PAGE_SIZE, page-aligned + * area and that sufficient storage remains at @buf to accommodate the + * bitmap_print_to_pagebuf() output. Returns the number of characters + * actually printed to @buf, excluding terminating '\0'.   */  int bitmap_print_to_pagebuf(bool list, char *buf, const unsigned long *maskp,  			    int nmaskbits)  { -	ptrdiff_t len = PTR_ALIGN(buf + PAGE_SIZE - 1, PAGE_SIZE) - buf; -	int n = 0; +	ptrdiff_t len = PAGE_SIZE - offset_in_page(buf); -	if (len > 1) -		n = list ? scnprintf(buf, len, "%*pbl\n", nmaskbits, maskp) : -			   scnprintf(buf, len, "%*pb\n", nmaskbits, maskp); -	return n; +	return list ? scnprintf(buf, len, "%*pbl\n", nmaskbits, maskp) : +		      scnprintf(buf, len, "%*pb\n", nmaskbits, maskp);  }  EXPORT_SYMBOL(bitmap_print_to_pagebuf); | 
