main: honor opaque whiteout

Closes: https://github.com/containers/fuse-overlayfs/issues/138

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2019-11-01 13:34:53 +01:00
parent 35ef75d9b0
commit 2403cd9537
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED
2 changed files with 31 additions and 1 deletions

17
main.c
View File

@ -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)

View File

@ -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