diff --git a/lib/fuse.c b/lib/fuse.c
index 99bca56..1e120e8 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -235,43 +235,6 @@
     return node;
 }
 
-static int path_lookup(struct fuse *f, const char *path, nodeid_t *nodeidp,
-                       unsigned long *inop)
-{
-    nodeid_t nodeid;
-    unsigned long ino;
-    int err;
-    char *s;
-    char *name;
-    char *tmp = strdup(path);
-    if (!tmp)
-        return -ENOMEM;
-
-    pthread_mutex_lock(&f->lock);
-    nodeid = FUSE_ROOT_ID;
-    ino = nodeid;
-    err = 0;
-    for  (s = tmp; (name = strsep(&s, "/")) != NULL; ) {
-        if (name[0]) {
-            struct node *node = lookup_node(f, nodeid, name);
-            if (node == NULL) {
-                err = -ENOENT;
-                break;
-            }
-            nodeid = node->nodeid;
-            ino = node->ino;
-        }
-    }
-    pthread_mutex_unlock(&f->lock);
-    free(tmp);
-    if (!err) {
-        *nodeidp = nodeid;
-        *inop = ino;
-    }
-    
-    return err;
-}
-
 static char *add_name(char *buf, char *s, const char *name)
 {
     size_t len = strlen(name);
@@ -1664,7 +1627,7 @@
     res = read(f->fd, cmd->buf, FUSE_MAX_IN);
     if (res == -1) {
         free_cmd(cmd);
-        if (fuse_exited(f) || errno == EINTR)
+        if (fuse_exited(f) || errno == EINTR || errno == ENOENT)
             return NULL;
         
         /* ENODEV means we got unmounted, so we silenty return failure */
@@ -1718,38 +1681,9 @@
 
 int fuse_invalidate(struct fuse *f, const char *path)
 {
-    int res;
-    int err;
-    nodeid_t nodeid;
-    unsigned long ino;
-    struct fuse_user_header h;
-
-    err = path_lookup(f, path, &nodeid, &ino);
-    if (err) {
-        if (err == -ENOENT)
-            return 0;
-        else
-            return err;
-    }
-
-    memset(&h, 0, sizeof(struct fuse_user_header));
-    h.opcode = FUSE_INVALIDATE;
-    h.nodeid = nodeid;
-    h.ino = ino;
-    
-    if ((f->flags & FUSE_DEBUG)) {
-        printf("INVALIDATE nodeid: %li\n", nodeid);
-        fflush(stdout);
-    }
-
-    res = write(f->fd, &h, sizeof(struct fuse_user_header));
-    if (res == -1) {
-        if (errno != ENOENT) {
-            perror("fuse: writing device");
-            return -errno;
-        }
-    }
-    return 0;
+    (void) f;
+    (void) path;
+    return -EINVAL;
 }
 
 void fuse_exit(struct fuse *f)
@@ -1829,8 +1763,10 @@
         char *s = xopts;
         char *opt;
 
-        if (xopts == NULL)
+        if (xopts == NULL) {
+            fprintf(stderr, "fuse: memory allocation failed\n");
             return -1;
+        }
         
         while((opt = strsep(&s, ","))) {
             if (strcmp(opt, "debug") == 0)
@@ -1860,8 +1796,10 @@
     }
 
     f = (struct fuse *) calloc(1, sizeof(struct fuse));
-    if (f == NULL)
+    if (f == NULL) {
+        fprintf(stderr, "fuse: failed to allocate fuse object\n");
         goto out;
+    }
 
     if (check_version(f) == -1)
         goto out_free;
@@ -1876,14 +1814,18 @@
     f->name_table_size = 14057;
     f->name_table = (struct node **)
         calloc(1, sizeof(struct node *) * f->name_table_size);
-    if (f->name_table == NULL)
+    if (f->name_table == NULL) {
+        fprintf(stderr, "fuse: memory allocation failed\n");
         goto out_free;
+    }
 
     f->id_table_size = 14057;
     f->id_table = (struct node **)
         calloc(1, sizeof(struct node *) * f->id_table_size);
-    if (f->id_table == NULL)
+    if (f->id_table == NULL) {
+        fprintf(stderr, "fuse: memory allocation failed\n");
         goto out_free_name_table;
+    }
 
 #ifndef USE_UCLIBC
      pthread_mutex_init(&f->lock, NULL);
@@ -1903,14 +1845,18 @@
     f->exited = 0;
 
     root = (struct node *) calloc(1, sizeof(struct node));
-    if (root == NULL)
+    if (root == NULL) {
+        fprintf(stderr, "fuse: memory allocation failed\n");
         goto out_free_id_table;
+    }
 
     root->mode = 0;
     root->rdev = 0;
     root->name = strdup("/");
-    if (root->name == NULL)
+    if (root->name == NULL) {
+        fprintf(stderr, "fuse: memory allocation failed\n");
         goto out_free_root;
+    }
 
     root->parent = 0;
     root->nodeid = FUSE_ROOT_ID;
@@ -1928,7 +1874,6 @@
  out_free:
     free(f);
  out:
-    fprintf(stderr, "fuse: failed to allocate fuse object\n");
     return NULL;
 }
 
