This is an old revision of the document!
XFS FUSE Implementation
- Student: KhaledEmara (mail@KhaledEmara.dev)
- Mentors: AlanSomers (asomers@) and PedroGiffuni (pfg@)
Project description
This project is part of GSoC'21. In this project, I've worked on a read-only userland implementation of the XFS Filesystem through the FUSE kernel interface. This involved writing the client in Rust using the fuse crate.
Deliverables
- XFS library.
- Read basic structures such as the Super Block and the AGI.
- Parse Extents.
- Parse and Navigate variable-length B+Trees.
- Parse and Navigate fixed-length B+Trees.
- Read and Traverse directories:
- Short Form directories.
- Block directories.
- Leaf directories.
- Node directories.
- B+Tree directories.
- Read files:
- Extent-based files.
- B+Tree-based files.
- Read symbolic links:
- Short Form symbolic links.
- Extent-based symbolic links.
- Read extended attributes:
- Short Form extended attributes.
- Leaf extended attributes.
- Node extended attributes.
- B+Tree extended attributes.
- FUSE glue code.
- stat the filesystem.
- Access control.
- Return standard Unix file attributes.
- Both stateless directories and with state files implementations.
- Some Unit Tests.
- Metadata integrity checks.
- CRC32C check.
- UUID checks.
- Magic Number checks.
- Block Number checks.
- FreeBSD Ports package.
Test Plan
Some unit tests have been written, but the coverage is weak. The coverage could be expanded as a future plan. I have also tested the filesystem manually and verified each functionality.