Re: [PATCH 1/8] Add yaffs2 file system: allocator, attribs, bitmap code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Dec 2, 2010 at 1:49 PM, Ryan Mallon <ryan@xxxxxxxxxxxxxxxx> wrote:
> On 12/01/2010 10:57 AM, Charles Manning wrote:
>> Signed-off-by: Charles Manning <cdhmanning@xxxxxxxxx>
>> ---
>>  fs/yaffs2/yaffs_allocator.c |  397 +++++++++++++++++++++++++++++++++++++++++++
>>  fs/yaffs2/yaffs_allocator.h |   30 ++++
>>  fs/yaffs2/yaffs_attribs.c   |  124 ++++++++++++++
>>  fs/yaffs2/yaffs_attribs.h   |   28 +++
>>  fs/yaffs2/yaffs_bitmap.c    |  104 +++++++++++
>>  fs/yaffs2/yaffs_bitmap.h    |   33 ++++
>>  6 files changed, 716 insertions(+), 0 deletions(-)
>>  create mode 100644 fs/yaffs2/yaffs_allocator.c
>>  create mode 100644 fs/yaffs2/yaffs_allocator.h
>>  create mode 100644 fs/yaffs2/yaffs_attribs.c
>>  create mode 100644 fs/yaffs2/yaffs_attribs.h
>>  create mode 100644 fs/yaffs2/yaffs_bitmap.c
>>  create mode 100644 fs/yaffs2/yaffs_bitmap.h
>>
>> diff --git a/fs/yaffs2/yaffs_allocator.c b/fs/yaffs2/yaffs_allocator.c
>> new file mode 100644
>> index 0000000..b9fe31e
>> --- /dev/null
>> +++ b/fs/yaffs2/yaffs_allocator.c
>> @@ -0,0 +1,397 @@
>> +/*
>> + * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
>> + *
>> + * Copyright (C) 2002-2010 Aleph One Ltd.
>> + *   for Toby Churchill Ltd and Brightstar Engineering
>> + *
>> + * Created by Charles Manning <charles@xxxxxxxxxxxx>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#include "yaffs_allocator.h"
>> +#include "yaffs_guts.h"
>> +#include "yaffs_trace.h"
>> +#include "yportenv.h"
>> +
>> +#ifdef CONFIG_YAFFS_YMALLOC_ALLOCATOR
>
> This doesn't appear to be defined anywhere and is not in Kconfig. Is
> this just a wrapper for support on other operating systems or does it
> can it be used on Linux for debugging? In the former case it should
> probably removed and in the latter it should probably have a comment
> explaining why you would want to define it.
>
> <snip>
>
>> +
>> +#include "yaffs_bitmap.h"
>> +#include "yaffs_trace.h"
>> +/*
>> + * Chunk bitmap manipulations
>> + */
>> +
>> +static Y_INLINE u8 *yaffs_block_bits(struct yaffs_dev *dev, int blk)
>
> Should just use inline.
>
> <snip>
>
>> +
>> +int yaffs_still_some_chunks(struct yaffs_dev *dev, int blk)
>> +{
>> +     u8 *blk_bits = yaffs_block_bits(dev, blk);
>> +     int i;
>> +     for (i = 0; i < dev->chunk_bit_stride; i++) {
>
> Nitpick: You should have a blank line between variable declarations and
> start of code.
>
> <snip>
>
>> +int yaffs_count_chunk_bits(struct yaffs_dev *dev, int blk)
>> +{
>> +     u8 *blk_bits = yaffs_block_bits(dev, blk);
>> +     int i;
>> +     int n = 0;
>> +     for (i = 0; i < dev->chunk_bit_stride; i++) {
>> +             u8 x = *blk_bits;
>> +             while (x) {
>> +                     if (x & 1)
>> +                             n++;
>> +                     x >>= 1;
>> +             }
>> +
>> +             blk_bits++;
>> +     }
>> +     return n;
>> +}
>
>
> This is possibly more concise as a for loop. Also moving the definitions
> all to the top of the file and combining same types definitions on one
> line reduces this function to:
>
> int yaffs_count_chunk_bits(struct yaffs_dev *dev, int blk)
> {
>        u8 x, *blk_bits = yaffs_block_bits(dev, blk);
>        int i, n = 0;
>
>        for (i = 0; i < dev->chunk_bit_stride; i++, blk_bits++)
>                for (x = *blk_bits; x; x >>= 1)
>                        if (x & 1)
>                                n++;
>
>        return n;
> }

Actually, how about using the standard hamming weight function?
This adds a dependency on linux/bitops.h, but seems to be carefully
crafted to be as fast as possible based on the available hardware.

int yaffs_count_chunk_bits(struct yaffs_dev *dev, int blk)
{
       u8 *blk_bits = yaffs_block_bits(dev, blk);
       int i, n = 0;

       for (i = 0; i < dev->chunk_bit_stride; i++, blk_bits++)
               n += hweight8(*blk_bits);

       return n;
}

Kevin Granade


>
> ~Ryan
>
> --
> Bluewater Systems Ltd - ARM Technology Solution Centre
>
> Ryan Mallon                     5 Amuri Park, 404 Barbadoes St
> ryan@xxxxxxxxxxxxxxxx           PO Box 13 889, Christchurch 8013
> http://www.bluewatersys.com     New Zealand
> Phone: +64 3 3779127            Freecall: Australia 1800 148 751
> Fax:   +64 3 3779135                      USA 1800 261 2934
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux