From 35d24f0c967130ef8424660b5f6dfd182bb305c1 Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Thu, 25 Jun 2015 00:47:19 +0530 Subject: 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. Change-Id: I3da7c79091291ba36fd8f8ebcfebcd77a192f250 BUG: 1235542 Signed-off-by: Soumya Koduri Reviewed-on: http://review.gluster.org/11387 Reviewed-by: Niels de Vos Reviewed-by: Meghana M Tested-by: Gluster Build System Reviewed-by: Kaleb KEITHLEY --- xlators/features/upcall/src/upcall.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'xlators/features/upcall') diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c index 0e2a75473dc..4954d43db07 100644 --- a/xlators/features/upcall/src/upcall.c +++ b/xlators/features/upcall/src/upcall.c @@ -635,7 +635,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); @@ -655,7 +655,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; @@ -697,7 +697,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); @@ -718,7 +718,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; @@ -1047,7 +1047,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); @@ -1067,7 +1067,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; @@ -1108,7 +1108,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); @@ -1129,7 +1129,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; -- cgit