From: Matt Joiner Date: Tue, 5 Sep 2023 09:03:24 +0000 (+1000) Subject: Merge branch 'fuse-t' X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=732069b113b5d67f231958c777997201b10c19e6;hp=e3a6f99f430d54ed7d8a2629bf8a559e399f1158;p=btrtrc.git Merge branch 'fuse-t' --- diff --git a/fs/cmd/torrentfs/main.go b/fs/cmd/torrentfs/main.go index bee151cb..d35f5c23 100644 --- a/fs/cmd/torrentfs/main.go +++ b/fs/cmd/torrentfs/main.go @@ -25,6 +25,8 @@ import ( "github.com/anacrolix/torrent/util/dirwatch" ) +var logger = log.Default.WithNames("main") + var args = struct { MetainfoDir string `help:"torrent files in this location describe the contents of the mounted filesystem"` DownloadDir string `help:"location to save torrent data"` @@ -71,7 +73,7 @@ func main() { defer envpprof.Stop() err := mainErr() if err != nil { - log.Printf("error in main: %v", err) + logger.Levelf(log.Error, "error in main: %v", err) os.Exit(1) } } @@ -82,7 +84,7 @@ func mainErr() error { os.Stderr.WriteString("y u no specify mountpoint?\n") os.Exit(2) } - conn, err := fuse.Mount(args.MountDir) + conn, err := fuse.Mount(args.MountDir, fuse.ReadOnly()) if err != nil { return fmt.Errorf("mounting: %w", err) } @@ -143,9 +145,11 @@ func mainErr() error { }() } + logger.Levelf(log.Debug, "serving fuse fs") if err := fusefs.Serve(conn, fs); err != nil { return fmt.Errorf("serving fuse fs: %w", err) } + logger.Levelf(log.Debug, "fuse fs completed successfully. waiting for conn ready") <-conn.Ready if err := conn.MountError; err != nil { return fmt.Errorf("mount error: %w", err) diff --git a/fs/file_handle.go b/fs/file_handle.go index 7edd1ea3..7a0c9a1e 100644 --- a/fs/file_handle.go +++ b/fs/file_handle.go @@ -13,7 +13,7 @@ import ( type fileHandle struct { fn fileNode - r torrent.Reader + tf *torrent.File } var _ interface { @@ -26,7 +26,8 @@ func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse if req.Dir { panic("read on directory") } - r := me.r + r := me.tf.NewReader() + defer r.Close() pos, err := r.Seek(req.Offset, io.SeekStart) if err != nil { panic(err) @@ -84,5 +85,5 @@ func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse } func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error { - return me.r.Close() + return nil } diff --git a/fs/filenode.go b/fs/filenode.go index a7c03cc6..28a433e1 100644 --- a/fs/filenode.go +++ b/fs/filenode.go @@ -23,6 +23,5 @@ func (fn fileNode) Attr(ctx context.Context, attr *fuse.Attr) error { } func (fn fileNode) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) { - r := fn.f.NewReader() - return fileHandle{fn, r}, nil + return fileHandle{fn, fn.f}, nil } diff --git a/fs/go.mod b/fs/go.mod index c0754513..b42efb31 100644 --- a/fs/go.mod +++ b/fs/go.mod @@ -2,8 +2,6 @@ module github.com/anacrolix/torrent/fs go 1.20 -toolchain go1.21.0 - require ( github.com/anacrolix/envpprof v1.2.1 github.com/anacrolix/fuse v0.2.0 diff --git a/fs/torrentfs.go b/fs/torrentfs.go index 448e5435..5e0b75ea 100644 --- a/fs/torrentfs.go +++ b/fs/torrentfs.go @@ -182,7 +182,7 @@ func (rn rootNode) ReadDirAll(ctx context.Context) (dirents []fuse.Dirent, err e } func (rn rootNode) Attr(ctx context.Context, attr *fuse.Attr) error { - attr.Mode = os.ModeDir + attr.Mode = os.ModeDir | defaultMode return nil }