diff options
Diffstat (limited to 'libglusterfs/src/gf-dirent.c')
-rw-r--r-- | libglusterfs/src/gf-dirent.c | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/libglusterfs/src/gf-dirent.c b/libglusterfs/src/gf-dirent.c index 4c85db3f3..8d15b0405 100644 --- a/libglusterfs/src/gf-dirent.c +++ b/libglusterfs/src/gf-dirent.c @@ -31,26 +31,6 @@ #include "xlator.h" gf_dirent_t * -gf_dirent_for_namelen (int len) -{ - gf_dirent_t *gf_dirent = NULL; - - /* TODO: use mem-pool */ - gf_dirent = CALLOC (len, sizeof(char)); - if (!gf_dirent) - return NULL; - - INIT_LIST_HEAD (&gf_dirent->list); - - gf_dirent->d_off = 0; - gf_dirent->d_ino = -1; - gf_dirent->d_type = 0; - - return gf_dirent; -} - - -gf_dirent_t * gf_dirent_for_name (const char *name) { gf_dirent_t *gf_dirent = NULL; @@ -86,7 +66,36 @@ gf_dirent_free (gf_dirent_t *entries) return; list_for_each_entry_safe (entry, tmp, &entries->list, list) { + if (entry->dict) + dict_unref (entry->dict); + if (entry->inode) + inode_unref (entry->inode); + list_del (&entry->list); GF_FREE (entry); } } + +/* TODO: Currently, with this function, we will be breaking the + policy of 1-1 mapping of kernel nlookup refs with our inode_t's + nlookup count. + Need more thoughts before finalizing this function +*/ +int +gf_link_inodes_from_dirent (xlator_t *this, inode_t *parent, + gf_dirent_t *entries) +{ + gf_dirent_t *entry = NULL; + inode_t *link_inode = NULL; + + list_for_each_entry (entry, &entries->list, list) { + if (entry->inode) { + link_inode = inode_link (entry->inode, parent, + entry->d_name, &entry->d_stat); + inode_lookup (link_inode); + inode_unref (link_inode); + } + } + + return 0; +} |