Changeset a9619f3c in rtems


Ignore:
Timestamp:
Dec 18, 2013, 5:00:42 PM (5 years ago)
Author:
Alan Cudmore <alan.cudmore@…>
Branches:
4.11, master
Children:
1ab4f76
Parents:
9b48dc6
git-author:
Alan Cudmore <alan.cudmore@…> (12/18/13 17:00:42)
git-committer:
Chris Johns <chrisj@…> (12/19/13 00:07:47)
Message:

For PR 2164 - RFS File System - fix bitmap_create_search loop bug

This is for the RFS file system. There is a bug in the
rtems_rfs_bitmap_create_search loop. It is supposed to iterate
over the range of bits in a search element ( usually 32 bits ),
so it should loop through bits 0 through 31. Instead it loops
through 0 - 32, causing some blocks not to be allocated. As in
PR 2163, this depends on the block size and number of blocks in
a file system. Block sizes and group sizes that are powers of 2
seem to work fine ( 512 byte blocks, 4096 block groups, etc ).
When the block sizes are not powers of 2, then this loop error
causes some of the blocks at the end of a group to be skipped,
preventing 100% of the blocks from being used. A simple test
for this and PR2163 is to create a RAM disk with block size
3900 and at least 1 full group ( 31200 blocks ). A file system
with these sizes will not be able to allocate 100% of the blocks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libfs/src/rfs/rtems-rfs-bitmaps.c

    r9b48dc6 ra9619f3c  
    600600    size -= available;
    601601
    602     if (bit == rtems_rfs_bitmap_element_bits ())
     602    /* Iterate from 0 to 1 less than the number of bits in an element */
     603    if (bit == (rtems_rfs_bitmap_element_bits () - 1))
    603604    {
    604605      bit = 0;
Note: See TracChangeset for help on using the changeset viewer.