diff --git a/lib/fuse.c b/lib/fuse.c
index 6b3b6ae..5dad478 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -994,6 +994,66 @@
     reply_entry(req, &e, err);
 }
 
+static void fuse_create(fuse_req_t req, fuse_ino_t parent, const char *name,
+                        mode_t mode, struct fuse_file_info *fi)
+{
+    struct fuse *f = req_fuse_prepare(req);
+    struct fuse_entry_param e;
+    char *path;
+    int err;
+
+    err = -ENOENT;
+    pthread_rwlock_rdlock(&f->tree_lock);
+    path = get_path_name(f, parent, name);
+    if (path != NULL) {
+        err = -ENOSYS;
+        if (f->op.create && f->op.getattr) {
+            err = f->op.create(path, mode, fi);
+            if (!err) {
+                if (f->flags & FUSE_DEBUG) {
+                    printf("CREATE[%lu] flags: 0x%x %s\n", fi->fh, fi->flags,
+                           path);
+                    fflush(stdout);
+                }
+                err = lookup_path(f, parent, name, path, &e);
+                if (err) {
+                    if (f->op.release)
+                        f->op.release(path, fi);
+                } else if (!S_ISREG(e.attr.st_mode)) {
+                    err = -EIO;
+                    if (f->op.release)
+                        f->op.release(path, fi);
+                    forget_node(f, e.ino, 1);
+                }
+            }
+        }
+    }
+
+    if (!err) {
+        if (f->flags & FUSE_DIRECT_IO)
+            fi->direct_io = 1;
+        if (f->flags & FUSE_KERNEL_CACHE)
+            fi->keep_cache = 1;
+
+        pthread_mutex_lock(&f->lock);
+        if (fuse_reply_create(req, &e, fi) == -ENOENT) {
+            /* The open syscall was interrupted, so it must be cancelled */
+            if(f->op.release)
+                f->op.release(path, fi);
+            forget_node(f, e.ino, 1);
+        } else {
+            struct node *node = get_node(f, e.ino);
+            node->open_count ++;
+        }
+        pthread_mutex_unlock(&f->lock);
+    } else
+        reply_err(req, err);
+
+    if (path)
+        free(path);
+    pthread_rwlock_unlock(&f->tree_lock);
+}
+
 static void fuse_open(fuse_req_t req, fuse_ino_t ino,
                       struct fuse_file_info *fi)
 {
@@ -1654,6 +1714,7 @@
     .symlink = fuse_symlink,
     .rename = fuse_rename,
     .link = fuse_link,
+    .create = fuse_create,
     .open = fuse_open,
     .read = fuse_read,
     .write = fuse_write,
