1. 09 Mar, 2019 4 commits
    • J. R. Okajima's avatar
      aufs: export via NFS 1/2, body · c470ddd6
      J. R. Okajima authored
      
      
      Implement exporting via NFS.
      The file handle is rather large (40 bytes at most + the file handle on a
      branch).
      The non-virtual filesystems can use an anonymous (disconnected) dentry
      as long as the inode is identified, but aufs needs a dentry with dinfo
      which is usually constructed.  So aufs has to find or generate the
      normal dentry from the file handle in decoding.  Eg. in aufs, there
      should never be the anonymous dentry.
      
      In decoding the file handle, if both of the dentry and the inode which
      are corresponding the file handle are still in cache, then they are
      returned immediately.  Otherwise aufs has to find the cached parent dir
      from the file handle.  If the parent dir is not cached either, the aufs
      tries these steps.
      - decode the branch fs's file handle and get the parent dir
      - generate the path of the parent dir on the branch
      - convert the branch path to aufs's path
      - lookup the inode number under the aufs' path
      The last one is the slowest case.
      
      exportfs_decode_fh() (actually reconnect_path()) acquires mutex, and
      this behaviour violates the locking order between aufs si_rwsem.  This
      is not a problem since internal exportfs_decode_fh() is called for the
      branch fs.
      Simply use lockdep_off/on to silence the lockdep message.
      
      See also the document in later commit.
      This is compiled only when CONFIG_AUFS_EXPORT is enabled.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      c470ddd6
    • J. R. Okajima's avatar
      aufs: sbinfo list · a35f55f4
      J. R. Okajima authored
      
      
      When user accesses aufs via other than fs related systemcalls, aufs
      needs to identify which superblock is the target.  Here is the trick.
      It is just a list of aufs superblocks.  Such way will be procfs and
      MagicSysRq key.  For MagicSysRq support, see the later commit.
      This is a dirty approach which I don't like, but I just don't have
      another idea.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      a35f55f4
    • J. R. Okajima's avatar
      aufs: iinfo, debug by rwsem · c74884be
      J. R. Okajima authored
      
      
      This is a very old debugging routine for rw_semaphore I was using
      privately and less meaningful to other people. It was (probably) before
      LOCKDEP feature was introduced, but now it is based upon LOCKDEP. This
      is compiled when CONFIG_AUFS_DEBUG is enabled.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      c74884be
    • J. R. Okajima's avatar
      aufs: intro, public header · 78ac643d
      J. R. Okajima authored
      
      
      A header file for both of kernelspace and userspace.
      
      For the new file fs/aufs/Kconfig, the maximum number of branches is
      customizable, and it determines the type (size) of 'aufs_bindex_t.' The
      type is always 'signed.' If we made it 'unsigned,' then more branches
      would be available. But generally I think 127 (default) is enough and it
      won't be a big issue.
      
      For those who wants more than 127 branches, other values are
      available. But we should care the size of the internal pointer arrays,
      and it is good for the performance to keep it in a page at most.
      AUFS_BRANCH_MAX_511 is mainly for 64bit systems which limits the
      internal array size less than 4k (511 x 8bytes < 4k). Similarly for
      32bit systems, AUFS_BRANCH_MAX_1023 (1023 x 4 bytes < 4k).
      
      See also the documents in this commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      78ac643d