main: drop present_lowerdir attribute

use last_layer instead.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2019-07-23 10:03:21 +02:00
parent 64e493e7e4
commit f3d66013b3
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED

25
main.c
View File

@ -213,7 +213,6 @@ struct ovl_node
ino_t ino; ino_t ino;
size_t name_hash; size_t name_hash;
unsigned int present_lowerdir : 1;
unsigned int do_unlink : 1; unsigned int do_unlink : 1;
unsigned int do_rmdir : 1; unsigned int do_rmdir : 1;
unsigned int hidden : 1; unsigned int hidden : 1;
@ -1326,18 +1325,15 @@ load_dir (struct ovl_data *lo, struct ovl_node *n, struct ovl_layer *layer, char
if (child) if (child)
{ {
child->last_layer = it; child->last_layer = it;
if (child->whiteout && it == upper_layer) if (!child->whiteout || it != upper_layer)
continue;
else
{ {
hash_delete (n->children, child); hash_delete (n->children, child);
node_free (child); node_free (child);
child = NULL; child = NULL;
} }
else
{
if (it->low)
child->present_lowerdir = 1;
continue;
}
if (lo->fast_ino_check) if (lo->fast_ino_check)
continue; continue;
} }
@ -1573,8 +1569,7 @@ do_lookup_file (struct ovl_data *lo, fuse_ino_t parent, const char *name)
if (node) if (node)
{ {
node->ino = st.st_ino; node->ino = st.st_ino;
if (it->low) node->last_layer = it;
node->present_lowerdir = 1;
continue; continue;
} }
@ -1617,11 +1612,9 @@ insert_node:
errno = ENOMEM; errno = ENOMEM;
return NULL; return NULL;
} }
if (node->last_layer)
break;
if (pnode && pnode->last_layer == it) if (pnode && pnode->last_layer == it)
break; break;
if (lo->fast_ino_check) if (lo->fast_ino_check)
break; break;
} }
@ -3499,7 +3492,7 @@ ovl_rename_exchange (fuse_req_t req, fuse_ino_t parent, const char *name,
return; return;
} }
if (node->layer != get_upper_layer (lo) || node->present_lowerdir) if (node->layer != get_upper_layer (lo) || node->last_layer != get_upper_layer (lo))
{ {
fuse_reply_err (req, EXDEV); fuse_reply_err (req, EXDEV);
return; return;
@ -3539,7 +3532,7 @@ ovl_rename_exchange (fuse_req_t req, fuse_ino_t parent, const char *name,
errno = ENOENT; errno = ENOENT;
goto error; goto error;
} }
if (node_dirp (node) && destnode->present_lowerdir) if (node_dirp (node) && destnode->last_layer != get_upper_layer (lo))
{ {
fuse_reply_err (req, EXDEV); fuse_reply_err (req, EXDEV);
return; return;
@ -3631,7 +3624,7 @@ ovl_rename_direct (fuse_req_t req, fuse_ino_t parent, const char *name,
return; return;
} }
if (node->layer != get_upper_layer (lo) || node->present_lowerdir) if (node->layer != get_upper_layer (lo) || node->last_layer != get_upper_layer (lo))
{ {
fuse_reply_err (req, EXDEV); fuse_reply_err (req, EXDEV);
return; return;