func (d *Dir) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error) {
	if d.IsArchive() || d.fs.readonly {
		return nil, fuse.EPERM
	}
	d.fs.Lock()
	defer d.fs.Unlock()
	d.Attrs.Atime = time.Now()
	c := new(Dir)
	c.Init(req.Name, req.Mode, d, d.fs)
	c.Attrs.Uid = req.Header.Uid
	c.Attrs.Gid = req.Header.Gid
	d.Children[c.Name] = c
	d.Attrs.Mtime = time.Now()
	d.fs.ndirs++
	logger.Info("mkdir %q in %q, mode %v", c.Name, d.Path(), req.Mode)
	return c, nil
}
Link creates a new directory entry in the receiver based on an
existing Node. Receiver must be a directory.

A LinkRequest is a request to create a hard link and contains the old node
ID and the NewName (a string), the old node is supplied to the server.

https://godoc.org/bazil.org/fuse/fs#NodeLinker
TODO: Implement
func (d *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old Node) (fs.Node, error) {
return nil, nil
}
Mkdir creates (but not opens) a directory in the given directory.

https://godoc.org/bazil.org/fuse/fs#NodeMkdirer
package memfs
import (
	"os"
	"time"
	"bazil.org/fuse"
	"bazil.org/fuse/fs"
	"golang.org/x/net/context"
)
type Dir struct {
	Node
	Children map[string]Entity  
}
func (d *Dir) Init(name string, mode os.FileMode, parent *Dir, memfs *FileSystem) {
	mode = os.ModeDir | mode
	d.Node.Init(name, mode, parent, memfs)
	d.Children = make(map[string]Entity)
}
func (d *Dir) GetNode() *Node {
	return &d.Node
}
func (d *Dir) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error) {
	if d.IsArchive() || d.fs.readonly {
		return nil, nil, fuse.EPERM
	}
	d.fs.Lock()
	defer d.fs.Unlock()
	d.Attrs.Atime = time.Now()
	f := new(File)
	f.Init(req.Name, req.Mode, d, d.fs)
	f.Attrs.Uid = req.Header.Uid
	f.Attrs.Gid = req.Header.Gid
	d.Children[f.Name] = f
	d.Attrs.Mtime = time.Now()
	d.fs.nfiles++
	logger.Info("create %q in %q, mode %v", f.Name, d.Path(), req.Mode)
	return f, f, nil
}