func Serve(mountPoint, cgroupDir string) error { c, err := fuse.Mount( mountPoint, fuse.FSName("cgroupfs"), fuse.Subtype("cgroupfs"), fuse.LocalVolume(), fuse.VolumeName("cgroup volume"), fuse.AllowOther(), ) if err != nil { return err } defer c.Close() go handleStopSignals(mountPoint) var srv *fusefs.Server if os.Getenv("FUSE_DEBUG") != "" { srv = fusefs.New(c, &fusefs.Config{ Debug: func(msg interface{}) { fmt.Printf("%s\n", msg) }, }) } else { srv = fusefs.New(c, nil) } err = srv.Serve(fs.FS{cgroupDir}) if err != nil { return err } // check if the mount process has an error to report <-c.Ready if err := c.MountError; err != nil { return err } return nil }
// Mounted mounts the fuse.Server at a temporary directory. // // It also waits until the filesystem is known to be visible (OS X // workaround). // // After successful return, caller must clean up by calling Close. func Mounted(srv *fs.Server) (*Mount, error) { dir, err := ioutil.TempDir("", "fusetest") if err != nil { return nil, err } c, err := fuse.Mount(dir) if err != nil { return nil, err } done := make(chan struct{}) serveErr := make(chan error, 1) mnt := &Mount{ Dir: dir, Conn: c, Error: serveErr, done: done, } go func() { defer close(done) serveErr <- srv.Serve(c) }() select { case <-mnt.Conn.Ready: if mnt.Conn.MountError != nil { return nil, err } return mnt, err case err = <-mnt.Error: // Serve quit early if err != nil { return nil, err } return nil, errors.New("Serve exited early") } }
// Mount SVFS c, err := fuse.Mount(mountpoint, mountOptions(device)...) if err != nil { goto Err } defer c.Close() // Initialize SVFS if err = fs.Init(); err != nil { goto Err } // Serve SVFS srv = fusefs.New(c, nil) if err = srv.Serve(&fs); err != nil { goto Err } // Check for mount errors <-c.Ready // Memory profiling if memProf != "" { createMemProf(memProf) } if err = c.MountError; err != nil { goto Err }