Hi, This patchset works well in 5.14-rc3. 1, fixed dummy inode(255, BTRFS_FIRST_FREE_OBJECTID - 1 ) is changed to dynamic dummy inode(18446744073709551358, or 18446744073709551359, ...) 2, btrfs subvol mount info is shown in /proc/mounts, even if nfsd/nfs is not used. /dev/sdc btrfs 94G 3.5M 93G 1% /mnt/test /dev/sdc btrfs 94G 3.5M 93G 1% /mnt/test/sub1 /dev/sdc btrfs 94G 3.5M 93G 1% /mnt/test/sub2 This is a visiual feature change for btrfs user. Best Regards Wang Yugui (wangyugui@xxxxxxxxxxxx) 2021/07/28 > Hi, > > We no longer need the dummy inode(BTRFS_FIRST_FREE_OBJECTID - 1) in this > patch serials? > > I tried to backport it to 5.10.x, but it failed to work. > No big modification in this 5.10.x backporting, and all modified pathes > are attached. > > Best Regards > Wang Yugui (wangyugui@xxxxxxxxxxxx) > 2021/07/28 > > > There are long-standing problems with btrfs subvols, particularly in > > relation to whether and how they are exposed in the mount table. > > > > - /proc/self/mountinfo reports the major:minor device number for each > > filesystem and when a btrfs subvol is explicitly mounted, the number > > reported is wrong - it does not match what stat() reports for the > > mountpoint. > > > > - when subvol are not explicitly mounted, they don't appear in > > mountinfo at all. > > > > Consequences include that a tool which uses stat() to find the dev of the > > filesystem, then searches mountinfo for that filesystem, will not find > > it. > > > > Some tools (e.g. findmnt) appear to have been enhanced to cope with this > > strangeness, but it would be best to make btrfs behave more normally. > > > > - nfsd cannot currently see the transition to subvol, so reports the > > main volume and all subvols to the client as being in the same > > filesystem. As inode numbers are not unique across all subvols, > > this can confuse clients. In particular, 'find' is likely to report a > > loop. > > > > subvols can be made to appear in mountinfo using automounts. However > > nfsd does not cope well with automounts. It assumes all filesystems to > > be exported are already mounted. So adding automounts to btrfs would > > break nfsd. > > > > We can enhance nfsd to understand that some automounts can be managed. > > "internal mounts" where a filesystem provides an automount point and > > mounts its own directories, can be handled differently by nfsd. > > > > This series addresses all these issues. After a few enhancements to the > > VFS to provide needed support, they enhance exportfs and nfsd to cope > > with the concept of internal mounts, and then enhance btrfs to provide > > them. > > > > The NFSv3 support is incomplete. I'm not sure we can make it work > > "perfectly". A normal nfsv3 mount seem to work well enough, but if > > mounted with '-o noac', it loses track of the mounted-on inode number > > and complains about inode numbers changing. > > > > My basic test for these is to mount a btrfs filesystem which contains > > subvols, nfs-export it and mount it with nfsv3 and nfsv4, then run > > 'find' in each of the filesystem and check the contents of > > /proc/self/mountinfo. > > > > The first patch simply fixes the dev number in mountinfo and could > > possibly be tagged for -stable. > > > > NeilBrown > > > > --- > > > > NeilBrown (11): > > VFS: show correct dev num in mountinfo > > VFS: allow d_automount to create in-place bind-mount. > > VFS: pass lookup_flags into follow_down() > > VFS: export lookup_mnt() > > VFS: new function: mount_is_internal() > > nfsd: include a vfsmount in struct svc_fh > > exportfs: Allow filehandle lookup to cross internal mount points. > > nfsd: change get_parent_attributes() to nfsd_get_mounted_on() > > nfsd: Allow filehandle lookup to cross internal mount points. > > btrfs: introduce mapping function from location to inum > > btrfs: use automount to bind-mount all subvol roots. > > > > > > fs/btrfs/btrfs_inode.h | 12 +++ > > fs/btrfs/inode.c | 111 ++++++++++++++++++++++++++- > > fs/btrfs/super.c | 1 + > > fs/exportfs/expfs.c | 100 ++++++++++++++++++++---- > > fs/fhandle.c | 2 +- > > fs/internal.h | 1 - > > fs/namei.c | 6 +- > > fs/namespace.c | 32 +++++++- > > fs/nfsd/export.c | 4 +- > > fs/nfsd/nfs3xdr.c | 40 +++++++--- > > fs/nfsd/nfs4proc.c | 9 ++- > > fs/nfsd/nfs4xdr.c | 106 ++++++++++++------------- > > fs/nfsd/nfsfh.c | 44 +++++++---- > > fs/nfsd/nfsfh.h | 3 +- > > fs/nfsd/nfsproc.c | 5 +- > > fs/nfsd/vfs.c | 162 +++++++++++++++++++++++---------------- > > fs/nfsd/vfs.h | 12 +-- > > fs/nfsd/xdr4.h | 2 +- > > fs/overlayfs/namei.c | 5 +- > > fs/xfs/xfs_ioctl.c | 12 ++- > > include/linux/exportfs.h | 4 +- > > include/linux/mount.h | 4 + > > include/linux/namei.h | 2 +- > > 23 files changed, 490 insertions(+), 189 deletions(-) > > > > -- > > Signature >