From 4f2b417f0a6fea20c8a96b6f66732c709234d637 Mon Sep 17 00:00:00 2001 From: vmallika Date: Thu, 31 Mar 2016 07:35:35 +0530 Subject: server: send lookup on root inode when itable is created This is a backport of http://review.gluster.org/#/c/13837 * xlators like quota, marker, posix_acl can cause problems if inode-ctx are not created. sometime these xlarors may not get lookup on root inode with below cases 1) client may not send lookup on root inode (like NSR leader) 2) if the xlators on one of the bricks are not up, and client sending lookup during this time: brick can miss the lookup It is always better to make sure that there is one lookup on root. So send a first lookup when the inode table is created * When sending lookup on root, new inode is created, we need to use itable->root instead > Change-Id: Iff2eeaa1a89795328833a7761789ef588f11218f > BUG: 1320818 > Signed-off-by: vmallika > Reviewed-on: http://review.gluster.org/13837 > Smoke: Gluster Build System > CentOS-regression: Gluster Build System > NetBSD-regression: NetBSD Build System > Reviewed-by: Jeff Darcy Change-Id: I0abf45444c21b3bc77b5a75ab9a2049a411048d3 BUG: 1320892 Signed-off-by: vmallika Reviewed-on: http://review.gluster.org/13862 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Jeff Darcy --- xlators/protocol/server/src/server-resolve.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'xlators/protocol/server/src/server-resolve.c') diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c index 5f3d475c595..26bf37e3308 100644 --- a/xlators/protocol/server/src/server-resolve.c +++ b/xlators/protocol/server/src/server-resolve.c @@ -162,7 +162,8 @@ resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this, resolve_loc->name = resolve->bname; - resolve_loc->inode = inode_new (state->itable); + resolve_loc->inode = server_inode_new (state->itable, + resolve_loc->gfid); inode_path (resolve_loc->parent, resolve_loc->name, (char **) &resolve_loc->path); @@ -209,7 +210,8 @@ resolve_gfid (call_frame_t *frame) else if (!gf_uuid_is_null (resolve->gfid)) gf_uuid_copy (resolve_loc->gfid, resolve->gfid); - resolve_loc->inode = inode_new (state->itable); + resolve_loc->inode = server_inode_new (state->itable, + resolve_loc->gfid); ret = loc_path (resolve_loc, NULL); if (state->xdata) { -- cgit