GithubHelp home page GithubHelp logo

fuse's Introduction

fuse's People

Contributors

asjoyner avatar bradfitz avatar dustin avatar guelfey avatar jacobsa avatar kkoroviev avatar presotto avatar pwaller avatar rsc avatar sahib avatar songgao avatar strib avatar tv42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fuse's Issues

Mount options

When the new mount API is solid, it will have a place to set configuration and mount options. I don't want to blindly pass through strings to -o, there's essentially too much power in passing the strings right through -- several of them change how the FUSE protocol behaves, and the part that talks the protocol needs to be aware of them.

The plan goes something like this

  1. bazil.org/fuse Serve/Mount/fs.Init API needs to be replaced with something cleaner. Think about both Linux and OS X, and how their behavior is completely different. Don't take away too much power from pure protocol translators that don't want to use bazil.org/fuse/fs. Worry about InitResponse.MaxWrite ultimately being a question of bazil.org/fuse, not the filesystem, etc.

    Right now, that seems like I'll remove FSIniter, and make that happen during the Mount call. There may or may not be a callback function involved, depending on whether there's anything that really needs reaction, instead of just configuring.

  2. that new Mount API gets to take a *Options argument, and in it we add fields like

    type Options struct{
    ...
    AllowOthers bool
    AllowRoot bool
    ...
    }
    

    Or, follow http://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis

See also earlier pull requests (that try to do the thing I don't want to do, and pass strings through):

FreeBSD Statfs etc operations seem to get wrong results for a brief period after mount

Putting a time.Sleep(100 * time.Millisecond) after the mount subprocess returns seems to make many more tests pass, but I refuse to resort to racy time-based criteria. How do we know when the mount is actually ready?

This may be a FreeBSD limitation. Needs a platform expert.

Attached is a log from TestStatfs run, note Blocks:0x0, Files:0x0 and no Statfs request for the first case calling syscall.Statfs, and Blocks:0x2a, Files:0xd a moment later with syscall.Fstatfs.

--- FAIL: TestStatfs (0.11s)
        serve_test.go:164: Statfs got: syscall.Statfs_t{Version:0x20030518, Type:0xed, Flags:0x900a, Bsize:0x1000, Iosize:0x1000, Blocks:0x0, Bfree:0x0, Bavail:0, Files:0x0, Ffree:0, Syncwrites:0x0, Asyncwrites:0x0, Syncreads:0x0, Asyncre
ads:0x0, Spare:[10]uint64{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, Namemax:0x0, Owner:0x3e9, Fsid:syscall.Fsid{Val:[2]int32{0, 0}}, Charspare:[80]int8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Fstypename:[16]int8{102, 117, 115, 101, 102, 115, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0}, Mntfromname:[88]int8{47, 100, 101, 118, 47, 102, 117, 115, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Mntonname:[88]int8{47, 116, 109, 112, 47, 102, 117, 115, 101, 116, 101, 115, 116, 55, 52, 56, 55, 54, 55, 51, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
        serve_test.go:166: got Blocks = 0; want 42
        serve_test.go:169: got Files = 0; want 13
        mounted.go:109: FUSE: <- Init [ID=0x1 Node=0x0 Uid=1001 Gid=1001 Pid=3564] 7.8 ra=65536 fl=0
        mounted.go:109: FUSE: -> ID=0x1 Init {MaxReadahead:0 Flags:InitBigWrites MaxWrite:131072}
        mounted.go:109: FUSE: <- Open [ID=0x2 Node=0x1 Uid=1001 Gid=1001 Pid=3560] dir=true fl=OpenReadOnly
        mounted.go:109: FUSE: -> ID=0x2 Open {Handle:1 Flags:0}
        mounted.go:109: FUSE: <- Statfs [ID=0x3 Node=0x1 Uid=1001 Gid=1001 Pid=3560]
        mounted.go:109: FUSE: -> ID=0x3 Statfs {Blocks:42 Bfree:0 Bavail:0 Files:13 Ffree:0 Bsize:0 Namelen:0 Frsize:0}
        serve_test.go:184: Fstatfs got: syscall.Statfs_t{Version:0x20030518, Type:0xed, Flags:0x900a, Bsize:0x0, Iosize:0x1000, Blocks:0x2a, Bfree:0x0, Bavail:0, Files:0xd, Ffree:0, Syncwrites:0x0, Asyncwrites:0x0, Syncreads:0x0, Asyncrea
ds:0x0, Spare:[10]uint64{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, Namemax:0x0, Owner:0x3e9, Fsid:syscall.Fsid{Val:[2]int32{0, 0}}, Charspare:[80]int8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Fstypename:[16]int8{102, 117, 115, 101, 102, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0}, Mntfromname:[88]int8{47, 100, 101, 118, 47, 102, 117, 115, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Mntonname:[88]int8{47, 116, 109, 112, 47, 102, 117, 115, 101, 116, 101, 115, 116, 55, 52, 56, 55, 54, 55, 51, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}
        mounted.go:109: FUSE: <- Release [ID=0x4 Node=0x1 Uid=1001 Gid=1001 Pid=3560] 0x1 fl=OpenReadOnly rfl=0 owner=0x0
        mounted.go:109: FUSE: -> ID=0x4
        mounted.go:109: FUSE: <- Forget [ID=0x5 Node=0x1 Uid=1001 Gid=1001 Pid=3560] 1
        mounted.go:109: FUSE: -> ID=0x5
        mounted.go:109: FUSE: <- Destroy [ID=0x6 Node=0x0 Uid=1001 Gid=1001 Pid=3560]
        mounted.go:109: FUSE: -> ID=0x6

Also seen with any other similar operation giving zeroed results, e.g. TestStatRoot:

--- FAIL: TestStatRoot (0.03s)
        serve_test.go:224: root has weird access mode: ----------
        serve_test.go:229: root has wrong inode: 0
        serve_test.go:232: root has wrong link count: 0
        mounted.go:109: FUSE: <- Init [ID=0x1 Node=0x0 Uid=1001 Gid=1001 Pid=3565] 7.8 ra=65536 fl=0
        mounted.go:109: FUSE: -> ID=0x1 Init {MaxReadahead:0 Flags:InitBigWrites MaxWrite:131072}
        mounted.go:109: FUSE: <- Forget [ID=0x2 Node=0x1 Uid=1001 Gid=1001 Pid=3560] 1
        mounted.go:109: FUSE: -> ID=0x2
        mounted.go:109: FUSE: <- Destroy [ID=0x3 Node=0x0 Uid=1001 Gid=1001 Pid=3560]
        mounted.go:109: FUSE: -> ID=0x3

Package fuse forces stat::st_nlink to be non-zero

The method Attr.attr contains this snippet:

if out.Nlink < 1 {
  out.Nlink = 1
}

This effectively forbids stat(2) from ever returning nlink == 0. But that is not realistic -- it is possible for stat(2) to do that, when a file has been unlinked but some process still has it open. See for example the program below, which produces this output for the default file system on OS X:

Nlink: 1
Nlink: 0

The effect of this bug is that the fuse package forces fuse file systems to erroneously return nlink == 1 for unlinked files.

Program:

package main

import (
        "fmt"
        "io/ioutil"
        "os"
        "syscall"
)

func main() {
        var err error

        // Create a file.
        err = ioutil.WriteFile("bar", []byte{}, 0400)
        if err != nil {
                panic(err)
        }

        // Open it for reading.
        f, err := os.Open("bar")
        if err != nil {
                panic(err)
        }

        // Stat it.
        fi, err := f.Stat()
        if err != nil {
                panic(err)
        }

        fmt.Println("Nlink:", fi.Sys().(*syscall.Stat_t).Nlink)

        // Unlink it.
        err = os.Remove("bar")
        if err != nil {
                panic(err)
        }

        // Stat it again.
        fi, err = f.Stat()
        if err != nil {
                panic(err)
        }

        fmt.Println("Nlink:", fi.Sys().(*syscall.Stat_t).Nlink)
}

bugShortKernelWrite can trigger on FUSE connection abort

This was triggered either by a fusermount -u or echo 1 >/sys/fs/fuse/connections/XXX/abort, not sure which.

2014/08/06 11:51:52 FUSE: short kernel write: written=-1/24 error="no such file or directory" stack=
goroutine 68612 [running]:
bazil.org/fuse.stack(0x0, 0x0)
    /home/tv/go/src/bazil.org/fuse/debug.go:9 +0x80
bazil.org/fuse.(*Conn).respond(0xc20800e040, 0xc2080a14f8, 0x18)
    /home/tv/go/src/bazil.org/fuse/fuse.go:848 +0x155
bazil.org/fuse.(*WriteRequest).Respond(0xc208004480, 0xc208036560)
    /home/tv/go/src/bazil.org/fuse/fuse.go:1567 +0x78
bazil.org/fuse/fs.(*serveConn).serve(0xc2080480a0, 0x7fa37ea88a98, 0xc208004480)
    /home/tv/go/src/bazil.org/fuse/fs/serve.go:1116 +0x2b0a
created by bazil.org/fuse/fs.(*Server).Serve
    /home/tv/go/src/bazil.org/fuse/fs/serve.go:335 +0x5b0

The client side saw ECONNABORTED from a write.

Should probably catch that case and handle cleaner; add a stress test.

Wait for in-flight goroutines to end

Right now, fs.Serve can return while goroutines responding to requests are still alive. This might mean the process exits before we actually reply to the kernel.

This is probably a good opportunity to introduce a worker pool, to avoid spawning too many goroutines.

Document WriteRequest / Setattr behavior especially around resizing files

I'm not sure how to interpret the data in a WriteRequest. Consider this modified hello.go filesystem: https://gist.github.com/trevordixon/87f54e9cba9b51347e26/revisions

If I run echo "hi" > hello to replace the contents of that file, I'd expect req.Data to just be "hi", but instead, it replaces the first few bytes of the original contents, then all the rest of the original is there at the end.

How am I to interpret that WriteRequest? What does a good Write handler look like?

Thanks in advance for help! I'll be sure to submit a pull request with ideas for documentation improvements.

FUSE requesting delete when running with allow_other

So I added the allow_other option in mount_darwin.go, weirdly though when I run it and paste in a file, something ends up calling Remove on the directory. You can see the request at the end of the following. Any idea what would be causing that? - Thanks

2014/10/09 12:31:11 FUSE: <- Open [ID=0x11 Node=0x8 Uid=501 Gid=20 Pid=268] dir=false fl=OpenReadOnly
Try Open: /Users/ryanstout/Sites/infinitydrive/go/drive/landing.jpg - false
2014/10/09 12:31:11 FUSE: -> ID=0x11 Open {Handle:2 Flags:0}
2014/10/09 12:31:11 FUSE: <- Access [ID=0x10 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x2
2014/10/09 12:31:11 FUSE: -> ID=0x10
2014/10/09 12:31:11 FUSE: <- Access [ID=0x12 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x4
2014/10/09 12:31:11 FUSE: -> ID=0x12
2014/10/09 12:31:11 FUSE: <- Access [ID=0x0 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x0
2014/10/09 12:31:11 FUSE: <- Getxattr [ID=0x1 Node=0x8 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/10/09 12:31:11 FUSE: -> ID=0x1 error=attribute not found
2014/10/09 12:31:11 FUSE: <- Flush [ID=0x2 Node=0x8 Uid=501 Gid=20 Pid=268] 0x2 fl=0x0 lk=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x2
2014/10/09 12:31:11 FUSE: <- Release [ID=0x3 Node=0x8 Uid=501 Gid=20 Pid=268] 0x2 fl=OpenReadOnly rfl=0 owner=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x3
2014/10/09 12:31:11 FUSE: <- Access [ID=0x5 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x5
2014/10/09 12:31:11 FUSE: <- Access [ID=0x4 Node=0x1 Uid=501 Gid=20 Pid=65] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x4
2014/10/09 12:31:11 FUSE: <- Access [ID=0x8 Node=0x8 Uid=501 Gid=20 Pid=65] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x8
2014/10/09 12:31:11 FUSE: <- Access [ID=0x6 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x6
2014/10/09 12:31:11 FUSE: <- Getattr [ID=0xa Node=0x8 Uid=501 Gid=20 Pid=65]
2014/10/09 12:31:11 FUSE: -> ID=0xa Getattr {AttrValid:1m0s Attr:{Inode:5021085273292100706 Size:248531 Blocks:0 Atime:2014-10-09 12:31:01.205671785 -0600 MDT Mtime:2014-10-09 12:31:11 -0600 MDT Ctime:2014-10-09 12:31:01.205671785 -0600 MDT Crtime:2014-10-09 12:31:01.205671785 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:0 Gid:20 Rdev:0 Flags:0}}
2014/10/09 12:31:11 FUSE: <- Access [ID=0xb Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0xb
2014/10/09 12:31:11 FUSE: <- Access [ID=0x9 Node=0x1 Uid=501 Gid=20 Pid=65] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x9
2014/10/09 12:31:11 FUSE: <- Getxattr [ID=0x7 Node=0x8 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/10/09 12:31:11 FUSE: -> ID=0x7 error=attribute not found
2014/10/09 12:31:11 FUSE: <- Access [ID=0xd Node=0x8 Uid=501 Gid=20 Pid=65] mask=0x4
2014/10/09 12:31:11 FUSE: -> ID=0xd
2014/10/09 12:31:11 FUSE: <- Access [ID=0xc Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0xc
2014/10/09 12:31:11 FUSE: <- Open [ID=0xf Node=0x8 Uid=501 Gid=20 Pid=65] dir=false fl=OpenReadOnly
Try Open: /Users/ryanstout/Sites/infinitydrive/go/drive/landing.jpg - false
2014/10/09 12:31:11 FUSE: -> ID=0xf Open {Handle:2 Flags:0}
2014/10/09 12:31:11 FUSE: <- Access [ID=0xe Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0xe
2014/10/09 12:31:11 FUSE: <- Flush [ID=0x11 Node=0x8 Uid=501 Gid=20 Pid=65] 0x2 fl=0x0 lk=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x11
2014/10/09 12:31:11 FUSE: <- Release [ID=0x10 Node=0x8 Uid=501 Gid=20 Pid=65] 0x2 fl=OpenReadOnly rfl=0 owner=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x10
2014/10/09 12:31:11 FUSE: <- Access [ID=0x12 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x12
2014/10/09 12:31:11 FUSE: <- Access [ID=0x0 Node=0x1 Uid=0 Gid=0 Pid=65] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x0
2014/10/09 12:31:11 FUSE: <- Getattr [ID=0x1 Node=0x8 Uid=501 Gid=20 Pid=268]
2014/10/09 12:31:11 FUSE: -> ID=0x1 Getattr {AttrValid:1m0s Attr:{Inode:5021085273292100706 Size:248531 Blocks:0 Atime:2014-10-09 12:31:01.205671785 -0600 MDT Mtime:2014-10-09 12:31:11 -0600 MDT Ctime:2014-10-09 12:31:01.205671785 -0600 MDT Crtime:2014-10-09 12:31:01.205671785 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:0 Gid:20 Rdev:0 Flags:0}}
2014/10/09 12:31:11 FUSE: <- Getxattr [ID=0x2 Node=0x8 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/10/09 12:31:11 FUSE: -> ID=0x2 error=attribute not found
2014/10/09 12:31:11 FUSE: <- Access [ID=0x3 Node=0x8 Uid=0 Gid=0 Pid=65] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x3
2014/10/09 12:31:11 FUSE: <- Access [ID=0x5 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x5
2014/10/09 12:31:11 FUSE: <- Access [ID=0x4 Node=0x8 Uid=0 Gid=0 Pid=65] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x4
2014/10/09 12:31:11 FUSE: <- Access [ID=0x8 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x8
2014/10/09 12:31:11 FUSE: <- Access [ID=0x6 Node=0x1 Uid=0 Gid=0 Pid=65] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0x6
2014/10/09 12:31:11 FUSE: <- Access [ID=0xa Node=0x8 Uid=0 Gid=0 Pid=65] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0xa
2014/10/09 12:31:11 FUSE: <- Access [ID=0xb Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/10/09 12:31:11 FUSE: -> ID=0xb
2014/10/09 12:31:11 FUSE: <- Access [ID=0x9 Node=0x8 Uid=501 Gid=20 Pid=268] mask=0x0
2014/10/09 12:31:11 FUSE: -> ID=0x9
2014/10/09 12:31:11 FUSE: <- Remove [ID=0x7 Node=0x1 Uid=501 Gid=20 Pid=268] "landing.jpg" dir=false
Delete: /Users/ryanstout/Sites/infinitydrive/go/drive/landing.jpg

does not compile

$ go get bazil.org/fuse # bazil.org/fuse

go/src/bazil.org/fuse/fuse.go:111: undefined: mount
go/src/bazil.org/fuse/fuse.go:343: undefined: setattrIn
go/src/bazil.org/fuse/fuse.go:344: invalid expression unsafe.Sizeof(_in)
go/src/bazil.org/fuse/fuse.go:885: undefined: attr
go/src/bazil.org/fuse/fuse.go:947: invalid expression unsafe.Sizeof(_out)
go/src/bazil.org/fuse/fuse.go:1075: invalid expression unsafe.Sizeof(_out)
go/src/bazil.org/fuse/fuse.go:1151: invalid expression unsafe.Sizeof(_out)
go/src/bazil.org/fuse/fuse_kernel.go:273: undefined: attr
go/src/bazil.org/fuse/fuse_kernel.go:285: undefined: attr
go/src/bazil.org/fuse/fuse_kernel.go:365: undefined: attr
go/src/bazil.org/fuse/fuse.go:1151: too many errors

Handle.Read passing in the wrong number of bytes on an append

When I first start the file system I'm testing with and append to a file, the Read on the Handle has the wrong size in fuse.ReadRequest This causes the append to fail. Doing something like:

echo "Add more text to a file" >> existing_file.txt

Here's the code:
https://github.com/ryanstout/mirrorfs/

At the moment you need to set the path to the mirrored folder at:
https://github.com/ryanstout/mirrorfs/blob/master/src/drive.go#L24

Let me know if you are able to duplicate and if its something on my end. I messed with it for a while, but couldn't find anything that made it work.

Thanks!

Ready should be closed asynchronously on Linux

You mention that fusermount never blocks on Linux, however you should perform this asynchronously as you do with mounting on Darwin so the behaviour doesn't differ. This makes it possible to detect potential race conditions and deadlocks when not on Darwin that will otherwise occur on Darwin.

Conn teardown

How do I teardown a FUSE conn? I wish to handle SIGINT in the server and force an unmount.

"fs" package name is likely to collide

The bazil.org/fuse/fs package has a pretty generic name ("fs"), and it's one that's likely to collide with the name of an implementation-detail package in a tool that mounts a fuse file system -- something like github.com/me/mytool/fs.

In the spirit of io/ioutil, net/http/httptest, net/http/httputil, and so on, can I convince you to rename it to bazil.org/fuse/fusefs?

handle forget-counting internally

Hello,

It looks to me like treating forget properly requires maintaining a reference count on a given Node that tracks a whole buch of different requests (open, lookup, mkdir, etc) as well as forget requests. See this message:

http://fuse.996288.n3.nabble.com/rapid-inode-number-reuse-EBUSY-errors-from-mkdir-td10776.html

Would it be possible to track these counts in the fuse/fs module, and then expose a simpler interface that only executes a callback when all kernel references to a Node have been forgotten? The docs on the NodeForgetter type are slim enough that I'm not clear how to use it. Presumably I would need to do the reference counting myself, which would seem a shame... although perhaps there is a use case where you can't do it in the fuse/fs helper code?

-o local support on OSX

On OSX you can pass in -o local when using something like libfuse to run as a local disk (which allows for things like spotlight indexing and a trash folder, and the ability to share it over SMB/AFP) I chatted with @tv42 about this, but I just wanted to create an issue for it. Thanks so much!

OS X .Trashes items do not see Remove when emptying trash

Ok, so feel free to say this it outside of the scope of bazil/fuse, but I've got my file system working and I added -o local,... to mount_darwin.go to run the file system locally. On osx when I drag a file to the trash, it goes to a .Trashes folder on the file system. (I can even restore fine) The weird thing though is that when I empty the trash, I don't get any Remove or Rename's. Any idea what OSX does when you clear the trash on a local file system? The files just stay there and the trash bin shows full. I'm just wondering if anyone has any ideas on this? Thanks!

races on *os.File

net.Conn may be guaranteed concurrency safe, but *os.File is not.

==================
WARNING: DATA RACE
Write by goroutine 15:
  os.(*file).close()
      /home/tv/src/go/src/pkg/os/file_unix.go:108 +0x19b
  os.(*File).Close()
      /home/tv/src/go/src/pkg/os/file_unix.go:97 +0x94
  bazil.org/fuse.(*Conn).Close()
      /home/tv/go/src/bazil.org/fuse/fuse.go:373 +0x5d
  bazil.org/bazil/server.func·004()
      /home/tv/go/src/bazil.org/bazil/server/server.go:121 +0x1dd

Previous read by goroutine 28:
  bazil.org/fuse.(*Conn).fd()
      /home/tv/go/src/bazil.org/fuse/fuse.go:377 +0x80
  bazil.org/fuse.(*Conn).respond()
      /home/tv/go/src/bazil.org/fuse/fuse.go:847 +0xdf
  bazil.org/fuse.(*ReleaseRequest).Respond()
      /home/tv/go/src/bazil.org/fuse/fuse.go:1429 +0xce
  bazil.org/fuse/fs.(*serveConn).serve()
      /home/tv/go/src/bazil.org/fuse/fs/serve.go:1161 +0x4eff

Goroutine 15 (running) created at:
  bazil.org/bazil/server.(*App).serveMount()
      /home/tv/go/src/bazil.org/bazil/server/server.go:121 +0x414
  bazil.org/bazil/server.func·005()
      /home/tv/go/src/bazil.org/bazil/server/server.go:227 +0x10e

Goroutine 28 (finished) created at:
  bazil.org/fuse/fs.(*Server).Serve()
      /home/tv/go/src/bazil.org/fuse/fs/serve.go:334 +0x86b
  bazil.org/fuse/fs.Serve()
      /home/tv/go/src/bazil.org/fuse/fs/serve.go:345 +0xb7
  bazil.org/bazil/server.func·004()
      /home/tv/go/src/bazil.org/bazil/server/server.go:120 +0x193
==================

This ruins the idea of using Close to wake up a blocked Read on /dev/fuse.

Performance

Sorry to be this guy, but I just wanted to get some thoughts from someone with more experience with fuse. I've done a mirror file system (as a test), and I'm seeing write performance at about 1/10th what it is to write directly to the disk (for a folder of 3mb images) Would direct_io help here? I saw where it got disabled. I tried increasing the block size, but that didn't seem to make much different. I'm on osx using osxfuse.

Thanks,
Ryan

ReadDir: Long listings not paginated

It appears that HandleReadDirer does not provide a way to paginate listings
https://github.com/bazillion/fuse/blob/master/fs/serve.go#L1044

fuse library and posix readdir provides paginated listings with the offset. This allows the ability to list long directories and not require the entire result to be stored in memory.

http://fuse.sourceforge.net/doxygen/structfuse__operations.html#a0f634deda31d1e1c42664585ae820076

Any plans to support ReadDir with offset?

Direct I/O used by default doesn't support mmap on OS X

I had a problem running git clone on my FUSE filesystem: git always died with a SIGBUS pretty fast after starting it. When debugging the problem, I found that git crashed when accessing mmaped memory.

The problem seems to be that mmap is not compatible with direct I/O on OS X as described in two mailing list posts (1 and 2) from 2008. When looking at the current version of XNU coming with 10.9, the problem still doesn't seem to be fixed.

The serve API enables direct I/O by default for Open and Create. I don't what the reason is for doing that, but breaking mmap on OS X by default seems like a bad idea to me. When clearing the fuse.OpenDirectIO flag in my Open and Create implementations, mmap works (and git dies at a later point with an I/O error, which I'll have to fix :)).

@tv42 What are your thoughts on this?

Can I force Lookup to be re-called so I can return a new fs.Node?

I've realized NodeStringLookuper.Lookup only gets called once per node; apparently the resulting fs.Node is cached after that. Is there any way to invalidate that cache? At some point I'd like to do a "refresh" and destroy that node, replacing it with a new value. Is my only option to modify the existing Node?

StatfsResponse.Frsize

Re: your comment in fuse.go:936,

frsize is the "fundamental block size": the size of the smallest independently
addressable/allocatable data block on the storage.

bsize is the "preferred block size": the system will attempt to do all
operations in multiples of this size unless it absolutely must do otherwise.

Support read-only mounting

Is it possible to add a MountOptions factory for mounting the file system in read-only mode? The mount system call has flags MNT_RDONLY (OS X) or MS_RDONLY (Linux), but I don't know if the fuse mounting programs support it.

<-c.Ready closing without an error

Strange issue I'm running into. It looks like bazil.org/fuse is closing the socket and returning without an error. Without any unmounting on my part (or disk arbitrage, tried in non-local mode), I will see "Done Running printed when some operation seems to take a long time. Any ideas? Thanks

    c, err := fuse.Mount(mountpoint)
    if err != nil {
        log.Fatal(err)
    }
    defer c.Close()


    err = fs.Serve(c, FS{drivePath})
    if err != nil {
        log.Fatal(err)
    return
    }

    // check if the mount process has an error to report
    <-c.Ready

    if err := c.MountError; err != nil {
    // log.Fatal(err)
    fmt.Printf("Mount error: %s\n", c.MountError, c)

    }

  fmt.Printf("Done Running\n")

FreeBSD Symlink seems to not create a Node

--- FAIL: TestSymlink (0.13s)
        mounted.go:119: FUSE: <- Init [ID=0x1 Node=0x0 Uid=1001 Gid=1001 Pid=3506] 7.8 ra=65536 fl=0
        mounted.go:119: FUSE: -> ID=0x1 Init {MaxReadahead:0 Flags:InitBigWrites MaxWrite:131072}
        mounted.go:119: FUSE: <- Lookup [ID=0x2 Node=0x1 Uid=1001 Gid=1001 Pid=3491] "symlink.file"
        mounted.go:119: FUSE: -> ID=0x2 error=ENOENT
        mounted.go:119: FUSE: <- Symlink [ID=0x3 Node=0x1 Uid=1001 Gid=1001 Pid=3491] from "symlink.file" to target "/some-target"
        mounted.go:119: FUSE: -> ID=0x3 Lookup {Node:2 Generation:0 EntryValid:1m0s AttrValid:1m0s Attr:{Inode:3885631175911693613 Size:0 Blocks:0 Atime:2015-03-05 05:22:33.75275607 +0000 UTC Mtime:2015-03-05 05:22:33.75275607 +0000 UTC Ctime:2015-03-05 05:22:33.75275607 +0000 UTC Crtime:2015-03-05 05:22:33.75275607 +0000 UTC Mode:Lrw-rw-rw- Nlink:1 Uid:0 Gid:0 Rdev:0 Flags:0}}
        mounted.go:119: FUSE: <- Lookup [ID=0x4 Node=0x1 Uid=1001 Gid=1001 Pid=3491] "symlink.file"
        mounted.go:119: FUSE: -> ID=0x4 error=ENOENT
        serve_test.go:695: os.Readlink: readlink /tmp/fusetest290659679/symlink.file: no such file or directory
        mounted.go:119: FUSE: <- Forget [ID=0x5 Node=0x1 Uid=1001 Gid=1001 Pid=3491] 1
        mounted.go:119: FUSE: -> ID=0x5
        mounted.go:119: FUSE: <- Forget [ID=0x6 Node=0x2 Uid=1001 Gid=1001 Pid=3491] 1
        mounted.go:119: FUSE: -> ID=0x6
        mounted.go:119: FUSE: <- Destroy [ID=0x7 Node=0x0 Uid=1001 Gid=1001 Pid=3491]
        mounted.go:119: FUSE: -> ID=0x7

Large Setxattr causes /dev/fuse to close on OSX

I'm not really sure what to make of this, any help would be much appreciated. On OSX, I have one file that if I copy in, it causes the fs.Serve to return. I tracked this down to here: https://github.com/bazillion/fuse/blob/master/fuse.go#L403 Basically, the syscall.Read returns n == 0 and an error with "operation not supported by device" as the .Error()

Here's what I get if I enable fuse.debug: Sorry, there's a little bit of my debugging logs in there. I'm not really sure what to make of this.

The file has an xattr of com.apple.ResourceFork. I know this is weird, but if I delete that xattr, then it works. Any ideas? Thanks

2014/09/29 14:09:10 FUSE: <- Access [ID=0xb Node=0x1 Uid=501 Gid=20 Pid=490] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xb
2014/09/29 14:09:10 FUSE: <- Access [ID=0x12 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x12
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x10 Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0x10 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xf Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xf
2014/09/29 14:09:10 FUSE: <- Access [ID=0xc Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xc
2014/09/29 14:09:10 FUSE: <- Access [ID=0x11 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: <- Access [ID=0xd Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xd
2014/09/29 14:09:10 FUSE: <- Access [ID=0x14 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x14
2014/09/29 14:09:10 FUSE: <- Access [ID=0x0 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x0
2014/09/29 14:09:10 FUSE: <- Access [ID=0xe Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xe
2014/09/29 14:09:10 FUSE: <- Lookup [ID=0x5 Node=0x1 Uid=501 Gid=20 Pid=268] "landing 2.jpg"
2014/09/29 14:09:10 FUSE: -> ID=0x5 error=ENOENT
2014/09/29 14:09:10 FUSE: <- Lookup [ID=0x1 Node=0x1 Uid=501 Gid=20 Pid=268] "landing 2.jpg"
2014/09/29 14:09:10 FUSE: -> ID=0x1 error=ENOENT
2014/09/29 14:09:10 FUSE: <- Lookup [ID=0x3 Node=0x1 Uid=501 Gid=20 Pid=268] "landing 2.jpg"
2014/09/29 14:09:10 FUSE: -> ID=0x3 error=ENOENT
2014/09/29 14:09:10 FUSE: <- Lookup [ID=0x2 Node=0x1 Uid=501 Gid=20 Pid=268] "landing 2.jpg"
2014/09/29 14:09:10 FUSE: -> ID=0x2 error=ENOENT
2014/09/29 14:09:10 FUSE: <- Access [ID=0x4 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x4
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x7 Node=0x1 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0x7 error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0xa Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xa
2014/09/29 14:09:10 FUSE: <- Access [ID=0x8 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x8
2014/09/29 14:09:10 FUSE: <- Access [ID=0x6 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x6
2014/09/29 14:09:10 FUSE: <- Access [ID=0x9 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x9
2014/09/29 14:09:10 FUSE: <- Access [ID=0x13 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x13
2014/09/29 14:09:10 FUSE: <- Access [ID=0xb Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xb
2014/09/29 14:09:10 FUSE: <- Lookup [ID=0x12 Node=0x1 Uid=501 Gid=20 Pid=268] "landing 2.jpg"
2014/09/29 14:09:10 FUSE: -> ID=0x12 error=ENOENT
2014/09/29 14:09:10 FUSE: <- Access [ID=0x10 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x10
2014/09/29 14:09:10 FUSE: <- Create [ID=0xf Node=0x1 Uid=501 Gid=20 Pid=268] "landing 2.jpg" fl=OpenReadWrite+OpenCreate mode=-rw-r--r--
Open: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0xf Create {LookupResponse:{Node:2 Generation:0 EntryValid:1m0s AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}} OpenResponse:{Handle:1 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Lookup [ID=0xc Node=0x1 Uid=501 Gid=20 Pid=268] "._landing 2.jpg"
2014/09/29 14:09:10 FUSE: -> ID=0xc error=ENOENT
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0x11 Node=0x2 Uid=0 Gid=0 Pid=0]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x11 Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Flush [ID=0xd Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 fl=0x0 lk=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xd
2014/09/29 14:09:10 FUSE: <- Release [ID=0x14 Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 fl=OpenReadOnly rfl=0 owner=0x0
Release: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg, true
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityFileHash
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityFileHash
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityRemoteState
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityFileSize
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityThumb
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityFileHash
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityRemoteState
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityFileSize
Set Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg: infinityThumb
2014/09/29 14:09:10 FUSE: -> ID=0x14
2014/09/29 14:09:10 FUSE: <- Access [ID=0x0 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x0
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0xe Node=0x2 Uid=501 Gid=20 Pid=268]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0xe Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x5 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0x5 error=attribute not found
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x1 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/09/29 14:09:10 FUSE: -> ID=0x1 error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x3 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x3
2014/09/29 14:09:10 FUSE: <- Access [ID=0x2 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x2
2014/09/29 14:09:10 FUSE: <- Access [ID=0x4 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x4
2014/09/29 14:09:10 FUSE: <- Access [ID=0x7 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x7
2014/09/29 14:09:10 FUSE: <- Access [ID=0xa Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xa
2014/09/29 14:09:10 FUSE: <- Access [ID=0x8 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x8
2014/09/29 14:09:10 FUSE: <- Access [ID=0x6 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x6
2014/09/29 14:09:10 FUSE: <- Setxattr [ID=0x13 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 62726f6b4d414353000000000000000000000000000000000000000000000000 fl=8 @0x0
2014/09/29 14:09:10 FUSE: -> ID=0x13
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0xb Node=0x2 Uid=0 Gid=0 Pid=0]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0xb Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Access [ID=0x12 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x12
2014/09/29 14:09:10 FUSE: <- Access [ID=0x10 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x10
2014/09/29 14:09:10 FUSE: <- Access [ID=0xf Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xf
2014/09/29 14:09:10 FUSE: <- Access [ID=0xc Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xc
2014/09/29 14:09:10 FUSE: <- Access [ID=0x11 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: <- Access [ID=0xd Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xd
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x14 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0x14 Getxattr 62726f6b4d414353000000000000000000000000000000000000000000000000
2014/09/29 14:09:10 FUSE: <- Access [ID=0x0 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x0
2014/09/29 14:09:10 FUSE: <- Access [ID=0xe Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xe
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x5 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/09/29 14:09:10 FUSE: -> ID=0x5 error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x1 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x1
2014/09/29 14:09:10 FUSE: <- Access [ID=0x3 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x3
2014/09/29 14:09:10 FUSE: <- Access [ID=0x2 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x2
2014/09/29 14:09:10 FUSE: <- Access [ID=0x4 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x4
2014/09/29 14:09:10 FUSE: <- Access [ID=0x7 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x7
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0xa Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0xa Getxattr 62726f6b4d414353000000000000000000000000000000000000000000000000
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x8 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/09/29 14:09:10 FUSE: -> ID=0x8 error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x6 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x6
2014/09/29 14:09:10 FUSE: <- Access [ID=0x9 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x9
2014/09/29 14:09:10 FUSE: <- Open [ID=0x13 Node=0x2 Uid=501 Gid=20 Pid=268] dir=false fl=OpenReadOnly
2014/09/29 14:09:10 FUSE: -> ID=0x13 Open {Handle:1 Flags:0}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xb Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xb
2014/09/29 14:09:10 FUSE: <- Flush [ID=0x12 Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 fl=0x0 lk=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x12
2014/09/29 14:09:10 FUSE: <- Release [ID=0x10 Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 fl=OpenReadOnly rfl=0 owner=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x10
2014/09/29 14:09:10 FUSE: <- Access [ID=0xf Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xf
2014/09/29 14:09:10 FUSE: <- Access [ID=0xc Node=0x1 Uid=501 Gid=20 Pid=81] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xc
2014/09/29 14:09:10 FUSE: <- Access [ID=0x11 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: <- Access [ID=0xd Node=0x2 Uid=501 Gid=20 Pid=81] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xd
2014/09/29 14:09:10 FUSE: <- Access [ID=0x14 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x14
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0x0 Node=0x2 Uid=501 Gid=20 Pid=81]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x0 Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xe Node=0x2 Uid=501 Gid=20 Pid=81] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0xe
2014/09/29 14:09:10 FUSE: <- Open [ID=0x5 Node=0x2 Uid=501 Gid=20 Pid=81] dir=false fl=OpenReadOnly
2014/09/29 14:09:10 FUSE: -> ID=0x5 Open {Handle:1 Flags:0}
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x1 Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0x1 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Flush [ID=0x3 Node=0x2 Uid=501 Gid=20 Pid=81] 0x1 fl=0x0 lk=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x3
2014/09/29 14:09:10 FUSE: <- Release [ID=0x2 Node=0x2 Uid=501 Gid=20 Pid=81] 0x1 fl=OpenReadOnly rfl=0 owner=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x2
2014/09/29 14:09:10 FUSE: <- Access [ID=0x4 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x4
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0x7 Node=0x2 Uid=501 Gid=20 Pid=268]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x7 Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xa Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xa
2014/09/29 14:09:10 FUSE: <- Access [ID=0x8 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x8
2014/09/29 14:09:10 FUSE: <- Access [ID=0x6 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x6
2014/09/29 14:09:10 FUSE: <- Access [ID=0x9 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x9
2014/09/29 14:09:10 FUSE: <- Access [ID=0x13 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x13
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0xb Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0xb Getxattr 62726f6b4d414353000000000000000000000000000000000000000000000000
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x12 Node=0x1 Uid=0 Gid=0 Pid=282]

2014/09/29 14:09:10 FUSE: <- Access [ID=0x10 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x12 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: -> ID=0x10
2014/09/29 14:09:10 FUSE: <- Access [ID=0xf Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xf
2014/09/29 14:09:10 FUSE: <- Access [ID=0xc Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: <- Access [ID=0x11 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: -> ID=0xc
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0xd Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/09/29 14:09:10 FUSE: -> ID=0xd error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x14 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x14
2014/09/29 14:09:10 FUSE: <- Access [ID=0x0 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x0
2014/09/29 14:09:10 FUSE: <- Access [ID=0xe Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xe
2014/09/29 14:09:10 FUSE: <- Access [ID=0x5 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x5
2014/09/29 14:09:10 FUSE: <- Access [ID=0x1 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x1
2014/09/29 14:09:10 FUSE: <- Access [ID=0x3 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x3
2014/09/29 14:09:10 FUSE: <- Access [ID=0x2 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x2
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x4 Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0x4 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Access [ID=0x7 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x7
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0xa Node=0x1 Uid=0 Gid=0 Pid=282]

2014/09/29 14:09:10 FUSE: -> ID=0xa Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Access [ID=0x8 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x8
2014/09/29 14:09:10 FUSE: <- Access [ID=0x6 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x6
2014/09/29 14:09:10 FUSE: <- Access [ID=0x9 Node=0x1 Uid=0 Gid=0 Pid=282] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x9
2014/09/29 14:09:10 FUSE: <- Access [ID=0x13 Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x13
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0xb Node=0x1 Uid=501 Gid=20 Pid=12768] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0xb error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x12 Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x12
2014/09/29 14:09:10 FUSE: <- Access [ID=0x10 Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x10
2014/09/29 14:09:10 FUSE: <- Access [ID=0xf Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xf
2014/09/29 14:09:10 FUSE: <- Access [ID=0x11 Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: <- Access [ID=0xc Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xc
2014/09/29 14:09:10 FUSE: <- Access [ID=0xd Node=0x1 Uid=501 Gid=20 Pid=12768] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xd
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x14 Node=0x1 Uid=501 Gid=20 Pid=12768]

2014/09/29 14:09:10 FUSE: -> ID=0x14 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x0 Node=0x1 Uid=501 Gid=20 Pid=12768]

2014/09/29 14:09:10 FUSE: -> ID=0x0 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0xe Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0xe Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x5 Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0x5 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Access [ID=0x1 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x1
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x3 Node=0x1 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0x3 error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x2 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x2
2014/09/29 14:09:10 FUSE: <- Access [ID=0x4 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x4
2014/09/29 14:09:10 FUSE: <- Access [ID=0x7 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x7
2014/09/29 14:09:10 FUSE: <- Access [ID=0xa Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0xa
2014/09/29 14:09:10 FUSE: <- Access [ID=0x8 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x8
2014/09/29 14:09:10 FUSE: <- Access [ID=0x6 Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x6
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x9 Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0x9 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Statfs [ID=0x13 Node=0x1 Uid=501 Gid=20 Pid=268]

2014/09/29 14:09:10 FUSE: -> ID=0x13 Statfs {Blocks:34359738368 Bfree:17179869184 Bavail:17179869184 Files:536870912 Ffree:268435456 Bsize:4194304 Namelen:2048 Frsize:0}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xb Node=0x1 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0xb
2014/09/29 14:09:10 FUSE: <- Access [ID=0x12 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x12
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0x10 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 32 @0
2014/09/29 14:09:10 FUSE: -> ID=0x10 Getxattr 62726f6b4d414353000000000000000000000000000000000000000000000000
2014/09/29 14:09:10 FUSE: <- Getxattr [ID=0xf Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.ResourceFork" 0 @0
2014/09/29 14:09:10 FUSE: -> ID=0xf error=attribute not found
2014/09/29 14:09:10 FUSE: <- Access [ID=0x11 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: <- Access [ID=0xc Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xc
2014/09/29 14:09:10 FUSE: <- Access [ID=0xd Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xd
2014/09/29 14:09:10 FUSE: <- Access [ID=0x14 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x4
2014/09/29 14:09:10 FUSE: -> ID=0x14
2014/09/29 14:09:10 FUSE: <- Access [ID=0x0 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x1
2014/09/29 14:09:10 FUSE: -> ID=0x0
2014/09/29 14:09:10 FUSE: <- Access [ID=0xe Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0xe
2014/09/29 14:09:10 FUSE: <- Access [ID=0x5 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x0
2014/09/29 14:09:10 FUSE: -> ID=0x5
2014/09/29 14:09:10 FUSE: <- Access [ID=0x1 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x1
2014/09/29 14:09:10 FUSE: <- Open [ID=0x3 Node=0x2 Uid=501 Gid=20 Pid=268] dir=false fl=OpenWriteOnly
Open: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
2014/09/29 14:09:10 FUSE: -> ID=0x3 Open {Handle:1 Flags:0}
2014/09/29 14:09:10 FUSE: <- Setattr [ID=0x2 Node=0x2 Uid=501 Gid=20 Pid=268] size=0 handle=0x1
!Setattr /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x2 Setattr {AttrValid:5s Attr:{Inode:0 Size:0 Blocks:0 Atime:0001-01-01 00:00:00 +0000 UTC Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:0001-01-01 00:00:00 +0000 UTC Crtime:0001-01-01 00:00:00 +0000 UTC Mode:-rw-r--r-- Nlink:0 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0x4 Node=0x2 Uid=0 Gid=0 Pid=0]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x4 Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Access [ID=0x7 Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0x7
2014/09/29 14:09:10 FUSE: <- Setxattr [ID=0xa Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.quarantine" 303034333b35336636623432363b476f6f676c655c7832304368726f6d652e6170703b33364436373339322d433441332d344542412d394343372d453733433844303042453638 fl=8 @0x0
2014/09/29 14:09:10 FUSE: -> ID=0xa
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0x8 Node=0x2 Uid=0 Gid=0 Pid=0]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x8 Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:0 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Write [ID=0x6 Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 131072 @0 fl=0
Write /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg - 131072 at 0
2014/09/29 14:09:10 FUSE: -> ID=0x6 Write {Size:131072}
2014/09/29 14:09:10 FUSE: <- Write [ID=0x9 Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 114688 @131072 fl=0
Write /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg - 114688 at 131072
2014/09/29 14:09:10 FUSE: -> ID=0x9 Write {Size:114688}
2014/09/29 14:09:10 FUSE: <- Write [ID=0x13 Node=0x2 Uid=501 Gid=20 Pid=268] 0x1 2771 @245760 fl=0
Write /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg - 2771 at 245760
2014/09/29 14:09:10 FUSE: -> ID=0x13 Write {Size:2771}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xb Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xb
2014/09/29 14:09:10 FUSE: <- Removexattr [ID=0x12 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo"
2014/09/29 14:09:10 FUSE: -> ID=0x12
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0x10 Node=0x2 Uid=0 Gid=0 Pid=0]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0x10 Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:248531 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xf Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xf
2014/09/29 14:09:10 FUSE: <- Setxattr [ID=0x11 Node=0x2 Uid=501 Gid=20 Pid=268] "com.apple.FinderInfo" 0000000000000000040000000000000000000000000000000000000000000000 fl=0 @0x0
2014/09/29 14:09:10 FUSE: -> ID=0x11
2014/09/29 14:09:10 FUSE: <- Getattr [ID=0xc Node=0x2 Uid=0 Gid=0 Pid=0]
Get Attr: /Users/ryanstout/Sites/infinitydrive/go/drive/landing 2.jpg
Got
2014/09/29 14:09:10 FUSE: -> ID=0xc Getattr {AttrValid:1m0s Attr:{Inode:7122798477543916100 Size:248531 Blocks:0 Atime:2014-09-29 14:08:54.350541779 -0600 MDT Mtime:2014-09-29 14:09:10 -0600 MDT Ctime:2014-09-29 14:08:54.350541779 -0600 MDT Crtime:2014-09-29 14:08:54.350541779 -0600 MDT Mode:-rw-r--r-- Nlink:1 Uid:501 Gid:20 Rdev:0 Flags:0}}
2014/09/29 14:09:10 FUSE: <- Access [ID=0xd Node=0x2 Uid=501 Gid=20 Pid=268] mask=0x2
2014/09/29 14:09:10 FUSE: -> ID=0xd
Done Running

Server returns nil when Release is long running operation (OSX)

I'm not sure if it's a well known issue, but on OSX Release function is "blocking" operation (on Linux is not blocking). So if Release is long running operation (e.g. uploading file) then probably fuse.Conn.ReadRequest gets EOF and fuse Server returns nil.

I worked around it wrapping most of my Release code by go routine, but wondering if it's possible to fix it and/or return more verbose value from fuse Server.

please, provide complete example

Thanks for this fork. Is that possible to provide complete example of usage this package?

For example i need to imitate directory structure and able to change owner of file and perms.

Help with issue

@tv42 I've got one issue where it looks like FUSE isn't following iosize. I'm wondering if I could pay you for some help. (I can pay pretty well, shoot me an e-mail if you are interested: ryan at agileproductions.com )

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.