fix
diff --git a/lib/fuse.c b/lib/fuse.c
index 1399dfd..9cc7028 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -501,12 +501,16 @@
 }
 
 static int lookup_path(struct fuse *f, fuse_ino_t nodeid, const char *name,
-                       const char *path, struct fuse_entry_param *e)
+                       const char *path, struct fuse_entry_param *e,
+                       struct fuse_file_info *fi)
 {
     int res;
 
     memset(e, 0, sizeof(struct fuse_entry_param));
-    res = f->op.getattr(path, &e->attr);
+    if (fi && f->op.fgetattr)
+        res = f->op.fgetattr(path, &e->attr, fi);
+    else
+        res = f->op.getattr(path, &e->attr);
     if (res == 0) {
         struct node *node;
 
@@ -604,7 +608,7 @@
         }
         err = -ENOSYS;
         if (f->op.getattr)
-            err = lookup_path(f, parent, name, path, &e);
+            err = lookup_path(f, parent, name, path, &e, NULL);
         free(path);
     }
     pthread_rwlock_unlock(&f->tree_lock);
@@ -804,7 +808,7 @@
         if (f->op.mknod && f->op.getattr) {
             err = f->op.mknod(path, mode, rdev);
             if (!err)
-                err = lookup_path(f, parent, name, path, &e);
+                err = lookup_path(f, parent, name, path, &e, NULL);
         }
         free(path);
     }
@@ -832,7 +836,7 @@
         if (f->op.mkdir && f->op.getattr) {
             err = f->op.mkdir(path, mode);
             if (!err)
-                err = lookup_path(f, parent, name, path, &e);
+                err = lookup_path(f, parent, name, path, &e, NULL);
         }
         free(path);
     }
@@ -916,7 +920,7 @@
         if (f->op.symlink && f->op.getattr) {
             err = f->op.symlink(linkname, path);
             if (!err)
-                err = lookup_path(f, parent, name, path, &e);
+                err = lookup_path(f, parent, name, path, &e, NULL);
         }
         free(path);
     }
@@ -985,7 +989,7 @@
             if (f->op.link && f->op.getattr) {
                 err = f->op.link(oldpath, newpath);
                 if (!err)
-                    err = lookup_path(f, newparent, newname, newpath, &e);
+                    err = lookup_path(f, newparent, newname, newpath, &e, NULL);
             }
             free(newpath);
         }
@@ -1016,7 +1020,7 @@
                            path);
                     fflush(stdout);
                 }
-                err = lookup_path(f, parent, name, path, &e);
+                err = lookup_path(f, parent, name, path, &e, fi);
                 if (err) {
                     if (f->op.release)
                         f->op.release(path, fi);