aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/filehandle.go
diff options
context:
space:
mode:
authorhilimd <68371223+hilimd@users.noreply.github.com>2020-10-21 20:04:11 +0800
committerGitHub <noreply@github.com>2020-10-21 20:04:11 +0800
commitab1105c52472946efab9713bf15df45e14ff4514 (patch)
tree7af939a22f3efbf055054670ec8d2e3f11a79ad6 /weed/filesys/filehandle.go
parent2c40f56e5a2e4792361b6df0bb6e879726f340ab (diff)
parent81cf8d04dfcbb84093044de4f10a8a92d9c8bd1c (diff)
downloadseaweedfs-ab1105c52472946efab9713bf15df45e14ff4514.tar.xz
seaweedfs-ab1105c52472946efab9713bf15df45e14ff4514.zip
Merge pull request #31 from chrislusf/master
sync
Diffstat (limited to 'weed/filesys/filehandle.go')
-rw-r--r--weed/filesys/filehandle.go23
1 files changed, 8 insertions, 15 deletions
diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go
index 45abfcc5c..e3163117c 100644
--- a/weed/filesys/filehandle.go
+++ b/weed/filesys/filehandle.go
@@ -142,8 +142,7 @@ func (fh *FileHandle) Write(ctx context.Context, req *fuse.WriteRequest, resp *f
defer fh.Unlock()
// write the request to volume servers
- data := make([]byte, len(req.Data))
- copy(data, req.Data)
+ data := req.Data
fh.f.entry.Attributes.FileSize = uint64(max(req.Offset+int64(len(data)), int64(fh.f.entry.Attributes.FileSize)))
glog.V(4).Infof("%v write [%d,%d) %d", fh.f.fullpath(), req.Offset, req.Offset+int64(len(req.Data)), len(req.Data))
@@ -186,8 +185,10 @@ func (fh *FileHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) err
}
// stop the goroutine
- fh.dirtyPages.chunkSaveErrChanClosed = true
- close(fh.dirtyPages.chunkSaveErrChan)
+ if !fh.dirtyPages.chunkSaveErrChanClosed {
+ fh.dirtyPages.chunkSaveErrChanClosed = true
+ close(fh.dirtyPages.chunkSaveErrChan)
+ }
return nil
}
@@ -207,25 +208,17 @@ func (fh *FileHandle) doFlush(ctx context.Context, header fuse.Header) error {
fh.dirtyPages.saveExistingPagesToStorage()
- var err error
- go func() {
- for t := range fh.dirtyPages.chunkSaveErrChan {
- if t != nil {
- err = t
- }
- }
- }()
fh.dirtyPages.writeWaitGroup.Wait()
- if err != nil {
- return err
+ if fh.dirtyPages.lastErr != nil {
+ return fh.dirtyPages.lastErr
}
if !fh.f.dirtyMetadata {
return nil
}
- err = fh.f.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
+ err := fh.f.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
if fh.f.entry.Attributes != nil {
fh.f.entry.Attributes.Mime = fh.contentType