[lkml]   [2006]   [Mar]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[PATCH 0/5] Permit NFS superblock sharing [try #3]

    These patches make it possible to share NFS superblocks between related mounts,
    where "related" means on the same server. Inodes and dentries will be shared
    where the NFS filehandles are the same (for example if two NFS3 files come from
    the same export but from different mounts, such as is not uncommon with autofs
    on /home).

    Following discussion with Al Viro, the following changes [try #2] have been
    made to the previous attempt at this set of patches:

    (*) The vfsmount is now passed into the get_sb() method for a filesystem
    instead of passing a pointer to a pointer to a dentry into which get_sb()
    could stick a root dentry if it wanted. get_sb() now instantiates the
    superblock and root dentry pointers in the vfsmount itself.

    (*) The get_sb() method now returns an integer (0 or -ve error number) rather
    than the superblock pointer or cast error number.

    (*) the get_sb_*() convenience functions in the core kernel now take a
    vfsmount pointer argument and return an integer, so most filesystems have
    to change very little.

    (*) If one of the convenience function is not used, then get_sb() should
    normally call simple_set_mnt() to instantiate the vfsmount. This will
    always return 0, and so can be tail-called from get_sb().

    (*) generic_shutdown_super() now calls shrink_dcache_sb() to clean up the
    dcache upon superblock destruction rather than shrink_dcache_parent() and
    shrink_dcache_anon(). This is because, as far as I can tell, the current
    code assumes that all the dentries will be linked into a tree depending
    from sb->s_root, and that anonymous dentries won't have children.

    However, with the way these patches implement NFS superblock sharing,
    these assumptions are violated: the root of the filesystem is simply a
    dummy dentry and inode (the real inode for '/' may well be inaccessible),
    and all the vfsmounts are rooted on anonymous[*] dentries with child

    [*] Anonymous until discovered from another tree.

    (*) d_materialise_dentry() now switches the parentage of the two nodes around
    correctly when one or other of them is self-referential.

    (*) Whilst invoking link_path_walk(), the nfs4_get_root() routine now
    temporarily overrides the FS settings of the process to prevent absolute
    symbolic links from walking into the wrong namespace.

    (*) nfs*_get_sb() instantiate the supplied vfsmount directly by assigning to
    its mnt_root and mnt_sb members.

    (*) nfs_readdir_lookup() creates dentries for each of the entries readdir()
    returns; this function now attaches disconnected trees from alternate
    roots that happen to be discovered attached to a directory being read (in
    the same way nfs_lookup() is made to do for lookup ops).

    (*) Various bugs have been fixed.

    Further changes [try #3] that have been made:

    (*) The patches are now against Trond's NFS git tree, so won't apply to
    Linus's tree.

    (*) The server record construction/destruction has been abstracted out into
    its own pair of functions to make things easier to get right.

    (*) Documentation changes have been moved from patch 2/5 to 1/5.

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2006-03-02 22:36    [W:0.030 / U:0.608 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site