From 9655be591b83c61546e214c8db7b32f725cbecc1 Mon Sep 17 00:00:00 2001 From: Raghavendra Bhat Date: Mon, 8 Oct 2012 17:28:39 +0530 Subject: features/marker: use buf->ia_gfid in all the lookup callbacks * In general use buf->ia_gfid for gfid instead of inode's gfid in the callbacks of the fops where new inode is created (such as create, mkdir, mknod, symlink). In the callback path inode would not be having the gfid within it, if it is not yet linked to the inode table which happens in protocol/server. Change-Id: Ie2e5ce6d25181e13d32c1ab99ee488a55fe64117 BUG: 848318 Signed-off-by: Raghavendra Bhat Reviewed-on: https://code.engineering.redhat.com/gerrit/64 Reviewed-by: Vijay Bellur Tested-by: Vijay Bellur Reviewed-on: https://code.engineering.redhat.com/gerrit/1875 --- xlators/features/marker/src/marker-quota.c | 6 +++--- xlators/features/marker/src/marker.c | 27 ++++++++++++++++++++------- 2 files changed, 23 insertions(+), 10 deletions(-) (limited to 'xlators') diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 895d131ef13..fbf34b8622f 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -380,7 +380,7 @@ mq_update_size_xattr (call_frame_t *frame, void *cookie, xlator_t *this, goto err; if (uuid_is_null (local->loc.gfid)) - uuid_copy (local->loc.gfid, local->loc.inode->gfid); + uuid_copy (local->loc.gfid, buf->ia_gfid); GF_UUID_ASSERT (local->loc.gfid); @@ -766,7 +766,7 @@ mq_check_if_still_dirty (call_frame_t *frame, local->d_off = 0; if (uuid_is_null (local->loc.gfid)) - uuid_copy (local->loc.gfid, local->loc.inode->gfid); + uuid_copy (local->loc.gfid, buf->ia_gfid); GF_UUID_ASSERT (local->loc.gfid); STACK_WIND(frame, @@ -1689,7 +1689,7 @@ unlock: } if (uuid_is_null (local->loc.gfid)) - uuid_copy (local->loc.gfid, local->loc.inode->gfid); + uuid_copy (local->loc.gfid, buf->ia_gfid); GF_UUID_ASSERT (local->loc.gfid); diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 5890c03948a..534437479a0 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -506,6 +506,9 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (op_ret == -1 || local == NULL) goto out; + if (uuid_is_null (local->loc.gfid)) + uuid_copy (local->loc.gfid, buf->ia_gfid); + priv = this->private; if (priv->feature_enabled & GF_QUOTA) @@ -577,6 +580,9 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (op_ret == -1 || local == NULL) goto out; + if (uuid_is_null (local->loc.gfid)) + uuid_copy (local->loc.gfid, buf->ia_gfid); + priv = this->private; if (priv->feature_enabled & GF_QUOTA) @@ -1676,6 +1682,9 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (op_ret == -1 || local == NULL) goto out; + if (uuid_is_null (local->loc.gfid)) + uuid_copy (local->loc.gfid, buf->ia_gfid); + priv = this->private; if (priv->feature_enabled & GF_QUOTA) @@ -1746,6 +1755,9 @@ marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (op_ret == -1 || local == NULL) goto out; + if (uuid_is_null (local->loc.gfid)) + uuid_copy (local->loc.gfid, buf->ia_gfid); + priv = this->private; if ((priv->feature_enabled & GF_QUOTA) && (S_ISREG (local->mode))) { @@ -2204,19 +2216,20 @@ marker_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, frame->local = NULL; + STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf, + dict, postparent); + + if (op_ret == -1 || local == NULL) + goto out; + /* copy the gfid from the stat structure instead of inode, * since if the lookup is fresh lookup, then the inode * would have not yet linked to the inode table which happens * in protocol/server. */ - if (!op_ret && local && uuid_is_null (local->loc.gfid)) - uuid_copy (local->loc.gfid, buf->ia_gfid); + if (uuid_is_null (local->loc.gfid)) + uuid_copy (local->loc.gfid, buf->ia_gfid); - STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf, - dict, postparent); - - if (op_ret == -1 || local == NULL) - goto out; priv = this->private; -- cgit