On Mon, 23 Aug 2021, Zygo Blaxell wrote: ... > > Subvol IDs are not reusable. They are embedded in shared object ownership > metadata, and persist for some time after subvols are deleted. ... > > The cost of _tracking_ free object IDs is trivial compared to the cost > of _reusing_ an object ID on btrfs. One possible approach to these two objections is to decouple inode numbers from object ids. The inode number becomes just another piece of metadata stored in the inode. struct btrfs_inode_item has four spare u64s, so we could use one of those. struct btrfs_dir_item would need to store the inode number too. What is location.offset used for? Would a diritem ever point to a non-zero offset? Could the 'offset' be used to store the inode number? This could even be added to existing filesystems I think. It might not be easy to re-use inode numbers smaller than the largest at the time the extension was added, but newly added inode numbers could be reused after they were deleted. Just a thought... NeilBrown