diff options
-rw-r--r-- | node.c | 13 | ||||
-rw-r--r-- | node.h | 2 | ||||
-rw-r--r-- | nsmux.c | 22 |
3 files changed, 30 insertions, 7 deletions
@@ -821,11 +821,22 @@ error_t *underlying = p = ports_get_send_right (newpi); *underlying_type = MACH_MSG_TYPE_COPY_SEND; + /**underlying_type = MACH_MSG_TYPE_COPY_SEND;*/ + /**underlying_type = MACH_MSG_TYPE_MOVE_SEND;*/ + LOG_MSG ("node_set_translators.open_port: %ld", (long) *underlying); /*Drop our reference to the port */ ports_port_deref (newpi); + /* + char buf[256]; + char *_buf = buf; + size_t len = 256; + io_read (p, &_buf, &len, 0, len); + LOG_MSG ("node_set_translator: Read from np: '%s'", buf); + */ + /*Return the result of operations (everything should be okay here) */ return err; } /*open_port */ @@ -905,6 +916,6 @@ error_t /*Everything is OK here */ return 0; -} /*node_set_translators */ +} /*node_set_translator */ /*---------------------------------------------------------------------------*/ @@ -37,7 +37,7 @@ /*---------------------------------------------------------------------------*/ /*--------Macros-------------------------------------------------------------*/ /*Checks whether the give node is the root of the proxy filesystem*/ -#define NODE_IS_ROOT(n) (((n)->nn->lnode->dir) ? (0) : (1)) +#define NODE_IS_ROOT(n) (((n)->nn->lnode && (n)->nn->lnode->dir) ? (0) : (1)) /*---------------------------------------------------------------------------*/ /*Node flags*/ #define FLAG_NODE_ULFS_FIXED 0x00000001 /*this node should not be updated */ @@ -166,7 +166,8 @@ error_t /*Validates the stat data for the node*/ error_t netfs_validate_stat (struct node * np, struct iouser * cred) { - LOG_MSG ("netfs_validate_stat: '%s'", (np ? np->nn->lnode->name : "")); + LOG_MSG ("netfs_validate_stat: '%s'", + ((np && np->nn->lnode) ? np->nn->lnode->name : "")); error_t err = 0; @@ -896,8 +897,21 @@ error_t /*We have to create a shadow node and set a translator on it. */ - error = netfs_attempt_lookup_improved - (diruser->user, dnp, filename, flags, lastcomp, &np, &file, 1); + if (sep == filename + 2) + { + /*this is a retry, so no need to do lookups */ + error = 0; + np = dnp; + netfs_nref (np); + + mutex_unlock (&np->lock); + } + else + /*lookup the file in the real filesystem */ + error = netfs_attempt_lookup_improved + (diruser->user, dnp, filename, flags, + lastcomp, &np, &file, 1); + if (!error && !excl) { /*if there is at least one more separator in the @@ -921,8 +935,6 @@ error_t free (trans); /*prepare the information for the retry */ - -/* *retry_port_type = MACH_MSG_TYPE_MOVE_SEND; */ strcpy (retry_name, nextsep); if (nextname) { |