mirror of
https://github.com/containers/fuse-overlayfs.git
synced 2025-09-11 08:16:05 -04:00
Merge pull request #402 from giuseppe/fix-perf-issue
main: fix performance issue with large dirs
This commit is contained in:
commit
ff6b14d0a8
4
NEWS
4
NEWS
@ -1,3 +1,7 @@
|
|||||||
|
* fuse-overlayfs-1.13
|
||||||
|
|
||||||
|
- fix a performance issue when dealing with big directories.
|
||||||
|
|
||||||
* fuse-overlayfs-1.12
|
* fuse-overlayfs-1.12
|
||||||
|
|
||||||
- change license to GPL-2.0-or-later.
|
- change license to GPL-2.0-or-later.
|
||||||
|
@ -54,6 +54,8 @@ struct ovl_node
|
|||||||
struct ovl_node *next_link;
|
struct ovl_node *next_link;
|
||||||
unsigned int in_readdir;
|
unsigned int in_readdir;
|
||||||
|
|
||||||
|
size_t n_links;
|
||||||
|
|
||||||
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;
|
||||||
|
13
main.c
13
main.c
@ -941,9 +941,13 @@ 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 (node_dirp (node))
|
if (node->loaded && node->n_links > 0)
|
||||||
|
st->st_nlink = node->n_links;
|
||||||
|
else if (node_dirp (node))
|
||||||
{
|
{
|
||||||
if (!data->static_nlink)
|
if (data->static_nlink)
|
||||||
|
st->st_nlink = 1;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
struct ovl_node *it;
|
struct ovl_node *it;
|
||||||
|
|
||||||
@ -955,8 +959,8 @@ rpl_stat (fuse_req_t req, struct ovl_node *node, int fd, const char *path, struc
|
|||||||
st->st_nlink++;
|
st->st_nlink++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
st->st_nlink = 1;
|
node->n_links = st->st_nlink;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5157,6 +5161,7 @@ ovl_mkdir (fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode)
|
|||||||
e.attr_timeout = get_timeout (lo);
|
e.attr_timeout = get_timeout (lo);
|
||||||
e.entry_timeout = get_timeout (lo);
|
e.entry_timeout = get_timeout (lo);
|
||||||
node->ino->lookups++;
|
node->ino->lookups++;
|
||||||
|
pnode->n_links++;
|
||||||
fuse_reply_entry (req, &e);
|
fuse_reply_entry (req, &e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user