diff options
author | Yaniv Kaul <ykaul@redhat.com> | 2018-12-27 18:56:16 +0200 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2019-01-29 09:27:22 +0000 |
commit | c7d1aee76d5713d1f337ab1c831c0ed74e4676e1 (patch) | |
tree | dac0618f33a560ae1bfbd5c92c5762d42d26797b /libglusterfs | |
parent | f747d55a7fd364e2b9a74fe40360ab3cb7b11537 (diff) |
Multiple files: reduce work while under lock.
Mostly, unlock before logging.
In some cases, moved different code that was not needed
to be under lock (for example, taking time, or malloc'ing)
to be executed before taking the lock.
Note: logging might be slightly less accurate in order, since it may
not be done now under the lock, so order of logs is racy. I think
it's a reasonable compromise.
Compile-tested only!
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Change-Id: I2438710016afc9f4f62a176ef1a0d3ed793b4f89
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/event-epoll.c | 4 | ||||
-rw-r--r-- | libglusterfs/src/fd.c | 10 | ||||
-rw-r--r-- | libglusterfs/src/gidcache.c | 4 | ||||
-rw-r--r-- | libglusterfs/src/rbthash.c | 5 |
4 files changed, 12 insertions, 11 deletions
diff --git a/libglusterfs/src/event-epoll.c b/libglusterfs/src/event-epoll.c index dcaf9804529..be8b204b7a7 100644 --- a/libglusterfs/src/event-epoll.c +++ b/libglusterfs/src/event-epoll.c @@ -1018,7 +1018,7 @@ event_handled_epoll(struct event_pool *event_pool, int fd, int idx, int gen) " from gen=%d to slot->gen=%d, fd=%d, " "slot->fd=%d", idx, gen, slot->gen, fd, slot->fd); - goto post_unlock; + goto unlock; } /* This call also picks up the changes made by another @@ -1033,7 +1033,7 @@ event_handled_epoll(struct event_pool *event_pool, int fd, int idx, int gen) ret = epoll_ctl(event_pool->fd, EPOLL_CTL_MOD, fd, &epoll_event); } } -post_unlock: +unlock: UNLOCK(&slot->lock); event_slot_unref(event_pool, slot, idx); diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c index 44a9ee69d67..b8aac726093 100644 --- a/libglusterfs/src/fd.c +++ b/libglusterfs/src/fd.c @@ -766,13 +766,13 @@ fd_anonymous_with_flags(inode_t *inode, int32_t flags) { fd_t *fd = NULL; + if (flags & O_DIRECT) + flags = GF_ANON_FD_FLAGS | O_DIRECT; + else + flags = GF_ANON_FD_FLAGS; + LOCK(&inode->lock); { - if (flags & O_DIRECT) - flags = GF_ANON_FD_FLAGS | O_DIRECT; - else - flags = GF_ANON_FD_FLAGS; - fd = __fd_anonymous(inode, flags); } UNLOCK(&inode->lock); diff --git a/libglusterfs/src/gidcache.c b/libglusterfs/src/gidcache.c index 87147163e9e..40fcffbb35e 100644 --- a/libglusterfs/src/gidcache.c +++ b/libglusterfs/src/gidcache.c @@ -64,8 +64,8 @@ gid_cache_lookup(gid_cache_t *cache, uint64_t id, uint64_t uid, uint64_t gid) time_t now; const gid_list_t *agl; - LOCK(&cache->gc_lock); now = time(NULL); + LOCK(&cache->gc_lock); bucket = id % cache->gc_nbuckets; agl = BUCKET_START(cache->gc_cache, bucket); for (i = 0; i < AUX_GID_CACHE_ASSOC; i++, agl++) { @@ -132,8 +132,8 @@ gid_cache_add(gid_cache_t *cache, gid_list_t *gl) if (!cache->gc_max_age) return 0; - LOCK(&cache->gc_lock); now = time(NULL); + LOCK(&cache->gc_lock); /* * Scan for the first free entry or one that matches this id. The id diff --git a/libglusterfs/src/rbthash.c b/libglusterfs/src/rbthash.c index 1bdd45f9fae..ae2e158d61e 100644 --- a/libglusterfs/src/rbthash.c +++ b/libglusterfs/src/rbthash.c @@ -252,10 +252,11 @@ rbthash_insert_entry(rbthash_table_t *tbl, rbthash_entry_t *entry) LOCK(&bucket->bucketlock); { if (!rb_probe(bucket->bucket, (void *)entry)) { + UNLOCK(&bucket->bucketlock); gf_msg(GF_RBTHASH, GF_LOG_ERROR, 0, LG_MSG_RBTHASH_INSERT_FAILED, - "Failed to insert" - " entry"); + "Failed to insert entry"); ret = -1; + goto err; } } UNLOCK(&bucket->bucketlock); |