Browse Source

better locking on file handle

pull/2597/head
chrislu 3 years ago
parent
commit
1bd6d289d4
  1. 12
      weed/filesys/filehandle.go
  2. 10
      weed/filesys/wfs.go

12
weed/filesys/filehandle.go

@ -26,7 +26,6 @@ type FileHandle struct {
contentType string contentType string
handle uint64 handle uint64
sync.Mutex sync.Mutex
sync.WaitGroup
f *File f *File
RequestId fuse.RequestID // unique ID for request RequestId fuse.RequestID // unique ID for request
@ -63,9 +62,6 @@ var _ = fs.HandleReleaser(&FileHandle{})
func (fh *FileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error { func (fh *FileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
fh.Add(1)
defer fh.Done()
fh.Lock() fh.Lock()
defer fh.Unlock() defer fh.Unlock()
@ -173,9 +169,6 @@ func (fh *FileHandle) readFromChunks(buff []byte, offset int64) (int64, error) {
// Write to the file handle // Write to the file handle
func (fh *FileHandle) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error { func (fh *FileHandle) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error {
fh.Add(1)
defer fh.Done()
fh.dirtyPages.writerPattern.MonitorWriteAt(req.Offset, len(req.Data)) fh.dirtyPages.writerPattern.MonitorWriteAt(req.Offset, len(req.Data))
fh.Lock() fh.Lock()
@ -217,8 +210,6 @@ func (fh *FileHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) err
glog.V(4).Infof("Release %v fh %d open=%d", fh.f.fullpath(), fh.handle, fh.f.isOpen) glog.V(4).Infof("Release %v fh %d open=%d", fh.f.fullpath(), fh.handle, fh.f.isOpen)
fh.Wait()
fh.f.wfs.handlesLock.Lock() fh.f.wfs.handlesLock.Lock()
fh.f.isOpen-- fh.f.isOpen--
fh.f.wfs.handlesLock.Unlock() fh.f.wfs.handlesLock.Unlock()
@ -250,9 +241,6 @@ func (fh *FileHandle) Flush(ctx context.Context, req *fuse.FlushRequest) error {
return nil return nil
} }
fh.Add(1)
defer fh.Done()
fh.Lock() fh.Lock()
defer fh.Unlock() defer fh.Unlock()

10
weed/filesys/wfs.go

@ -187,15 +187,15 @@ func (wfs *WFS) Fsync(file *File, header fuse.Header) error {
existingHandle, found := wfs.handles[inodeId] existingHandle, found := wfs.handles[inodeId]
wfs.handlesLock.Unlock() wfs.handlesLock.Unlock()
if found && existingHandle != nil && existingHandle.f.isOpen > 0 {
existingHandle.Add(1)
defer existingHandle.Done()
if found && existingHandle != nil {
existingHandle.Lock() existingHandle.Lock()
defer existingHandle.Unlock() defer existingHandle.Unlock()
return existingHandle.doFlush(context.Background(), header)
if existingHandle.f.isOpen > 0 {
return existingHandle.doFlush(context.Background(), header)
}
} }
return nil return nil

Loading…
Cancel
Save