lkml.org 
[lkml]   [2012]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 2/9] qnx4fs: use memweight()
    Date
    Use memweight() to count the total number of bits clear in memory area.

    Note that this memweight() call can't be replaced with a single
    bitmap_weight() call, although the pointer to the memory area is
    aligned to long-word boundary. Because the size of the memory area
    may not be a multiple of BITS_PER_LONG, then it returns wrong value on
    big-endian architecture.

    Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
    Acked-by: Anders Larsen <al@alarsen.net>
    ---
    v3: add note in the patch description
    v2: put whitespace before '-'

    fs/qnx4/bitmap.c | 24 +++++-------------------
    1 files changed, 5 insertions(+), 19 deletions(-)

    diff --git a/fs/qnx4/bitmap.c b/fs/qnx4/bitmap.c
    index 22e0d60..76a7a69 100644
    --- a/fs/qnx4/bitmap.c
    +++ b/fs/qnx4/bitmap.c
    @@ -17,23 +17,6 @@
    #include <linux/bitops.h>
    #include "qnx4.h"

    -static void count_bits(register const char *bmPart, register int size,
    - int *const tf)
    -{
    - char b;
    - int tot = *tf;
    -
    - if (size > QNX4_BLOCK_SIZE) {
    - size = QNX4_BLOCK_SIZE;
    - }
    - do {
    - b = *bmPart++;
    - tot += 8 - hweight8(b);
    - size--;
    - } while (size != 0);
    - *tf = tot;
    -}
    -
    unsigned long qnx4_count_free_blocks(struct super_block *sb)
    {
    int start = le32_to_cpu(qnx4_sb(sb)->BitMap->di_first_xtnt.xtnt_blk) - 1;
    @@ -44,13 +27,16 @@ unsigned long qnx4_count_free_blocks(struct super_block *sb)
    struct buffer_head *bh;

    while (total < size) {
    + int bytes = min(size - total, QNX4_BLOCK_SIZE);
    +
    if ((bh = sb_bread(sb, start + offset)) == NULL) {
    printk(KERN_ERR "qnx4: I/O error in counting free blocks\n");
    break;
    }
    - count_bits(bh->b_data, size - total, &total_free);
    + total_free += bytes * BITS_PER_BYTE -
    + memweight(bh->b_data, bytes);
    brelse(bh);
    - total += QNX4_BLOCK_SIZE;
    + total += bytes;
    offset++;
    }

    --
    1.7.7.6


    \
     
     \ /
      Last update: 2012-06-09 03:41    [W:0.022 / U:0.652 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site