summaryrefslogtreecommitdiffstats
path: root/xlators/protocol/client/src/client-lk.c
diff options
context:
space:
mode:
authorZhang Huan <zhanghuan@open-fs.com>2017-11-29 17:36:55 +0800
committerRaghavendra G <rgowdapp@redhat.com>2017-12-26 05:05:55 +0000
commitf13023862edc868d4da87609412341aecd041ed8 (patch)
treefd008b460ff368b1c9ba6e28633fcf0beb5b1241 /xlators/protocol/client/src/client-lk.c
parent0bc22bef7f3c24663aadfb3548b348aa121e3047 (diff)
protocol/client: reduce lock contention
Current use of a per-client mutex to protect fdctx introduces lock contentions when there are dozens of file operations active. Use finer grain spinlock to reduce contention, and put retrieving fdctx out of lock. Change-Id: Iea3e2eb481e76a5d73a582ba81529180c5b88248 BUG: 1519598 Signed-off-by: Zhang Huan <zhanghuan@open-fs.com>
Diffstat (limited to 'xlators/protocol/client/src/client-lk.c')
-rw-r--r--xlators/protocol/client/src/client-lk.c18
1 files changed, 2 insertions, 16 deletions
diff --git a/xlators/protocol/client/src/client-lk.c b/xlators/protocol/client/src/client-lk.c
index 0cf2be3c562..6468fb4511e 100644
--- a/xlators/protocol/client/src/client-lk.c
+++ b/xlators/protocol/client/src/client-lk.c
@@ -60,7 +60,6 @@ int
dump_client_locks (inode_t *inode)
{
fd_t *fd = NULL;
- clnt_conf_t *conf = NULL;
xlator_t *this = NULL;
clnt_fd_ctx_t *fdctx = NULL;
@@ -68,19 +67,13 @@ dump_client_locks (inode_t *inode)
int locks_fd_count = 0;
this = THIS;
- conf = this->private;
LOCK (&inode->lock);
{
list_for_each_entry (fd, &inode->fd_list, inode_list) {
locks_fd_count = 0;
- pthread_mutex_lock (&conf->lock);
- {
- fdctx = this_fd_get_ctx (fd, this);
- }
- pthread_mutex_unlock (&conf->lock);
-
+ fdctx = this_fd_get_ctx (fd, this);
if (fdctx)
locks_fd_count = dump_client_locks_fd (fdctx);
@@ -504,19 +497,12 @@ client_add_lock_for_recovery (fd_t *fd, struct gf_flock *flock,
clnt_fd_ctx_t *fdctx = NULL;
xlator_t *this = NULL;
client_posix_lock_t *lock = NULL;
- clnt_conf_t *conf = NULL;
int ret = 0;
this = THIS;
- conf = this->private;
-
- pthread_mutex_lock (&conf->lock);
- {
- fdctx = this_fd_get_ctx (fd, this);
- }
- pthread_mutex_unlock (&conf->lock);
+ fdctx = this_fd_get_ctx (fd, this);
if (!fdctx) {
gf_msg (this->name, GF_LOG_WARNING, 0, PC_MSG_FD_GET_FAIL,
"failed to get fd context. sending EBADFD");