fs/cramfs/README
Source file repositories/reference/linux-study-clean/fs/cramfs/README
File Facts
- System
- Linux kernel
- Corpus path
fs/cramfs/README- Extension
[no extension]- Size
- 4252 bytes
- Lines
- 108
- Domain
- Core OS
- Bucket
- VFS And Filesystem Core
- Inferred role
- Core OS: VFS And Filesystem Core
- Status
- atlas-only
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
- No top-level syscall, struct, function, initcall, or export declaration detected by the generator.
Annotated Snippet
Notes on Filesystem Layout
--------------------------
These notes describe what mkcramfs generates. Kernel requirements are
a bit looser, e.g. it doesn't care if the <file_data> items are
swapped around (though it does care that directory entries (inodes) in
a given directory are contiguous, as this is used by readdir).
All data is currently in host-endian format; neither mkcramfs nor the
kernel ever do swabbing. (See section `Block Size' below.)
<filesystem>:
<superblock>
<directory_structure>
<data>
<superblock>: struct cramfs_super (see cramfs_fs.h).
<directory_structure>:
For each file:
struct cramfs_inode (see cramfs_fs.h).
Filename. Not generally null-terminated, but it is
null-padded to a multiple of 4 bytes.
The order of inode traversal is described as "width-first" (not to be
confused with breadth-first); i.e. like depth-first but listing all of
a directory's entries before recursing down its subdirectories: the
same order as `ls -AUR' (but without the /^\..*:$/ directory header
lines); put another way, the same order as `find -type d -exec
ls -AU1 {} \;'.
Beginning in 2.4.7, directory entries are sorted. This optimization
allows cramfs_lookup to return more quickly when a filename does not
exist, speeds up user-space directory sorts, etc.
<data>:
One <file_data> for each file that's either a symlink or a
regular file of non-zero st_size.
<file_data>:
nblocks * <block_pointer>
(where nblocks = (st_size - 1) / blksize + 1)
nblocks * <block>
padding to multiple of 4 bytes
The i'th <block_pointer> for a file stores the byte offset of the
*end* of the i'th <block> (i.e. one past the last byte, which is the
same as the start of the (i+1)'th <block> if there is one). The first
<block> immediately follows the last <block_pointer> for the file.
<block_pointer>s are each 32 bits long.
When the CRAMFS_FLAG_EXT_BLOCK_POINTERS capability bit is set, each
<block_pointer>'s top bits may contain special flags as follows:
CRAMFS_BLK_FLAG_UNCOMPRESSED (bit 31):
The block data is not compressed and should be copied verbatim.
CRAMFS_BLK_FLAG_DIRECT_PTR (bit 30):
The <block_pointer> stores the actual block start offset and not
its end, shifted right by 2 bits. The block must therefore be
aligned to a 4-byte boundary. The block size is either blksize
if CRAMFS_BLK_FLAG_UNCOMPRESSED is also specified, otherwise
the compressed data length is included in the first 2 bytes of
the block data. This is used to allow discontiguous data layout
and specific data block alignments e.g. for XIP applications.
The order of <file_data>'s is a depth-first descent of the directory
tree, i.e. the same order as `find -size +0 \( -type f -o -type l \)
-print'.
Annotation
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.