gf_boolean_t afr_is_fd_fixable (fd_t *fd) { if (!fd || !fd->inode) return _gf_false; else if (fd_is_anonymous (fd)) return _gf_false; else if (gf_uuid_is_null (fd->inode->gfid)) return _gf_false; return _gf_true; }
int nfs_inode_loc_fill (inode_t *inode, loc_t *loc, int how) { char *resolvedpath = NULL; inode_t *parent = NULL; int ret = -EFAULT; if ((!inode) || (!loc)) return ret; /* If gfid is not null, then the inode is already linked to * the inode table, and not a newly created one. For newly * created inode, inode_path returns null gfid as the path. */ if (!gf_uuid_is_null (inode->gfid)) { ret = inode_path (inode, NULL, &resolvedpath); if (ret < 0) { gf_msg (GF_NFS, GF_LOG_ERROR, 0, NFS_MSG_PATH_RESOLVE_FAIL, "path resolution " "failed %s", resolvedpath); goto err; } } if (resolvedpath == NULL) { char tmp_path[GFID_STR_PFX_LEN + 1] = {0,}; snprintf (tmp_path, sizeof (tmp_path), "<gfid:%s>", uuid_utoa (loc->gfid)); resolvedpath = gf_strdup (tmp_path); } else { parent = inode_parent (inode, loc->pargfid, NULL); } ret = nfs_loc_fill (loc, inode, parent, resolvedpath); if (ret < 0) { gf_msg (GF_NFS, GF_LOG_ERROR, -ret, NFS_MSG_LOC_FILL_RESOLVE_FAIL, "loc fill resolution failed %s", resolvedpath); goto err; } ret = 0; err: if (parent) inode_unref (parent); GF_FREE (resolvedpath); return ret; }
int nfs_loc_fill (loc_t *loc, inode_t *inode, inode_t *parent, char *path) { int ret = -EFAULT; if (!loc) return ret; if (inode) { loc->inode = inode_ref (inode); if (!gf_uuid_is_null (inode->gfid)) gf_uuid_copy (loc->gfid, inode->gfid); } if (parent) loc->parent = inode_ref (parent); if (path) { loc->path = gf_strdup (path); if (!loc->path) { gf_msg (GF_NFS, GF_LOG_ERROR, ENOMEM, NFS_MSG_NO_MEMORY, "strdup failed"); goto loc_wipe; } loc->name = strrchr (loc->path, '/'); if (loc->name) loc->name++; } ret = 0; loc_wipe: if (ret < 0) nfs_loc_wipe (loc); return ret; }