diff --git a/weed/mount/weedfs_attr.go b/weed/mount/weedfs_attr.go index be504f5e2..41575a48f 100644 --- a/weed/mount/weedfs_attr.go +++ b/weed/mount/weedfs_attr.go @@ -48,7 +48,7 @@ func (wfs *WFS) SetAttr(cancel <-chan struct{}, input *fuse.SetAttrIn, out *fuse defer fh.entryLock.Unlock() } - if size, ok := input.GetSize(); ok { + if size, ok := input.GetSize(); ok && entry != nil { glog.V(4).Infof("%v setattr set size=%v chunks=%d", path, size, len(entry.Chunks)) if size < filer.FileSize(entry) { // fmt.Printf("truncate %v \n", fullPath) @@ -141,6 +141,9 @@ func (wfs *WFS) setAttrByPbEntry(out *fuse.Attr, inode uint64, entry *filer_pb.E out.Size = filer.FileSize(entry) out.Blocks = (out.Size + blockSize - 1) / blockSize setBlksize(out, blockSize) + if entry == nil { + return + } out.Mtime = uint64(entry.Attributes.Mtime) out.Ctime = uint64(entry.Attributes.Mtime) out.Atime = uint64(entry.Attributes.Mtime) diff --git a/weed/mount/weedfs_xattr.go b/weed/mount/weedfs_xattr.go index 64cc0f6f0..fbfd6fca7 100644 --- a/weed/mount/weedfs_xattr.go +++ b/weed/mount/weedfs_xattr.go @@ -106,6 +106,9 @@ func (wfs *WFS) SetXAttr(cancel <-chan struct{}, input *fuse.SetXAttrIn, attr st if status != fuse.OK { return status } + if entry == nil { + return fuse.ENOENT + } if fh != nil { fh.entryLock.Lock() defer fh.entryLock.Unlock() @@ -181,6 +184,9 @@ func (wfs *WFS) RemoveXAttr(cancel <-chan struct{}, header *fuse.InHeader, attr if status != fuse.OK { return status } + if entry == nil { + return fuse.OK + } if fh != nil { fh.entryLock.Lock() defer fh.entryLock.Unlock()