1. 15 Jul, 2017 4 commits
    • Han-Wen Nienhuys's avatar
      fuse/pathfs: don't take pathLock in GetPath() · 68f32f6d
      Han-Wen Nienhuys authored
      The parent tracking moved into nodefs in
      commit 0107672a, so there is no need for
      taking that lock anymore.
      68f32f6d
    • Han-Wen Nienhuys's avatar
      96a198bf
    • Han-Wen Nienhuys's avatar
      fuse: fix tests for Go 1.9 · 4f10e248
      Han-Wen Nienhuys authored
      Go 1.9 uses epoll() for more efficient file I/O. File I/O causes a
      call to epoll, and the runtime makes this call take up a GOMAXPROCS
      slot.
      
      The FUSE kernel module also supports poll: polling on a file residing
      in a FUSE file system causes the kernel to sends a POLL request to the
      userspace process.  If the process responds with ENOSYS, the kernel
      will stop forwarding poll requests to the FUSE process.
      
      In a test for Go FUSE file systems, it is normal to serve the
      filesystem out of the same process that opens files in the file
      system. If this happens in Go 1.9, the epoll call can take the only
      GOMAXPROCS slot left, leaving the process unable to respond to the
      FUSE POLL opcode, deadlocking the process.
      
      This change add support for a magic file "/ .go-fuse-epoll-hack" with
      node ID uint64(-1), and on starting up the file system, the library
      calls poll() on this file, triggering the POLL opcode before the Go
      runtime had a chance to do so.
      
      There are two problem scenarios left:
      
      * File system tests that start I/O before calling WaitMount() still
        risk deadlocking themselves.
      
      * The Linux kernel keeps track of feature support in fuse_conn, which notes
      
               * The following bitfields are only for optimization purposes
               * and hence races in setting them will not cause malfunction
      
        if our forced ENOSYS gets lost due to a race condition in the
        kernel, this can still trigger.
      
      Fixes golang/go#21014 and #165
      4f10e248
    • Han-Wen Nienhuys's avatar
  2. 13 Jul, 2017 1 commit
    • Han-Wen Nienhuys's avatar
      splice: use syscall directly for splice I/O · a8bec8ce
      Han-Wen Nienhuys authored
      This avoids involving the go 1.9 poller in I/O, which causes hangs, as
      the poller does not understand the fcntl(O_NONBLOCK) tweak that we
      executed on the pipe's file descriptors.
      
      Fixes #164
      a8bec8ce
  3. 11 Jul, 2017 1 commit
    • Shayan Pooya's avatar
      Do not fork a new process to unmount if user is privileged · c878ca45
      Shayan Pooya authored
      The root user can issue the umount syscall and does not need the
      fusermount binary. Therefore, it is not necessary to fork and exec a new
      process just to run the umount binary.
      
      Golang has a global lock held for forking (See exec_unix.go in the golang
      source tree):
      "Acquire the fork lock so that no other threads create new fds that are
      not yet close-on-exec before we fork."
      
      So it would be best if processes would refrain from forking
      unnecessarily.
      Signed-off-by: default avatarShayan Pooya <shayan@arista.com>
      c878ca45
  4. 09 Jun, 2017 2 commits
  5. 24 Apr, 2017 1 commit
    • Jeff Hodges's avatar
      fix first unionfs test datarace · 5404bf0e
      Jeff Hodges authored
      This first race was easy to find and fix in the tests themselves.
      
      It exposes another race in nodefs.FileSystemConnector where a node's
      mount (and therefore, treeLock) is is not the same as the grand-parent
      node's is.
      
      Updates #138.
      5404bf0e
  6. 19 Apr, 2017 1 commit
  7. 14 Mar, 2017 1 commit
  8. 10 Mar, 2017 3 commits
  9. 21 Dec, 2016 2 commits
  10. 03 Nov, 2016 1 commit
  11. 02 Nov, 2016 3 commits
    • Han-Wen Nienhuys's avatar
      Rename test file. · f4003c9b
      Han-Wen Nienhuys authored
      Fixes #127.
      f4003c9b
    • Jonathon Reinhart's avatar
      nodefs: Change defaultNode.GetAttr() to call file.GetAttr() if not nil · 994fc0fe
      Jonathon Reinhart authored
      This enhances nodes which embed defaultNode (which is most of them),
      allowing those implementations to omit a GetAttr() method. Without this,
      when the kernel calls GetAttr() for an open file, FUSE will return a
      size of zero, causing a read() of the file to always return 0, even
      though fuse returns a nonzero number of bytes.
      
      One can leverage this behavior to create a Linux procfs-like file, which
      stat shows to be zero bytes, but can be successfully read.
      
      N.B. This behavior is only useful if the FileSystemConnector Options
      specify AttrTimeout of zero. Otherwise, the result of the first call to
      GetAttr() (file == nil) is cached, and the kernel allows zero bytes to
      be read. With this caching disabled, the next GetAttr() call (file !=
      nil) will be used to control the number of readable bytes.
      994fc0fe
    • Han-Wen Nienhuys's avatar
      a2e4f919
  12. 24 Oct, 2016 1 commit
  13. 18 Oct, 2016 2 commits
  14. 15 Sep, 2016 3 commits
  15. 25 Aug, 2016 1 commit
  16. 11 Aug, 2016 4 commits
  17. 10 Aug, 2016 1 commit
  18. 09 Aug, 2016 4 commits
  19. 04 Aug, 2016 3 commits
  20. 03 Aug, 2016 1 commit