Blob Blame History Raw
From c005cdaf42edda9e515cd3a7657635a16a332987 Mon Sep 17 00:00:00 2001
From: Soumya Koduri <skoduri@redhat.com>
Date: Thu, 25 Jun 2015 00:47:19 +0530
Subject: [PATCH 179/190] Upcall: Fix an issue with invalidating parent entries

Any directory or file creation should result in cache-invalidation
requests sent to parent directory. However that is not the case
currently due to a bug while processing these requests in the
upcall xlator. We need to do invalidation checks on parent inode.

Fixed the same. Also fixed an issue with null client entries while
sending upcall notifications.

This is backport of the below upstream fix
http://review.gluster.org/11387

Change-Id: I3da7c79091291ba36fd8f8ebcfebcd77a192f250
BUG: 1235544
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/51717
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Tested-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
---
 xlators/features/upcall/src/upcall.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c
index 331db52..ceeb99c 100644
--- a/xlators/features/upcall/src/upcall.c
+++ b/xlators/features/upcall/src/upcall.c
@@ -640,7 +640,7 @@ up_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
         }
 
         /* invalidate parent's entry too */
-        flags = UP_PARENT_DENTRY_FLAGS;
+        flags = UP_TIMES;
         upcall_cache_invalidate (frame, this, client, local->inode, flags,
                                  stbuf, postparent, NULL);
 
@@ -660,7 +660,7 @@ up_mkdir (call_frame_t *frame, xlator_t *this,
 
         EXIT_IF_UPCALL_OFF (this, out);
 
-        local = upcall_local_init (frame, this, loc->inode);
+        local = upcall_local_init (frame, this, loc->parent);
         if (!local) {
                 op_errno = ENOMEM;
                 goto err;
@@ -702,7 +702,7 @@ up_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
 
         /* As its a new file create, no need of sending notification */
         /* However invalidate parent's entry */
-        flags = UP_PARENT_DENTRY_FLAGS;
+        flags = UP_TIMES;
         upcall_cache_invalidate (frame, this, client, local->inode, flags,
                                  stbuf, postparent, NULL);
 
@@ -723,7 +723,7 @@ up_create (call_frame_t *frame, xlator_t *this,
 
         EXIT_IF_UPCALL_OFF (this, out);
 
-        local = upcall_local_init (frame, this, loc->inode);
+        local = upcall_local_init (frame, this, loc->parent);
 
         if (!local) {
                 op_errno = ENOMEM;
@@ -1052,7 +1052,7 @@ up_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
         }
 
         /* invalidate parent's entry too */
-        flags = UP_PARENT_DENTRY_FLAGS;
+        flags = UP_TIMES;
         upcall_cache_invalidate (frame, this, client, local->inode, flags,
                                  buf, postparent, NULL);
 
@@ -1072,7 +1072,7 @@ up_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc,
 
         EXIT_IF_UPCALL_OFF (this, out);
 
-        local = upcall_local_init (frame, this, loc->inode);
+        local = upcall_local_init (frame, this, loc->parent);
         if (!local) {
                 op_errno = ENOMEM;
                 goto err;
@@ -1113,7 +1113,7 @@ up_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
         }
 
         /* invalidate parent's entry too */
-        flags = UP_PARENT_DENTRY_FLAGS;
+        flags = UP_TIMES;
         upcall_cache_invalidate (frame, this, client, local->inode, flags,
                                  buf, postparent, NULL);
 
@@ -1134,7 +1134,7 @@ up_symlink (call_frame_t   *frame, xlator_t *this,
 
         EXIT_IF_UPCALL_OFF (this, out);
 
-        local = upcall_local_init (frame, this, loc->inode);
+        local = upcall_local_init (frame, this, loc->parent);
         if (!local) {
                 op_errno = ENOMEM;
                 goto err;
-- 
1.7.1