Trouble with RFS block addressing

Deng Fan enetor at
Thu Jul 27 17:32:04 UTC 2017

Hi guys,

I am experimenting with RFS. There is an issue around block addressing in
RFS that has been bothering me quite a bit.

To my knowledge, there are two ways to ID a block in RFS:

- Via a direct bno
- Via a group number and a bit (offset)

They should be fully convertible (1-1 mapping). However, the source code I
am reading is inconsistent in converting one to the other. Below is a
summary of the different equations used in the code.

1. In rtems_rfs_group_bitmap_alloc (rtems-rfs-group.c, line #172)
bno = group * group_blocks + bit

2. In rtems_rfs_group_bitmap_alloc (rtems-rfs-group.c, line #228)
bno = group * group_blocks + bit + 1 (via rtems_rfs_group_block() function)

3. In rtems_rfs_group_bitmap_free (rtems-rfs-group.c, line #283)
bno = group * group_blocks + bit + 1 (RTEMS_RFS_SUPERBLOCK_SIZE)

4. In rtems_rfs_group_bitmap_test (rtems-rfs-group.c, line #332)
bno = group * group_blocks + bit

#1 and #4 are different from #2 and #3.

I did a little test. On a newly formatted RFS partition, I called
rtems_rfs_group_bitmap_alloc() to allocate a block. Then check if the block
is allocated via rtems_rfs_group_bitmap_test. The result confirmed that the
addressing is inconsistent, as the bno returned by
rtems_rfs_group_bitmap_alloc() is unallocated according to

Is there anything I interpreted incorrectly or is this a real issue?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list