Fix handling of direct maps, broken in r275756. Previously, running
automount(8) would unmount direct map trigger nodes every second time. MFC after: 1 month Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
7a20e4799e
commit
12f1f00c30
@ -661,23 +661,25 @@ node_find_x(struct node *node, const char *path)
|
||||
char *tmp;
|
||||
size_t tmplen;
|
||||
|
||||
//log_debugx("looking up %s in %s", path, node->n_key);
|
||||
//log_debugx("looking up %s in %s", path, node_path(node));
|
||||
|
||||
tmp = node_path(node);
|
||||
tmplen = strlen(tmp);
|
||||
if (strncmp(tmp, path, tmplen) != 0) {
|
||||
if (!node_is_direct_key(node)) {
|
||||
tmp = node_path(node);
|
||||
tmplen = strlen(tmp);
|
||||
if (strncmp(tmp, path, tmplen) != 0) {
|
||||
free(tmp);
|
||||
return (NULL);
|
||||
}
|
||||
if (path[tmplen] != '/' && path[tmplen] != '\0') {
|
||||
/*
|
||||
* If we have two map entries like 'foo' and 'foobar', make
|
||||
* sure the search for 'foobar' won't match 'foo' instead.
|
||||
*/
|
||||
free(tmp);
|
||||
return (NULL);
|
||||
}
|
||||
free(tmp);
|
||||
return (NULL);
|
||||
}
|
||||
if (path[tmplen] != '/' && path[tmplen] != '\0') {
|
||||
/*
|
||||
* If we have two map entries like 'foo' and 'foobar', make
|
||||
* sure the search for 'foobar' won't match 'foo' instead.
|
||||
*/
|
||||
free(tmp);
|
||||
return (NULL);
|
||||
}
|
||||
free(tmp);
|
||||
|
||||
TAILQ_FOREACH(child, &node->n_children, n_next) {
|
||||
found = node_find_x(child, path);
|
||||
@ -685,6 +687,9 @@ node_find_x(struct node *node, const char *path)
|
||||
return (found);
|
||||
}
|
||||
|
||||
if (node->n_parent == NULL || node_is_direct_key(node))
|
||||
return (NULL);
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
@ -693,9 +698,12 @@ node_find(struct node *root, const char *path)
|
||||
{
|
||||
struct node *node;
|
||||
|
||||
assert(root->n_parent == NULL);
|
||||
|
||||
node = node_find_x(root, path);
|
||||
if (node == root)
|
||||
return (NULL);
|
||||
if (node != NULL)
|
||||
assert(node != root);
|
||||
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user