summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2015-04-14 13:08:34 +0530
committerNiels de Vos <ndevos@redhat.com>2015-04-19 01:06:24 -0700
commitb464723a48c2e35e7f209c3f909c964b6ba7fb47 (patch)
tree61afef0f098554e48c839da1f812b7f057542b65 /api
parentaa87c31d8d7406157af582c7aeafd5ed6a64fd2d (diff)
gfapi: Fix in glfs_h_create_from_handle
While constructing glfs_object from the handle given, incase if inode is found in the inode table, we need not do "syncop_lookup" unless we need to return the inode attributes. BUG: 1200262 Change-Id: I4682d9e4420a0bcb1b3e807b801ccb3d8de3d2cd Signed-off-by: Soumya Koduri <skoduri@redhat.com> Reviewed-on: http://review.gluster.org/10232 Tested-by: NetBSD Build System Reviewed-by: Niels de Vos <ndevos@redhat.com>
Diffstat (limited to 'api')
-rw-r--r--api/src/glfs-handleops.c10
-rw-r--r--api/src/glfs-handles.h3
2 files changed, 10 insertions, 3 deletions
diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c
index acd74e56dcb..54702d89934 100644
--- a/api/src/glfs-handleops.c
+++ b/api/src/glfs-handleops.c
@@ -1145,9 +1145,12 @@ pub_glfs_h_create_from_handle (struct glfs *fs, unsigned char *handle, int len,
memcpy (loc.gfid, handle, GFAPI_HANDLE_LENGTH);
newinode = inode_find (subvol->itable, loc.gfid);
- if (newinode)
+ if (newinode) {
+ if (!stat) /* No need of lookup */
+ goto found;
+
loc.inode = newinode;
- else {
+ } else {
loc.inode = inode_new (subvol->itable);
if (!loc.inode) {
errno = ENOMEM;
@@ -1179,6 +1182,7 @@ pub_glfs_h_create_from_handle (struct glfs *fs, unsigned char *handle, int len,
if (stat)
glfs_iatt_to_stat (fs, &iatt, stat);
+found:
object = GF_CALLOC (1, sizeof(struct glfs_object),
glfs_mt_glfs_object_t);
if (object == NULL) {
@@ -1693,7 +1697,7 @@ pub_glfs_h_poll_upcall (struct glfs *fs, struct callback_arg *up_arg)
if (found) {
object = glfs_h_create_from_handle (fs, gfid,
GFAPI_HANDLE_LENGTH,
- &up_arg->buf);
+ NULL);
if (!object) {
errno = ENOMEM;
diff --git a/api/src/glfs-handles.h b/api/src/glfs-handles.h
index 5ab0799423d..17b1defc733 100644
--- a/api/src/glfs-handles.h
+++ b/api/src/glfs-handles.h
@@ -215,6 +215,9 @@ ssize_t glfs_h_extract_handle (struct glfs_object *object,
unsigned char *handle, int len) __THROW
GFAPI_PUBLIC(glfs_h_extract_handle, 3.4.0);
+/* Given a handle, looks up the inode and creates glfs_object.
+ * In addition, if provided 'stat', copies the inode attributes
+ */
struct glfs_object *glfs_h_create_from_handle (struct glfs *fs,
unsigned char *handle, int len,
struct stat *stat) __THROW