On 1/17/21 1:54 PM, Goffredo Baroncelli wrote:
Hi all, This is an RFC; I wrote this patch because I find the idea interesting even though it adds more complication to the chunk allocator. The basic idea is to store the metadata chunk in the fasters disks. The fasters disk are marked by the "preferred_metadata" flag. BTRFS when allocate a new metadata/system chunk, selects the "preferred_metadata" disks, otherwise it selectes the non "preferred_metadata" disks. The intial patch allowed to use the other kind of disk in case a set is full. This patches set is based on v5.11-rc2. For now, the only user of this patch that I am aware is Zygo. However he asked to further constraint the allocation: i.e. avoid to allocated metadata on a not "preferred_metadata" disk. So I extended the patch adding 4 modes to operate. This is enabled passing the option "preferred_metadata=<mode>" at mount time.
I'll echo Zygo's hatred for mount options. The more complicated policy decisions belong in properties and sysfs knobs, not mount options.
And then for the properties themselves, presumably we'll want to add other FS wide properties in the future. I'm not against adding new actual keys and items to the tree itself, but is there a way we could use our existing property infrastructure that we use for compression, and simply store the xattrs in the tree root? It looks like we're just toggling a policy decision, and we don't actually need the other properties in the item you've created, so why not just a btrfs.preferred_metadata property with the value stored in it, dropped into the tree_root so it can be read on mount? Thanks,
Josef