• Han-Wen Nienhuys's avatar
    Rewrite Mount/Unmount logic. · 4a79a89d
    Han-Wen Nienhuys authored
    * In-process mounts are now always on synthetic inodes.  FileSystems
      no longer have to generate GetAttr() responses for mount points.
    
      Advantages:
    
      - Simplifies FileSystems: there is no need to represent the state
        between mountpoint appearing and Mount() succeeding, and mount
        points appear automatically in ReadDir().
    
      - Mount point inodes are always associated with one filesystem over
        their lifetime.  This simplifies synchronization around unmount calls,
        which could previously lead to "unlock of unlocked mutex" panics.
    
    * (Un)mount always takes 2 locks: treeLock from the parent, and the
      treeLock of the filesystem itself, as the parent/child relation
      crosses the boundary between filesystems..
    
    * Remove unmountPending variable; Unmount now removes all known inodes
      directly, removing reliance on eventual consistency.
    
    * Document Mount(), Unmount()
    
    * Forced forgets (eg. when fusermount -u is called) will also cause
      FileSystem.Unmount() to be called.
    
    * Changes to accomodate new conventions in ZipFs/UnionFs
    
    * Configure MultiZipFs using symlinks rather than catching file
      writes.
    
    * Remove return from Mount() api call.
    4a79a89d
api.go 5.75 KB