Skip to content

Commit

Permalink
gf_dirent_for_name2() - copy an existing iatt struct if such exists
Browse files Browse the repository at this point in the history
Instead of just memset() it with zeros, if we do have an existing ones we can copy,
do it. In few places, such as entry_copy(), dht_readdirp_cbk() and others, we can do it.

Updates: #1000
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
  • Loading branch information
Yaniv Kaul authored and xhernandez committed May 23, 2022
1 parent e1fe88d commit 5d1f989
Show file tree
Hide file tree
Showing 10 changed files with 25 additions and 26 deletions.
2 changes: 1 addition & 1 deletion libglusterfs/src/default-args.c
Original file line number Diff line number Diff line change
Expand Up @@ -1094,7 +1094,7 @@ args_readdir_cbk_store(default_args_cbk_t *args, int32_t op_ret,
{
stub_entry = gf_dirent_for_name2(entry->d_name, entry->d_len,
entry->d_ino, entry->d_off,
entry->d_type);
entry->d_type, NULL);
if (!stub_entry)
goto out;
list_add_tail(&stub_entry->list, &args->entries.list);
Expand Down
14 changes: 7 additions & 7 deletions libglusterfs/src/gf-dirent.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ gf_itransform(xlator_t *this, uint64_t x, uint64_t *y_p, int client_id)
gf_dirent_t *
gf_dirent_for_name2(const char *name, const size_t name_len,
const uint64_t d_ino, const uint64_t d_off,
const uint32_t d_type)
const uint32_t d_type, const struct iatt *d_stat)
{
gf_dirent_t *gf_dirent = NULL;

Expand All @@ -158,7 +158,10 @@ gf_dirent_for_name2(const char *name, const size_t name_len,
gf_dirent->d_len = name_len;
gf_dirent->d_type = d_type;

memset(&gf_dirent->d_stat, 0, sizeof(struct iatt));
if (d_stat)
memcpy(&gf_dirent->d_stat, d_stat, sizeof(struct iatt));
else
memset(&gf_dirent->d_stat, 0, sizeof(struct iatt));
gf_dirent->dict = NULL;
gf_dirent->inode = NULL;

Expand All @@ -170,7 +173,7 @@ gf_dirent_for_name2(const char *name, const size_t name_len,
gf_dirent_t *
gf_dirent_for_name(const char *name)
{
return gf_dirent_for_name2(name, strlen(name), -1, 0, 0);
return gf_dirent_for_name2(name, strlen(name), -1, 0, 0, NULL);
}

void
Expand Down Expand Up @@ -212,12 +215,10 @@ entry_copy(gf_dirent_t *source)
gf_dirent_t *sink = NULL;

sink = gf_dirent_for_name2(source->d_name, source->d_len, source->d_ino,
source->d_off, source->d_type);
source->d_off, source->d_type, &source->d_stat);
if (!sink)
return NULL;

sink->d_stat = source->d_stat;

if (source->inode)
sink->inode = inode_ref(source->inode);

Expand Down Expand Up @@ -263,7 +264,6 @@ gf_link_inodes_from_dirent(inode_t *parent, gf_dirent_t *entries)
return 0;
}


int
gf_fill_iatt_for_dirent(gf_dirent_t *entry, inode_t *parent, xlator_t *subvol)
{
Expand Down
2 changes: 1 addition & 1 deletion libglusterfs/src/glusterfs/gf-dirent.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ gf_dirent_for_name(const char *name);
gf_dirent_t *
gf_dirent_for_name2(const char *name, const size_t name_len,
const uint64_t d_ino, const uint64_t d_off,
const uint32_t d_type);
const uint32_t d_type, const struct iatt *d_stat);
gf_dirent_t *
entry_copy(gf_dirent_t *source);
void
Expand Down
6 changes: 2 additions & 4 deletions xlators/cluster/dht/src/dht-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -6905,7 +6905,7 @@ dht_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,
list:
entry = gf_dirent_for_name2(orig_entry->d_name, orig_entry->d_len,
orig_entry->d_ino, orig_entry->d_off,
orig_entry->d_type);
orig_entry->d_type, &orig_entry->d_stat);
if (!entry) {
goto unwind;
}
Expand All @@ -6920,8 +6920,6 @@ dht_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,
}
}

entry->d_stat = orig_entry->d_stat;

if (orig_entry->dict)
entry->dict = dict_ref(orig_entry->dict);

Expand Down Expand Up @@ -7151,7 +7149,7 @@ dht_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,
add = _gf_false;
entry = gf_dirent_for_name2(orig_entry->d_name, orig_entry->d_len,
orig_entry->d_ino, orig_entry->d_off,
orig_entry->d_type);
orig_entry->d_type, NULL);
if (!entry) {
gf_msg(this->name, GF_LOG_ERROR, ENOMEM, DHT_MSG_NO_MEMORY,
"Memory allocation failed ");
Expand Down
4 changes: 1 addition & 3 deletions xlators/cluster/dht/src/dht-rebalance.c
Original file line number Diff line number Diff line change
Expand Up @@ -3202,7 +3202,7 @@ gf_defrag_get_entry(xlator_t *this, int i, struct dht_container **container,
}
tmp_container->df_entry = gf_dirent_for_name2(
df_entry->d_name, df_entry->d_len, df_entry->d_ino, 0,
df_entry->d_type);
df_entry->d_type, &df_entry->d_stat);
if (!tmp_container->df_entry) {
gf_log(this->name, GF_LOG_ERROR,
"Failed to allocate "
Expand All @@ -3213,8 +3213,6 @@ gf_defrag_get_entry(xlator_t *this, int i, struct dht_container **container,

tmp_container->local_subvol_index = i;

tmp_container->df_entry->d_stat = df_entry->d_stat;

tmp_container->parent_loc = GF_CALLOC(1, sizeof(*loc), gf_dht_mt_loc_t);
if (!tmp_container->parent_loc) {
gf_log(this->name, GF_LOG_ERROR,
Expand Down
2 changes: 1 addition & 1 deletion xlators/features/index/src/index.c
Original file line number Diff line number Diff line change
Expand Up @@ -564,7 +564,7 @@ index_fill_readdir(fd_t *fd, index_fd_ctx_t *fctx, DIR *dir, off_t off,
last_off = (u_long)telldir(dir);

this_entry = gf_dirent_for_name2(entry->d_name, entry_dname_len,
entry->d_ino, last_off, 0);
entry->d_ino, last_off, 0, NULL);

if (!this_entry) {
gf_msg(THIS->name, GF_LOG_ERROR, errno,
Expand Down
6 changes: 3 additions & 3 deletions xlators/meta/src/meta-defaults.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,9 +423,9 @@ meta_default_readdir(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
if (this_size + filled_size > size)
goto unwind;

list = gf_dirent_for_name2(dirents->name, dirents_name_len, i + 42,
i + 1,
gf_d_type_from_ia_type(dirents->type));
list = gf_dirent_for_name2(
dirents->name, dirents_name_len, i + 42, i + 1,
gf_d_type_from_ia_type(dirents->type), NULL);
if (!list)
break;

Expand Down
4 changes: 2 additions & 2 deletions xlators/protocol/client/src/client-helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ unserialize_rsp_dirent_v2(xlator_t *this, struct gfx_readdir_rsp *rsp,
trav = rsp->reply;
while (trav) {
entry = gf_dirent_for_name2(trav->name, trav->d_len, trav->d_ino, 0,
trav->d_type);
trav->d_type, NULL);
if (!entry)
goto out;

Expand Down Expand Up @@ -186,7 +186,7 @@ unserialize_rsp_direntp_v2(xlator_t *this, fd_t *fd,

while (trav) {
entry = gf_dirent_for_name2(trav->name, trav->d_len, trav->d_ino, 0,
trav->d_type);
trav->d_type, NULL);
if (!entry)
goto out;

Expand Down
3 changes: 1 addition & 2 deletions xlators/storage/posix/src/posix-handle.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,10 @@ posix_make_ancestral_node(const char *priv_base_path, char *path, int pathsize,
strcat(path, "/");

if (type & POSIX_ANCESTRY_DENTRY) {
entry = gf_dirent_for_name2(dir_name, dir_name_len, -1, 0, 0);
entry = gf_dirent_for_name2(dir_name, dir_name_len, -1, 0, 0, iabuf);
if (!entry)
goto out;

entry->d_stat = *iabuf;
entry->inode = inode_ref(inode);

list_add_tail(&entry->list, &head->list);
Expand Down
8 changes: 6 additions & 2 deletions xlators/storage/posix/src/posix-inode-fd-ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -5749,7 +5749,8 @@ posix_fill_readdir(fd_t *fd, struct posix_fd *pfd, off_t off, size_t size,
last_off = (u_long)telldir(pfd->dir);

this_entry = gf_dirent_for_name2(entry->d_name, entry_dname_len,
entry->d_ino, last_off, entry->d_type);
entry->d_ino, last_off, entry->d_type,
NULL);

if (!this_entry) {
gf_msg(THIS->name, GF_LOG_ERROR, errno,
Expand Down Expand Up @@ -5977,7 +5978,10 @@ posix_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
if (op_ret >= 0) {
op_ret = 0;

list_for_each_entry(entry, &entries.list, list) { op_ret++; }
list_for_each_entry(entry, &entries.list, list)
{
op_ret++;
}
}

STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, &entries, NULL);
Expand Down

0 comments on commit 5d1f989

Please sign in to comment.