fix
diff --git a/lib/fuse.c b/lib/fuse.c
index 91c749f..042268b 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -37,10 +37,8 @@
 /** Only allow root or the owner to access the filesystem */
 #define FUSE_ALLOW_ROOT  (1 << 4)
 
-#define FUSE_KERNEL_MINOR_VERSION_NEED 1
-#define FUSE_VERSION_FILE_OLD "/proc/fs/fuse/version"
-#define FUSE_VERSION_FILE_NEW "/sys/fs/fuse/version"
-#define FUSE_DEV_OLD "/proc/fs/fuse/dev"
+/** Make a best effort to fill in inode number in a readdir **/
+#define FUSE_READDIR_INO (1 << 5)
 
 #define FUSE_MAX_PATH 4096
 #define PARAM_T(inarg, type) (((char *)(inarg)) + sizeof(type))
@@ -82,6 +80,7 @@
     int filled;
     unsigned long fh;
     int error;
+    struct node *node;
 };
 
 struct fuse_cmd {
@@ -1597,6 +1596,11 @@
     dh->contents = NULL;
     dh->len = 0;
     dh->filled = 0;
+    if (f->flags & FUSE_READDIR_INO) {
+        pthread_mutex_lock(&f->lock);
+        dh->node = get_node(f, in->nodeid);
+        pthread_mutex_unlock(&f->lock);
+    }
     mutex_init(&dh->lock);
 
     memset(&outarg, 0, sizeof(outarg));
@@ -1649,8 +1653,17 @@
     unsigned newlen;
     unsigned char *newptr;
 
-    if (!(dh->fuse->flags & FUSE_USE_INO))
+    if (!(dh->fuse->flags & FUSE_USE_INO)) {
         ino = (ino_t) -1;
+        if (dh->fuse->flags & FUSE_READDIR_INO) {
+            struct node *node;
+            pthread_mutex_lock(&dh->fuse->lock);
+            node = lookup_node(dh->fuse, dh->node->nodeid, name);
+            if (node)
+                ino  = (ino_t) node->nodeid;
+            pthread_mutex_unlock(&dh->fuse->lock);
+        }
+    }
 
     if (namelen > FUSE_NAME_MAX)
         namelen = FUSE_NAME_MAX;
@@ -2097,7 +2110,8 @@
     if (strcmp(opt, "debug") == 0 ||
         strcmp(opt, "hard_remove") == 0 ||
         strcmp(opt, "use_ino") == 0 ||
-        strcmp(opt, "allow_root") == 0)
+        strcmp(opt, "allow_root") == 0 ||
+        strcmp(opt, "readdir_ino") == 0)
         return 1;
     else
         return 0;
@@ -2124,6 +2138,8 @@
                 f->flags |= FUSE_USE_INO;
             else if (strcmp(opt, "allow_root") == 0)
                 f->flags |= FUSE_ALLOW_ROOT;
+            else if (strcmp(opt, "readdir_ino") == 0)
+                f->flags |= FUSE_READDIR_INO;
             else
                 fprintf(stderr, "fuse: warning: unknown option `%s'\n", opt);
         }