Three levels of file block addressing

This figure documents the historical i386 source baseline. Current native x86-64/AArch64 qualification is recorded separately; this is not an ELF64 or native SMP implementation diagram.

Three levels of file block addressing Twelve direct pointers address 12 data sectors. One single-indirect sector holds 128 data-sector pointers. A double-indirect root points to up to 128 pointer sectors, each with 128 data pointers. The theoretical data maximum is 16,524 sectors, or 8,460,288 bytes, excluding pointer overhead. 512 bytes per sector · theoretical maximum file data: 8,460,288 bytes Pointer sectors add overhead; available disk space may limit files first. inode->direct inode->single inode->doubleroot direct->ddata single->sdata doubleroot->leaf leaf->bdata inode Inode direct 12 direct pointers file blocks 0…11 single 1 pointer sector 128 entries doubleroot 1 root pointer sector 128 entries leaf Up to 128 leaf sectors 128 entries each ddata 12 data sectors 6 KiB sdata 128 data sectors 64 KiB bdata 16,384 data sectors 8 MiB
Three levels of file block addressing Twelve direct pointers address 12 data sectors. One single-indirect sector holds 128 data-sector pointers. A double-indirect root points to up to 128 pointer sectors, each with 128 data pointers. The theoretical data maximum is 16,524 sectors, or 8,460,288 bytes, excluding pointer overhead. 512 bytes per sector. Maximum data: 8,460,288 bytes. Pointer sectors add overhead; available disk space may limit files first. inode->direct inode:e->single:e inode:e->root:e root->leaf leaf->data inode Inode direct 12 direct pointers → 12 data sectors · 6 KiB file blocks 0…11 single 1 pointer sector · 128 entries → 128 data sectors · 64 KiB root 1 root pointer sector 128 entries leaf Up to 128 leaf sectors 128 entries each data 16,384 data sectors · 8 MiB

Direct, single-indirect and double-indirect pointers cover successively larger file ranges.

Text equivalent and source references
  • Twelve direct pointers address 12 data sectors. One single-indirect sector holds 128 data-sector pointers.
  • A double-indirect root points to up to 128 pointer sectors, each with 128 data pointers. The theoretical data maximum is 16,524 sectors, or 8,460,288 bytes, excluding pointer overhead.

Pointer topology. Source paths refer to the atlas baseline; the kernel checkout is private.

  • include/blockfs.h · SLFS_DIRECT_BLOCKS, SLFS_MAX_FILE_SIZE
  • kernel/fs/blockfs.c · blockfs_read_file_locked