Fuse-xfs Apr 2026
Why? Because XFS inodes have a generation number (to handle inode reuse), and the low-level API lets us pass that back to the kernel’s dcache.
This is where the kernel-to-userspace shift gets interesting. In the kernel, XFS uses xfs_buf_t with b_ops for verification. In fuse-xfs , we just cast: fuse-xfs
Or, Why I Spent a Weekend Reimplementing a Journaling Filesystem as a Debugging Tool In the kernel, XFS uses xfs_buf_t with b_ops
static void xfs_lookup(fuse_req_t req, fuse_ino_t parent, const char *name) { struct xfs_inode *ip = xfs_iget(parent); xfs_dirent_t *de = xfs_dir_lookup(ip, name); fuse_reply_entry(req, &(struct fuse_entry_param){ .ino = de->inumber, .generation = ip->i_generation, .attr_timeout = 1.0, .entry_timeout = 1.0 }); } XFS divides the disk into equal-sized Allocation Groups. In fuse-xfs , each AG is a mmap() of a region in a backing file ( /var/lib/fuse-xfs/ag0.bin ). Reads and writes become pointer dereferences. Reads and writes become pointer dereferences