diff --git a/main.c b/main.c index 982d05f..fea2392 100644 --- a/main.c +++ b/main.c @@ -1526,6 +1526,18 @@ load_dir (struct ovl_data *lo, struct ovl_node *n, struct ovl_layer *layer, char return NULL; } } + + ret = is_directory_opaque (it, path); + if (ret < 0) + { + it->ds->closedir (dp); + return NULL; + } + if (ret > 0) + { + n->last_layer = it; + stop_lookup = true; + } } if (get_timeout (lo) > 0) @@ -1803,7 +1815,10 @@ do_lookup_file (struct ovl_data *lo, fuse_ino_t parent, const char *name) return NULL; } if (ret > 0) - node->last_layer = it; + { + node->last_layer = it; + stop_lookup = true; + } } insert_node: if (insert_node (pnode, node, false) == NULL) diff --git a/tests/fedora-installs.sh b/tests/fedora-installs.sh index a6e7059..4c9a2fa 100755 --- a/tests/fedora-installs.sh +++ b/tests/fedora-installs.sh @@ -98,3 +98,18 @@ mkdir -p lower3/dir1/dir2 fuse-overlayfs -o lowerdir=lower3:lower2:lower1,upperdir=upper,workdir=workdir merged test \! -e merged/dir1/dir2/foo + +umount merged + +# https://github.com/containers/fuse-overlayfs/issues/138 +rm -rf lower1 lower2 lower3 lower upper workdir merged +mkdir lower1 lower2 lower3 upper workdir merged + +mkdir -p lower1/dir1/dir2 +touch lower1/dir1/dir2/foo +mkdir -p lower3/dir1/dir2 +touch lower3/dir1/dir2/.wh..wh..opq + +fuse-overlayfs -o lowerdir=lower3:lower2:lower1,upperdir=upper,workdir=workdir merged + +test \! -e merged/dir1/dir2/foo