From 6b83a658ede66ebbb0983f1e4a326fd12cc91c34 Mon Sep 17 00:00:00 2001 From: Rajesh Joseph Date: Mon, 8 Dec 2014 14:25:22 +0530 Subject: gfapi: new inode created in glfs_resolve_component even if inode is in inode table problem: USS allows split-brain file to be accessed while main volume gives I/O error. cause: AFR detects split-brain on lookup. It stores this information in inode context. open and readv fop checks this flag from inode context. open and readv fop fails if split-brain flag is set for the file. USS uses gfapi to access snapshot volume. During open call gfapi internally calls glfs_resolve_component. glfs_resolve_component generates a new inode even if inode is present for the file. Because of which afr_lookup acts on a new inode which does not contain the split-brain flag. Bug: 1171615 Change-Id: I1b4fddf4bd3c734a319ecfae804a3439866d157c Signed-off-by: Rajesh Joseph Reviewed-on: http://review.gluster.org/9253 Reviewed-by: Vijaikumar Mallikarjuna Reviewed-by: Raghavendra Talur Reviewed-by: Poornima G Reviewed-by: Pranith Kumar Karampuri Tested-by: Gluster Build System Reviewed-by: Niels de Vos --- api/src/glfs-resolve.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'api') diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c index e3f14f9a364..7aa5cc6158e 100644 --- a/api/src/glfs-resolve.c +++ b/api/src/glfs-resolve.c @@ -246,12 +246,10 @@ glfs_resolve_component (struct glfs *fs, xlator_t *subvol, inode_t *parent, Fill loc.name so that we make use md-cache. md-cache is not valid for nameless lookups. */ - if (__is_root_gfid (parent->gfid)) { - if ((strcmp (component, ".") == 0) || - (strcmp (component, "..") == 0)) { - loc.inode = inode_ref (parent); - loc.name = "."; - } + if (__is_root_gfid (parent->gfid) && + (strcmp (component, "..") == 0)) { + loc.inode = inode_ref (parent); + loc.name = "."; } else { if (strcmp (component, ".") == 0) loc.inode = inode_ref (parent); -- cgit