diff options
| author | hilimd <68371223+hilimd@users.noreply.github.com> | 2020-10-21 20:04:11 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-21 20:04:11 +0800 |
| commit | ab1105c52472946efab9713bf15df45e14ff4514 (patch) | |
| tree | 7af939a22f3efbf055054670ec8d2e3f11a79ad6 /weed/filesys/filehandle.go | |
| parent | 2c40f56e5a2e4792361b6df0bb6e879726f340ab (diff) | |
| parent | 81cf8d04dfcbb84093044de4f10a8a92d9c8bd1c (diff) | |
| download | seaweedfs-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.go | 23 |
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 |
