From cc9ca7d2b2f5c91d80265c28ca724cb233c2bd77 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Wed, 22 May 2013 15:18:19 +0530 Subject: cluster/afr: Perform delayed changelog wakeups for anon fd Problem: Nfs xlator never does open on a file for performing writes, afr does not perform changelog wakeup for this fd so operations which do metadata operations as soon as the data operations are completed perceive a delay of 'post-op-delay-secs'. Fix: Perform changelog wakeup on anon-fd if the fd with same pid is not present in inode-list. Note: This approach is a short-term fix. A proper fix needs a new domain for taking metadata locks so that data/metadata locks don't compete with each other. Change-Id: I253afb289eadf30c7951e56fb2c4840d7132f5e4 BUG: 966018 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/5066 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- libglusterfs/src/fd.c | 17 +++++++++++++++++ libglusterfs/src/fd.h | 3 +++ 2 files changed, 20 insertions(+) (limited to 'libglusterfs') diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c index 2f4afc5e..36cc4d05 100644 --- a/libglusterfs/src/fd.c +++ b/libglusterfs/src/fd.c @@ -780,6 +780,23 @@ fd_anonymous (inode_t *inode) return fd; } +fd_t* +fd_lookup_anonymous (inode_t *inode) +{ + fd_t *fd = NULL; + + if (!inode) { + gf_log_callingfn ("fd", GF_LOG_WARNING, "!inode"); + return NULL; + } + + LOCK (&inode->lock); + { + fd = __fd_lookup_anonymous (inode); + } + UNLOCK (&inode->lock); + return fd; +} gf_boolean_t fd_is_anonymous (fd_t *fd) diff --git a/libglusterfs/src/fd.h b/libglusterfs/src/fd.h index 54290b19..c1b9157d 100644 --- a/libglusterfs/src/fd.h +++ b/libglusterfs/src/fd.h @@ -134,6 +134,9 @@ fd_lookup (struct _inode *inode, pid_t pid); fd_t * fd_lookup_uint64 (struct _inode *inode, uint64_t pid); +fd_t* +fd_lookup_anonymous (inode_t *inode); + fd_t * fd_anonymous (inode_t *inode); -- cgit