]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Merge branch 'fuse-t'
authorMatt Joiner <anacrolix@gmail.com>
Tue, 5 Sep 2023 09:03:24 +0000 (19:03 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 5 Sep 2023 22:37:14 +0000 (08:37 +1000)
fs/cmd/torrentfs/main.go
fs/file_handle.go
fs/filenode.go
fs/go.mod
fs/torrentfs.go

index bee151cba1ef1a1f30eb4dd35f8ad99b3ef8b38b..d35f5c2360bfb267df13fceea025ab9fbba8800f 100644 (file)
@@ -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)
index 7edd1ea3522f89e999fcd94ed4f932c9a346fc93..7a0c9a1eac435ed3410930762a2df5d763bf9253 100644 (file)
@@ -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
 }
index a7c03cc6aa9ca7d9c5554986319aa30d233de372..28a433e18d086d29f97941ff507370d8afa37d69 100644 (file)
@@ -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
 }
index c07545139d685fb5cfaa3a6ea0b815610eccd2d7..b42efb3101f8b45fba0384c4147ee0ea1ea02936 100644 (file)
--- 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
index 448e54355ce703d5e869c6889976295eb8cd1e05..5e0b75ea18e4bd8a944124d9bddb94957148502d 100644 (file)
@@ -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
 }