1. 30 Jan, 2019 4 commits
  2. 23 Jan, 2019 1 commit
    • Jakob Unterwurzacher's avatar
      server: print debug message on ENODEV · dfd0ceb2
      Jakob Unterwurzacher authored
      This makes it clear when (and why) the filesystem was unmounted.
      
      Example output:
      
      $ gocryptfs -fg -nosyslog -fusedebug a b
      Password:
      Decrypting master key
      Filesystem mounted and ready.
      2019/01/23 21:52:59 rx 2: ACCESS i1 {r}
      2019/01/23 21:52:59 tx 2:     OK
      2019/01/23 21:52:59 rx 3: LOOKUP i1 [".Trash"] 7b
      2019/01/23 21:52:59 tx 3:     OK, {i0 g0 tE=1s tA=0s {M00 SZ=0 L=0 0:0 B0*0 i0:0 A 0.000000 M 0.000000 C 0.000000}}
      2019/01/23 21:52:59 rx 4: LOOKUP i1 [".Trash-1026"] 12b
      2019/01/23 21:52:59 tx 4:     OK, {i0 g0 tE=1s tA=0s {M00 SZ=0 L=0 0:0 B0*0 i0:0 A 0.000000 M 0.000000 C 0.000000}}
      2019/01/23 21:53:02 received ENODEV (unmount request), thread exiting
      2019/01/23 21:53:02 received ENODEV (unmount request), thread exiting
      2019/01/23 21:53:02 received ENODEV (unmount request), thread exiting
      dfd0ceb2
  3. 11 Jan, 2019 1 commit
    • Kirill Smelkov's avatar
      readme: Add appendix about how to read Go-FUSE debug log output · 425e8d53
      Kirill Smelkov authored
      d1c826d1 ("fuse: increase signal/noise in log messages",
      https://github.com/hanwen/go-fuse/pull/249) changed log to use
      abbreviations in the name of improving signal/noise ratio. However it
      might be not evident offhand what an abbreviation means.
      
      Add a short reference in the readme with the summary on how to read the
      log and a short example.
      
      The summary is incomplete - for example I don't describe Fh and other
      attributes that d1c826d1 did not change. I propose we review logging
      more, e.g. consider doing `Fh X` -> `fX` and maybe similarly for other
      fields, and while doing so, also populate/update the summary and example
      in the readme. In other words it is good to document current state, but
      it is not fixed in stone and can be evolved.
      425e8d53
  4. 08 Jan, 2019 1 commit
    • Kirill Smelkov's avatar
      fuse: increase signal/noise in log messages · d1c826d1
      Kirill Smelkov authored
      - use tA=...s instead of `A...` or `AttrValid=...` for time(Attr valid);
      - use tE=...s instead of `EntryValid` for time(Entry valid);
      - use iX instead of `NodeId: X` for inode X;
      - use gX instead of `Generation=X` for generation X;
      - use `[<off> +<size>)` instead of `off <off> sz <sz>`;
      
      - use
      
              rx uniq: Op iX opargs
              tx uniq: status reply...
      
        instead of
      
              Dispatch uniq: Op NodeId: X opargs
              Serialize uniq: Op code: status reply...
      
        for received/replied messages;
      
      - use `["file1", "file2"]` instead of `names: [file1, file2]` for filenames.
      
      - use `xb` instead of `x bytes`
      
      - for replied data, also log data content, but only up to first 8 bytes.
        This does not flood the log, but at the same time makes filesystem
        diagnostics easier.
      d1c826d1
  5. 17 Dec, 2018 2 commits
  6. 12 Dec, 2018 2 commits
  7. 11 Dec, 2018 1 commit
  8. 27 Oct, 2018 1 commit
  9. 26 Oct, 2018 1 commit
  10. 15 Oct, 2018 1 commit
  11. 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
  12. 10 Oct, 2018 1 commit
  13. 09 Oct, 2018 9 commits
  14. 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
  15. 01 Oct, 2018 3 commits
  16. 24 Sep, 2018 1 commit
  17. 31 Aug, 2018 3 commits
  18. 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
  19. 27 Jul, 2018 1 commit
  20. 25 Jul, 2018 1 commit