1. 11 Oct, 2018 2 commits
    • Kirill Smelkov's avatar
      fuse: Correct NOTIFY constants/operation names · b760b557
      Kirill Smelkov authored
      - it is not NOTIFY_INVAL_DELETE, but just NOTIFY_DELETE as the kernel is
        notified of entry being deleted and there is no invalidation here.
        uapi/linux/fuse.h does not use "_INVAL_" for NOTIFY_DELETE neither.
      
      - similarly for "notify store/retrieve" _INVAL_ is not appropriate and
        neither is used in uapi/linux/fuse.h . However since we took more
        explicit approach for "notify store/retrieve" naming (see bdca0e6a
        "Add support for store notify") let's also add _CACHE suffix for
        "notify store/retrieve" operation names for consistency and for being
        less ambiguous.
      
      - for inode/entry invalidation operations, let's use _INVAL_ in internal
        _OP_NOTIFY_*, similarly to how it is used in corresponding NOTIFY_*
        constant. For example:
      
      	_OP_NOTIFY_ENTRY -> _OP_NOTIFY_INVAL_ENTRY	(corresponds to NOTIFY_INVAL_ENTRY)
      b760b557
    • Han-Wen Nienhuys's avatar
      fuse/nodefs: fix some lint errors · 6df8ddc4
      Han-Wen Nienhuys authored
      6df8ddc4
  2. 10 Oct, 2018 1 commit
  3. 09 Oct, 2018 9 commits
  4. 08 Oct, 2018 3 commits
    • Jakob Unterwurzacher's avatar
      pathfs: fix possible nil pointer dereference in GetAttr · 47211c2b
      Jakob Unterwurzacher authored
      gocryptfs user Felix Lechner reported a nil pointer dereference
      in GetAttr: https://github.com/rfjakob/gocryptfs/issues/260
      
      The crash is in line
      
      	n.setClientInode(fi.Ino)
      
      because fi is nil.
      
      This can happen when file.GetAttr() returns an error code other than
      ENOSYS and EBADF. For gocryptfs, this can only happen when an open
      file descriptor breaks. In this case it was triggered by a failing
      NFS volume.
      
      Fix the crash by erroring out for error codes that are not handled
      by the retry-by-path logic.
      47211c2b
    • Kirill Smelkov's avatar
      fuse: A bit better package documentation rendering in godoc · f4f7205f
      Kirill Smelkov authored
      Current state is: fuse's godoc package-level description is completely
      empty because there is a blank link between package-level description
      and package clause.
      
      Yes, a user still has to go through api.go and read it in full, but
      having at least something for the description is a better start, and
      removing one line is easy.
      
      We already do it this way e.g. for nodefs and in other places.
      f4f7205f
    • Kirill Smelkov's avatar
      Add support for store notify · bdca0e6a
      Kirill Smelkov authored
      I'm writing a networked filesystem which reads data in 2MB blocks from
      remote database. However read requests from the kernel come in much
      smaller sizes - for example 4K-128K.
      
      Since it would be very slow to refetch the 2MB block for e.g. every
      consecutive 4K reads, a cache for fetched data is needed. A custom cache
      would do, however since the kernel already implements pagecache to cache
      file data, it is logical to use it directly.
      
      FUSE protocol provides primitives for pagecache control. We already have
      support for e.g. invalidating a data region for inode (InodeNotify), but
      there is more there. In particular it is possible to store and
      retrieve data into/from the kernel cache with "store notify" and
      "retrieve notify" messages:
      
      https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/fuse.h?id=v4.19-rc6-177-gcec4de302c5f#n68
      https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/fuse.h?id=v4.19-rc6-177-gcec4de302c5f#n756
      
      https://git.kernel.org/linus/a1d75f2582
      https://git.kernel.org/linus/2d45ba381a
      
      This patch adds support for "store notify". Adding support for "retrieve
      notify" might be added later since a) it is not needed right now, and b)
      supporting it is a bit more work since the kernel sends a separate reply
      with data and infrastructure has to be added to glue it back to original
      "retrieve notify" server-originated request.
      
      For user-visible API I decided not to duplicate FUSE-protocol naming
      1-1 and to be more explicit in names - emphasizing it is about cache
      control - it is e.g. InodeNotifyStoreCache instead of
      InodeNotifyStore, and for retrieving it (hopefully) should be just
      InodeRetrieveCache instead of InodeNotifyRetrieveCache and a
      separate callback.
      
      Thanks beforehand,
      Kirill
      bdca0e6a
  5. 01 Oct, 2018 3 commits
  6. 24 Sep, 2018 1 commit
  7. 31 Aug, 2018 3 commits
  8. 10 Aug, 2018 1 commit
    • Chris Marget's avatar
      Removed UID test and syscall-based unmount. · 95c63709
      Chris Marget authored
      On a Linux system with go-fuse program running as root, the mount is
      performed by calling /bin/fusermount, and the unmount is performed with
      syscall.Unmount()
      
      This creates a problem on systems (CentOS 6) with a static-but-edited-by-mount
      /etc/mtab file.
      
       - fusermount adds a line to mtab when the go-fuse program starts
       - syscall.Unmount() doesn't edit the file on program exit
       - subsequent invocations of the program fail to mount with:
      
          "Mount fail: fusermount exited with code 256"
      
      Deleting the now-inaccurate mtab entry clears things up.
      
      There's probably a workaround by adding "-n" option so that mount doesn't
      edit mtab in the first place, but it's not obvious where to insert that when
      starting with the hello.go example.
      95c63709
  9. 27 Jul, 2018 1 commit
  10. 25 Jul, 2018 1 commit
  11. 24 Jul, 2018 2 commits
  12. 22 May, 2018 2 commits
  13. 08 May, 2018 5 commits
  14. 02 May, 2018 1 commit
    • Jakob Unterwurzacher's avatar
      fuse: improve SETXATTR debug logging · 41df6ec8
      Jakob Unterwurzacher authored
      Set the operationHandlers[op].DecodeIn function and
      add xattr name parsing.
      
      SETXATTR is special because it is the only opcode that
      takes a file name (the xattr name) and a binary blob
      (the xattr value). This was not supported by the
      file name parsing code:
      * setting FileNames = 1 would lump the xattr name
        and value together and truncates the last byte
      * setting FileNames = 2 truncated the last xattr
        value byte.
      
      This was solved by adding a special-case to parse(),
      which seemed less ugly than adding a special-case
      InputDebug(), or leaving the truncation as-is.
      
      Before:
        2018/05/01 16:47:39 Dispatch 6: SETXATTR, NodeId: 3.  12 bytes
      After:
        2018/05/01 16:48:36 Dispatch 6: SETXATTR, NodeId: 3. data: {sz 3 f0} names: [user.foo] 12 bytes
      
      The change only affects debug output as doSetXAttr() does its
      own bytes.SplitN(). The parsed filename *could* also be used in
      doSetXAttr(), but the code seems clearer as-is.
      41df6ec8
  15. 23 Apr, 2018 1 commit
  16. 18 Mar, 2018 1 commit
  17. 16 Mar, 2018 1 commit
  18. 01 Mar, 2018 1 commit
  19. 02 Feb, 2018 1 commit