1. 09 Mar, 2019 18 commits
    • J. R. Okajima's avatar
      aufs: hfsplus branch · 5bb71622
      J. R. Okajima authored
      
      
      Special support for filesystems which acquires an inode mutex at final
      closing a file, eg, hfsplus.
      This trick is very simple and stupid, just to open the file before really
      necessary open to tell hfsplus that this is not the final closing.
      The caller should call au_h_open_pre() after acquiring the inode mutex,
      and au_h_open_post() after releasing it.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      5bb71622
    • J. R. Okajima's avatar
      aufs: dirperm1 option · b3b9c456
      J. R. Okajima authored
      
      
      Sometimes the aufs policy to respect the branch fs's permission bits
      makes users confused. IE. the direcotry permission bits on the top branch
      allows users to read, but the lower branch prohibts. This option may be
      useful for such case.
      See also the document in this commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      b3b9c456
    • J. R. Okajima's avatar
      aufs: atomic_open 5/5, the body aufs_atomic_open() · dc25d54f
      J. R. Okajima authored
      
      
      ->atomic_open() is another monster (the other is ->rename() of course).
      It operates look-up, create, and open in a single method.
      Strictly speaking the behaviour is not atomic from the branch fs's point
      of view, while the atomicity is kept in aufs's. This is a second-best
      approach. For details, refer to the design document in previous commit.
      
      A simple list 'si_aopen' can be put into aufs inode object, but I don't
      think it a good idea because the number of inodes is much larger than
      the number of super_block. If I put it into inode, it can be an
      un-interesting memory pressure I am afraid.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      dc25d54f
    • J. R. Okajima's avatar
      aufs: file op · a3387b95
      J. R. Okajima authored
      
      
      Implement several f_op functions for non-dir.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      a3387b95
    • J. R. Okajima's avatar
      aufs: xattr and acl · a76ab411
      J. R. Okajima authored
      
      
      Support for XATTR and ACL including several branch attributes to ignore
      the copy error around XATTR and ACL.
      
      NFS always sets MS_POSIXACL regardless its mount option 'noacl.'
      When MS_POSIXACL is set, generic_permission() calls check_acl() (via
      acl_permission_check()) and gets -EOPNOTSUPP because the NFS branch is
      mounted as 'noacl.'
      In aufs, h_permission() should not call generic_permission() in this
      case.
      The similar thing happens in coping-up XATTR. vfs_getxattr_alloc()
      returns -EOPNOTSUPP.
      
      See also the document in this commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      a76ab411
    • J. R. Okajima's avatar
      aufs: udba=none has no ->getattr() 1/2, inode_operations array · 46b85e53
      J. R. Okajima authored
      
      
      An enhancement for udba=none if possible.
      The condition is same to the 'no ->d_revalidate()' patch series.
      In this mode, i_op->getattr() is less important, and the default VFS
      handler is enough.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      46b85e53
    • J. R. Okajima's avatar
      aufs: inode op, get/set attributes · 25f10296
      J. R. Okajima authored
      
      
      Implement i_op->get/setattr().
      setattr() is another trigger of the copy-up. The file may or may not be
      opened. And some of sub-functions are commonly used to XATTR operations
      in later commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      25f10296
    • J. R. Okajima's avatar
      aufs: inode op, add, link · 39391364
      J. R. Okajima authored
      
      
      Implement i_op->link().
      As aufs supports 'pseudo-link', aufs_link() can make it without
      copying-up. In the case of aufs_link() has to copy-up, the name of the
      target file is used as-is, and it is pseudo-linked. In other words,
      calling link(2) after the copy-up is unnecessary.
      
      See also struct.txt in previous commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      39391364
    • J. R. Okajima's avatar
      aufs: inode op, rename 2/2, body · 2902df92
      J. R. Okajima authored
      
      
      Implement i_op->rename().
      This is a big monster and I don't like it.
      
      In this version, the copy-up always happen.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      2902df92
    • J. R. Okajima's avatar
      aufs: inode op, del, rmdir · 5755f006
      J. R. Okajima authored
      
      
      Implement i_op->rmdir() with supporting logical deletion by whiteout
      including all children.
      
      As struct.txt in previous commit described, the target dir is renamed to
      a whiteout-ed temporary unique name in rmdir(2), and then removed
      asynchronously by the system global workqueue.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      5755f006
    • J. R. Okajima's avatar
      aufs: inode op, del, unlink · 4dc51987
      J. R. Okajima authored
      
      
      Implement i_op->unlink() with supporting logical deletion by whiteout.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      4dc51987
    • J. R. Okajima's avatar
      aufs: inode op, add an entry · 78db268b
      J. R. Okajima authored
      
      
      Here are entry adding inode operations, i_op->create(), symlink(),
      mkdir(), mknod(), and tmpfile().
      Obviously they return EOPNOTSUPP when the target branch fs doesn't
      support the operation.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      78db268b
    • J. R. Okajima's avatar
      aufs: inode op, for symlink · 7213fdc8
      J. R. Okajima authored
      
      
      Implement dir.i_op->get_link().
      I am afraid there may exist the case skipping updating the inode atime.
      It means the aufs inode atime may be reverted by the real fs inode atime
      silently.  But I don't think it a big problem.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      7213fdc8
    • J. R. Okajima's avatar
      aufs: inode op, lookup · ed4978f6
      J. R. Okajima authored
      
      
      Implement dir.i_op->lookup() and ->permission().
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      ed4978f6
    • J. R. Okajima's avatar
      aufs: hnotify 3/3, callers · f8ec4890
      J. R. Okajima authored
      
      
      In order to prevent firing the notify event from aufs itself, hnotify
      feature is suspend/resume-able. They are combined with mutex lock/unlock
      for the parent dir.
      
      See also previous commits.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      f8ec4890
    • J. R. Okajima's avatar
      aufs: export via NFS 2/2 · a030bc2a
      J. R. Okajima authored
      
      
      The main part is in previous commit.
      This commit handles the generation of aufs objects, to make sure the
      inode in the file handle is still valid.
      In order not to confuse NFSD, the various operation returns ESTALE for
      NFSD where it used to return EBUSY.
      
      See also the document in this commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      a030bc2a
    • J. R. Okajima's avatar
      aufs: users' direct branch access · 27c33497
      J. R. Okajima authored
      
      
      Aufs allows users' direct branch access (UDBA), ie. by-passing aufs.
      Of course it will make aufs inode/dentry-caches obsolete. In order to
      detect such change by the several tests, "udba=" option is introduced.
      
      For details, see lookup.txt in later commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      27c33497
    • J. R. Okajima's avatar
      aufs: pin or lock the parent dir and the child on a branch · 9f923257
      J. R. Okajima authored
      
      
      To create/delete/rename files including copy-up, aufs acquires several
      locks on the branch fs internally. These lock/unlock operations are
      consolidated into struct au_pin in this commit.
      au_pin handles
      - LOCKDEP class
      - re-validate/verify
      - suspend/resume HNOTIFY
      
      See also lookup.txt in later commit.
      Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
      9f923257