Skip to content

Commit f3493db

Browse files
committed
Merge branch 'develop'
2 parents d4329b4 + c4860d7 commit f3493db

File tree

4 files changed

+42
-31
lines changed

4 files changed

+42
-31
lines changed

dir.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,13 @@ func (d *Dir) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenRe
6060
op := NewOpenOp(req, d.path)
6161
defer trace(op)
6262
newdir := NewDir(d.parent, d.name, d.fs)
63-
if err := newdir.doOpen(d.path, req.Flags); err != nil {
63+
size, err := newdir.doOpen(d.path, req.Flags)
64+
if err != nil {
6465
return nil, err
6566
}
6667
newdir.SetProcessInfo(req.Header)
6768
resp.Handle = newdir.handleID
68-
op.FileSize = newdir.size
69+
op.FileSize = size
6970
op.BlockSize = newdir.blksize
7071
return newdir, nil
7172
}

file.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ func (f *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenR
3131
op := NewOpenOp(req, f.path)
3232
defer trace(op)
3333
newfile := NewFile(f.parent, f.name, f.fs)
34-
if err := newfile.doOpen(f.path, req.Flags); err != nil {
34+
size, err := newfile.doOpen(f.path, req.Flags)
35+
if err != nil {
3536
return nil, err
3637
}
3738
resp.Handle = newfile.handleID
38-
op.FileSize = newfile.size
39+
op.FileSize = size
3940
op.BlockSize = newfile.blksize
4041
return newfile, nil
4142
}
@@ -57,10 +58,11 @@ func (f *File) Flush(ctx context.Context, req *fuse.FlushRequest) error {
5758
}
5859
op := NewFlushOp(req, f.path)
5960
defer trace(op)
60-
if err := f.doSync(); err != nil {
61+
size, err := f.doSync()
62+
if err != nil {
6163
return err
6264
}
63-
op.FileSize = f.size
65+
op.FileSize = size
6466
op.Flags = fuse.OpenFlags(f.flags)
6567
return nil
6668
}
@@ -69,8 +71,13 @@ func (f *File) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadR
6971
if !f.isOpen() {
7072
return fuse.ENOTSUP
7173
}
72-
op := NewReadOp(req, f.path, f.size)
74+
op := NewReadOp(req, f.path)
7375
defer trace(op)
76+
size, err := f.getFileSize()
77+
if err != nil {
78+
return err
79+
}
80+
op.FileSize = size
7481
n, err := f.file.ReadAt(resp.Data[0:req.Size], req.Offset)
7582
resp.Data = resp.Data[0:n]
7683
op.BytesRead = n

fsops.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func (h *Header) MarshalJSON() ([]byte, error) {
7777
func (h *Header) MarshalCSV() []string {
7878
// Pre-allocate so that operation-specific marshallers don't need
7979
// to re-allocate to extend the serialized version of each operation
80-
res := make([]string, 0, 16)
80+
res := make([]string, 0, 32)
8181
return append(
8282
res,
8383
h.Start.UTC().Format(time.RFC3339Nano),
@@ -284,10 +284,9 @@ type ReadOp struct {
284284
BytesRead int
285285
}
286286

287-
func NewReadOp(req *fuse.ReadRequest, path string, fileSize uint64) *ReadOp {
287+
func NewReadOp(req *fuse.ReadRequest, path string) *ReadOp {
288288
return &ReadOp{
289289
Header: NewHeaderFile(req.Header, path, FsRead),
290-
FileSize: fileSize,
291290
Offset: req.Offset,
292291
Size: req.Size,
293292
BytesRead: -1,

handle.go

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ type Handle struct {
3434
file *os.File
3535
handleID fuse.HandleID
3636
flags fuse.OpenFlags
37-
size uint64
3837
blksize uint32
3938
}
4039

@@ -50,21 +49,22 @@ func (h *Handle) isOpen() bool {
5049
return h.file != nil
5150
}
5251

53-
func (h *Handle) doOpen(path string, flags fuse.OpenFlags) error {
52+
func (h *Handle) doOpen(path string, flags fuse.OpenFlags) (uint64, error) {
5453
if h.isOpen() {
55-
return nil
54+
return 0, nil
5655
}
5756
mode := int(flags & fuse.OpenAccessModeMask)
5857
perm := os.FileMode(flags).Perm()
5958
file, err := os.OpenFile(path, mode, perm)
6059
if err != nil {
61-
return osErrorToFuseError(err)
60+
return 0, osErrorToFuseError(err)
6261
}
63-
if h.size, h.blksize, err = getSizeAndBlkSize(file); err != nil {
64-
return err
62+
blksize, err := getBlkSize(file)
63+
if err != nil {
64+
return 0, err
6565
}
66-
h.file, h.flags, h.handleID = file, flags, newHandleID()
67-
return nil
66+
h.file, h.flags, h.handleID, h.blksize = file, flags, newHandleID(), blksize
67+
return h.getFileSize()
6868
}
6969

7070
func (h *Handle) doCreate(path string, flags fuse.OpenFlags, mode os.FileMode) error {
@@ -75,19 +75,20 @@ func (h *Handle) doCreate(path string, flags fuse.OpenFlags, mode os.FileMode) e
7575
if err != nil {
7676
return osErrorToFuseError(err)
7777
}
78-
if _, h.blksize, err = getSizeAndBlkSize(file); err != nil {
78+
blksize, err := getBlkSize(file)
79+
if err != nil {
7980
return err
8081
}
81-
h.file, h.flags, h.handleID = file, flags, newHandleID()
82+
h.file, h.flags, h.handleID, h.blksize = file, flags, newHandleID(), blksize
8283
return nil
8384
}
8485

85-
func getSizeAndBlkSize(f *os.File) (uint64, uint32, error) {
86+
func (h *Handle) getFileSize() (uint64, error) {
8687
var stat syscall.Stat_t
87-
if err := syscall.Fstat(int(f.Fd()), &stat); err != nil {
88-
return 0, 0, osErrorToFuseError(err)
88+
if err := syscall.Fstat(int(h.file.Fd()), &stat); err != nil {
89+
return 0, osErrorToFuseError(err)
8990
}
90-
return uint64(stat.Size), uint32(stat.Blksize), nil
91+
return uint64(stat.Size), nil
9192
}
9293

9394
func (h *Handle) doClose() error {
@@ -100,17 +101,20 @@ func (h *Handle) doClose() error {
100101
return nil
101102
}
102103

103-
func (h *Handle) doSync() error {
104+
func (h *Handle) doSync() (uint64, error) {
104105
if !h.isOpen() {
105-
return nil
106+
return 0, nil
106107
}
107108
if err := h.file.Sync(); err != nil {
108-
return osErrorToFuseError(err)
109+
return 0, osErrorToFuseError(err)
109110
}
111+
return h.getFileSize()
112+
}
113+
114+
func getBlkSize(f *os.File) (uint32, error) {
110115
var stat syscall.Stat_t
111-
if err := syscall.Fstat(int(h.file.Fd()), &stat); err != nil {
112-
return osErrorToFuseError(err)
116+
if err := syscall.Fstat(int(f.Fd()), &stat); err != nil {
117+
return 0, osErrorToFuseError(err)
113118
}
114-
h.size = uint64(stat.Size)
115-
return nil
119+
return uint32(stat.Blksize), nil
116120
}

0 commit comments

Comments
 (0)