mirror of
https://github.com/containers/fuse-overlayfs.git
synced 2025-09-10 15:56:25 -04:00
main: drop nlink optimization
calculate the nlink for the directory on each stat. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
da13832baa
commit
f703870668
@ -33,7 +33,6 @@ struct ovl_ino
|
|||||||
dev_t dev;
|
dev_t dev;
|
||||||
int lookups;
|
int lookups;
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
int nlinks;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ovl_node
|
struct ovl_node
|
||||||
|
11
main.c
11
main.c
@ -701,7 +701,7 @@ rpl_stat (fuse_req_t req, struct ovl_node *node, int fd, const char *path, struc
|
|||||||
|
|
||||||
st->st_ino = node->tmp_ino;
|
st->st_ino = node->tmp_ino;
|
||||||
st->st_dev = node->tmp_dev;
|
st->st_dev = node->tmp_dev;
|
||||||
if (ret == 0 && node_dirp (node) && node->ino->nlinks <= 0)
|
if (ret == 0 && node_dirp (node))
|
||||||
{
|
{
|
||||||
struct ovl_node *it;
|
struct ovl_node *it;
|
||||||
|
|
||||||
@ -712,7 +712,6 @@ rpl_stat (fuse_req_t req, struct ovl_node *node, int fd, const char *path, struc
|
|||||||
if (node_dirp (it))
|
if (node_dirp (it))
|
||||||
st->st_nlink++;
|
st->st_nlink++;
|
||||||
}
|
}
|
||||||
node->ino->nlinks = st->st_nlink;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -1347,20 +1346,14 @@ insert_node (struct ovl_node *parent, struct ovl_node *item, bool replace)
|
|||||||
{
|
{
|
||||||
if (hash_lookup (prev_parent->children, item) == item)
|
if (hash_lookup (prev_parent->children, item) == item)
|
||||||
hash_delete (prev_parent->children, item);
|
hash_delete (prev_parent->children, item);
|
||||||
if (is_dir)
|
|
||||||
prev_parent->ino->nlinks--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (replace)
|
if (replace)
|
||||||
{
|
{
|
||||||
old = hash_delete (parent->children, item);
|
old = hash_delete (parent->children, item);
|
||||||
if (old)
|
if (old)
|
||||||
{
|
|
||||||
if (node_dirp (old))
|
|
||||||
parent->ino->nlinks--;
|
|
||||||
node_free (old);
|
node_free (old);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ret = hash_insert_if_absent (parent->children, item, (const void **) &old);
|
ret = hash_insert_if_absent (parent->children, item, (const void **) &old);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -1376,8 +1369,6 @@ insert_node (struct ovl_node *parent, struct ovl_node *item, bool replace)
|
|||||||
}
|
}
|
||||||
|
|
||||||
item->parent = parent;
|
item->parent = parent;
|
||||||
if (is_dir)
|
|
||||||
parent->ino->nlinks++;
|
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
@ -145,3 +145,27 @@ test -e merged/a/test
|
|||||||
ls -l merged/b
|
ls -l merged/b
|
||||||
|
|
||||||
test -e merged/b/test
|
test -e merged/b/test
|
||||||
|
|
||||||
|
#### Correct number of directory nlink
|
||||||
|
|
||||||
|
umount merged
|
||||||
|
|
||||||
|
rm -rf lower upper workdir merged
|
||||||
|
mkdir lower upper workdir merged
|
||||||
|
mkdir lower/a lower/a/1 lower/a/2 lower/a/3
|
||||||
|
|
||||||
|
fuse-overlayfs -o lowerdir=lower,upperdir=upper,workdir=workdir merged
|
||||||
|
|
||||||
|
test $(stat -c %h merged/a) = 5
|
||||||
|
|
||||||
|
mkdir merged/a/4
|
||||||
|
|
||||||
|
test $(stat -c %h merged/a) = 6
|
||||||
|
|
||||||
|
rm -rf merged/a/4
|
||||||
|
|
||||||
|
test $(stat -c %h merged/a) = 5
|
||||||
|
|
||||||
|
rm -rf merged/a/3
|
||||||
|
|
||||||
|
test $(stat -c %h merged/a) = 4
|
||||||
|
Loading…
x
Reference in New Issue
Block a user