• Linus Torvalds's avatar
    Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace · e5f76a2e
    Linus Torvalds authored
    Pull mnt namespace updates from Eric Biederman:
     "A big break-through came during this development cycle as a way was
      found to maintain the existing umount -l semantics while allowing for
      optimizations that improve the performance. That is represented by the
      first change in this series moving the reparenting of mounts into
      their own pass. This has allowed addressing the horrific performance
      of umount -l on a carefully crafted tree of mounts with locks held
      (0.06s vs 60s in my testing). What allowed this was not changing where
      umounts propagate to while propgating umounts.
    
      The next change fixes the case where the order of the mount whose
      umount are being progated visits a tree where the mounts are stacked
      upon each other in another order. This is weird but not hard to
      implement.
    
      The final change takes advantage of the unchanging mount propgation
      tree to skip parts of the mount propgation tree that have already been
      visited. Yielding a very nice speed up in the worst case.
    
      There remains one outstanding question about the semantics of umount -l
      that I am still discussiong with Ram Pai. In practice that area of the
      semantics was changed by 1064f874 ("mnt: Tuck mounts under others
      instead of creating shadow/side mounts.") and no regressions have been
      reported. Still I intend to finish talking that out with him to ensure
      there is not something a more intense use of mount propagation in the
      future will not cause to become significant"
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace:
      mnt: Make propagate_umount less slow for overlapping mount propagation trees
      mnt: In propgate_umount handle visiting mounts in any order
      mnt: In umount propagation reparent in a separate pass
    e5f76a2e
namespace.c 85.4 KB