RTEMS: rtems_rfs_block_map_s Struct Reference

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Data Fields
rtems_rfs_block_map_s Struct Reference

`#include <rtems-rfs-block.h>`

## Data Fields
bool | dirty
rtems_rfs_inode_handle * | inode
rtems_rfs_block_size | size
rtems_rfs_block_pos | bpos
rtems_rfs_block_no | last_map_block
rtems_rfs_block_no | last_data_block
uint32_t | blocks [RTEMS_RFS_INODE_BLOCKS]
rtems_rfs_buffer_handle | singly_buffer
rtems_rfs_buffer_handle | doubly_buffer

## Detailed Description

A block map manges the block lists that originate from an inode. The inode contains a number of block numbers. A block map takes those block numbers and manages them.

The blocks cannot have all ones as a block number nor block 0. The block map is series of block numbers in a blocks. The size of the map determines the way the block numbers are stored. The map uses the following:

- Direct Access,
- Single Indirect Access, and
- Double Indirect Access.

Direct access has the blocks numbers in the inode slots. The Single Indirect Access has block numbers in the inode slots that pointer to a table of block numbers that point to data blocks. The Double Indirect Access has block numbers in the inode that point to Single Indirect block tables.

The inode can hold a number of Direct, Single Indirect, and Double Indirect block tables. The move from Direct to Single occurs then the block count in the map is above the number of slots in the inode. The move from Single to Double occurs when the map block count is greated than the block numbers per block multipled by the slots in the inode. The move from Single to Double occurs when the map block count is over the block numbers per block squared multipled by the number of slots in the inode.

The block map can managed files of the follow size verses block size with 5 inode slots:

- 41,943,040 bytes for a 512 byte block size,
- 335,544,320 bytes for a 1024 byte block size,
- 2,684,354,560 bytes for a 2048 byte block size, and
- 21,474,836,480 bytes for a 4096 byte block size.

## Field Documentation

## ◆ blocks

uint32_t rtems_rfs_block_map_s::blocks[RTEMS_RFS_INODE_BLOCKS]

The block map.

## ◆ bpos

rtems_rfs_block_pos rtems_rfs_block_map_s::bpos

The block map position. Used to navigate the map when seeking. The find call is to a position in the file/directory and is a block number plus offset. The block find only needs to locate a block and not worry about the offset while a seek can be less than a block size yet move across a block boundary. Therefore the position a block map has to maintain must include the offset so seeks work.

## ◆ dirty

bool rtems_rfs_block_map_s::dirty

Is the map dirty ?

## ◆ doubly_buffer

rtems_rfs_buffer_handle rtems_rfs_block_map_s::doubly_buffer

Doubly Buffer handle.

## ◆ inode

rtems_rfs_inode_handle* rtems_rfs_block_map_s::inode

The inode this map is attached to.

## ◆ last_data_block

rtems_rfs_block_no rtems_rfs_block_map_s::last_data_block

The last data block allocated. This is used as the goal when allocating a new data block.

## ◆ last_map_block

rtems_rfs_block_no rtems_rfs_block_map_s::last_map_block

The last map block allocated. This is used as the goal when allocating a new map block.

## ◆ singly_buffer

rtems_rfs_buffer_handle rtems_rfs_block_map_s::singly_buffer

Singly Buffer handle.

## ◆ size

rtems_rfs_block_size rtems_rfs_block_map_s::size

The size of the map.

The documentation for this struct was generated from the following file:

- cpukit/include/rtems/rfs/rtems-rfs-block.h