Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-6]: src/lib/libperfuse Pull up following revision(s) (requested b...



details:   https://anonhg.NetBSD.org/src/rev/65aa18ab0af6
branches:  netbsd-6
changeset: 776978:65aa18ab0af6
user:      snj <snj%NetBSD.org@localhost>
date:      Fri Jun 19 17:40:47 2015 +0000

description:
Pull up following revision(s) (requested by manu in ticket #1306):
        lib/libperfuse/ops.c: revision 1.84
Fix dot-lookup when readdir does not provide inodes
Some filesystems do not provide inode numbers through readdir (FUSE
mounts
without -o use_ino). We therefore have to lookup each directory entry to
get the missing numbers.
dot and double-dot are exceptions, as we already know the values.
Moreover,
the lookup code does not expect to get requests for dot and will abort
perfused(8) when it gets some. In order to fix that, we just check for
dot and double-dot special case and use the known values instead of
sending
a lookup.

diffstat:

 lib/libperfuse/ops.c |  20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diffs (34 lines):

diff -r 7d39c0393b09 -r 65aa18ab0af6 lib/libperfuse/ops.c
--- a/lib/libperfuse/ops.c      Fri Jun 19 17:35:48 2015 +0000
+++ b/lib/libperfuse/ops.c      Fri Jun 19 17:40:47 2015 +0000
@@ -1,4 +1,4 @@
-/*  $NetBSD: ops.c,v 1.50.2.22 2015/06/19 17:35:48 snj Exp $ */
+/*  $NetBSD: ops.c,v 1.50.2.23 2015/06/19 17:40:47 snj Exp $ */
 
 /*-
  *  Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -651,13 +651,17 @@
                        struct puffs_node *pn;
                        struct perfuse_node_data *pnd = PERFUSE_NODE_DATA(opc);
 
-                       /* 
-                        * Avoid breaking out of fs 
-                        * by lookup to .. on root
-                        */
-                       if ((strcmp(name, "..") == 0) && 
-                           (pnd->pnd_nodeid == FUSE_ROOT_ID)) {
-                               fd->ino = FUSE_ROOT_ID;
+                       if (strcmp(name, "..") == 0) {
+                               /* 
+                                * Avoid breaking out of fs 
+                                * by lookup to .. on root
+                                */
+                               if (pnd->pnd_nodeid == FUSE_ROOT_ID)
+                                       fd->ino = FUSE_ROOT_ID;
+                               else
+                                       fd->ino = pnd->pnd_parent_nodeid;
+                       } else if (strcmp(name, ".") == 0 ) {
+                               fd->ino = pnd->pnd_nodeid;
                        } else {
                                int error;
 



Home | Main Index | Thread Index | Old Index