Snapshots have been merged! 9 months of work and 3k lines of new code, finally released. Some highlights: - btrfs style subvolumes & snapshots interface - snapshots are writeable - highly scalable: number of snapshots is limited only by your disk space - highly space efficient: no internal fragmentation issues Design doc here: https://bcachefs.org/Snapshots/ The core functionality is complete - snapshot creation and deletion works, fsck changes are done (most of the complexity was in making fsck work without O(number of snapshots) performance - tricky). Everything else is a todo item: - still need to export different st_dev for files in different subvolumes (we'll never allocate a new inode with an inode number that collides with an inode inother subvolume - but snapshots will naturally result in colliding inode numbers) - need to hide dirents that point to snapshots when inside snapshots... - snapshot creation is not atomic w.r.t. page cache, we do sync_fs() but don't block buffered writes - other niggling page cache stuff - need to walk page cache and mark blocks as no longer reserved on snapshot creation - we no longer have quota support, since old style quotas interact badly with snapshots - we need per subvolume disk space accounting before i can implement btrfs style subvolume quotas - all the things I neglected to think of yet, and all the bugs I haven't found yet Go wild, please try and break it.