On 2019/6/26 下午4:33, Anand Jain wrote: > These patches are tested to be working fine. > > Function call chain __btrfs_map_block()->find_live_mirror() uses > thread pid to determine the %mirror_num when the mirror_num=0. > > This patch introduces a framework so that we can add policies to determine > the %mirror_num. And adds the devid as the readmirror policy. > > The property is stored as an extented attributes of root inode > (BTRFS_FS_TREE_OBJECTID). This doesn't look right to me. As readmirror should work at chunk layer, putting it into root tree doesn't follow the layer separation of btrfs. And furthermore, this breaks the XATTR schema. Normally we only have XATTR item after an INODE item, not a ROOT_ITEM. Is the on-disk format already accepted or still under design stage? Thanks, Qu > User provided devid list is validated against the fs_devices::dev_list. > > For example: > Usage: > btrfs property set <mnt> readmirror devid<n>[,<m>...] > btrfs property set <mnt> readmirror "" > > mkfs.btrfs -fq -draid1 -mraid1 /dev/sd[b-d] && mount /dev/sdb /btrfs > btrfs prop set /btrfs readmirror devid1,2 > btrfs prop get /btrfs readmirror > readmirror=devid1,2 > getfattr -n btrfs.readmirror --absolute-names /btrfs > btrfs.readmirror="devid1,2" > btrfs prop set /btrfs readmirror "" > getfattr -n btrfs.readmirror --absolute-names /btrfs > /btrfs: btrfs.readmirror: No such attribute > btrfs prop get /btrfs readmirror > > RFC->v1: > Drops pid as one of the readmirror policy choices and as usual remains > as default. And when the devid is reset the readmirror policy falls back > to pid. > Drops the mount -o readmirror idea, it can be added at a later point of > time. > Property now accepts more than 1 devid as readmirror device. As shown > in the example above. > > Anand Jain (3): > btrfs: add inode pointer to prop_handler::validate() > btrfs: add readmirror property framework > btrfs: add readmirror devid property > > fs/btrfs/props.c | 120 +++++++++++++++++++++++++++++++++++++++++++-- > fs/btrfs/props.h | 4 +- > fs/btrfs/volumes.c | 25 +++++++++- > fs/btrfs/volumes.h | 8 +++ > fs/btrfs/xattr.c | 2 +- > 5 files changed, 150 insertions(+), 9 deletions(-) >
Attachment:
signature.asc
Description: OpenPGP digital signature
