aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/dir.go
diff options
context:
space:
mode:
authorhilimd <68371223+hilimd@users.noreply.github.com>2020-11-05 12:02:47 +0800
committerGitHub <noreply@github.com>2020-11-05 12:02:47 +0800
commit546f1bcb903dd26ba447cdbedb972736fdb31b42 (patch)
tree09b8119faa7162acaa7240de5af6fd0bebe96c2f /weed/filesys/dir.go
parent843865f2ca534bb6286b7a3d79c436384d875608 (diff)
parent75887ba2a20b9f3f7ff9c4b8998cf3af0c0f48c2 (diff)
downloadseaweedfs-546f1bcb903dd26ba447cdbedb972736fdb31b42.tar.xz
seaweedfs-546f1bcb903dd26ba447cdbedb972736fdb31b42.zip
Merge pull request #34 from chrislusf/master
sync
Diffstat (limited to 'weed/filesys/dir.go')
-rw-r--r--weed/filesys/dir.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/weed/filesys/dir.go b/weed/filesys/dir.go
index ae2ae3418..a8481a435 100644
--- a/weed/filesys/dir.go
+++ b/weed/filesys/dir.go
@@ -27,6 +27,7 @@ type Dir struct {
var _ = fs.Node(&Dir{})
var _ = fs.NodeCreater(&Dir{})
+var _ = fs.NodeMknoder(&Dir{})
var _ = fs.NodeMkdirer(&Dir{})
var _ = fs.NodeFsyncer(&Dir{})
var _ = fs.NodeRequestLookuper(&Dir{})
@@ -179,6 +180,20 @@ func (dir *Dir) Create(ctx context.Context, req *fuse.CreateRequest,
}
+func (dir *Dir) Mknod(ctx context.Context, req *fuse.MknodRequest) (fs.Node, error) {
+ if req.Mode&os.ModeNamedPipe != 0 {
+ glog.V(1).Infof("mknod named pipe %s", req.String())
+ return nil, fuse.ENOSYS
+ }
+ if req.Mode&req.Mode&os.ModeSocket != 0 {
+ glog.V(1).Infof("mknod socket %s", req.String())
+ return nil, fuse.ENOSYS
+ }
+ // not going to support mknod for normal files either
+ glog.V(1).Infof("mknod %s", req.String())
+ return nil, fuse.ENOSYS
+}
+
func (dir *Dir) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error) {
glog.V(4).Infof("mkdir %s: %s", dir.FullPath(), req.Name)
@@ -347,8 +362,22 @@ func (dir *Dir) removeOneFile(req *fuse.RemoveRequest) error {
// then, delete meta cache and fsNode cache
dir.wfs.metaCache.DeleteEntry(context.Background(), filePath)
+
+ // clear entry inside the file
+ fsNode := dir.wfs.fsNodeCache.GetFsNode(filePath)
+ if fsNode != nil {
+ if file, ok := fsNode.(*File); ok {
+ file.clearEntry()
+ }
+ }
dir.wfs.fsNodeCache.DeleteFsNode(filePath)
+ // remove current file handle if any
+ dir.wfs.handlesLock.Lock()
+ defer dir.wfs.handlesLock.Unlock()
+ inodeId := util.NewFullPath(dir.FullPath(), req.Name).AsInode()
+ delete(dir.wfs.handles, inodeId)
+
// delete the chunks last
if isDeleteData {
dir.wfs.deleteFileChunks(entry.Chunks)