Convert the lock tgt_events_lock to a read write lock tgt_events_rwlock. This will help with performance as there are more walk-thru the list than the add/delete operations. Signed-off-by: Chandra Seetharaman <sekharan@xxxxxxxxxx> --- usr/tgtd.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) Index: tgt-thread/usr/tgtd.c =================================================================== --- tgt-thread.orig/usr/tgtd.c +++ tgt-thread/usr/tgtd.c @@ -167,14 +167,14 @@ int do_tgt_event_add(int efd, struct lis return err; } -static pthread_mutex_t tgt_events_lock; +static pthread_rwlock_t tgt_events_rwlock; int tgt_event_add(int fd, int events, event_handler_t handler, void *data) { int ret; - pthread_mutex_lock(&tgt_events_lock); + pthread_rwlock_wrlock(&tgt_events_rwlock); ret = do_tgt_event_add(ep_fd, &tgt_events_list, fd, events, handler, data); - pthread_mutex_unlock(&tgt_events_lock); + pthread_rwlock_unlock(&tgt_events_rwlock); return ret; } @@ -210,9 +210,9 @@ void do_tgt_event_del(int efd, struct li void tgt_event_del(int fd) { - pthread_mutex_lock(&tgt_events_lock); + pthread_rwlock_wrlock(&tgt_events_rwlock); do_tgt_event_del(ep_fd, &tgt_events_list, fd); - pthread_mutex_unlock(&tgt_events_lock); + pthread_rwlock_unlock(&tgt_events_rwlock); } int do_tgt_event_modify(int efd, struct list_head *list, int fd, int events) @@ -236,9 +236,9 @@ int do_tgt_event_modify(int efd, struct int tgt_event_modify(int fd, int events) { int ret; - pthread_mutex_lock(&tgt_events_lock); + pthread_rwlock_rdlock(&tgt_events_rwlock); ret = do_tgt_event_modify(ep_fd, &tgt_events_list, fd, events); - pthread_mutex_unlock(&tgt_events_lock); + pthread_rwlock_unlock(&tgt_events_rwlock); return ret; } @@ -469,7 +469,7 @@ int main(int argc, char **argv) sigaction(SIGINT, &sa_new, &sa_old); sigaction(SIGPIPE, &sa_new, &sa_old); sigaction(SIGTERM, &sa_new, &sa_old); - pthread_mutex_init(&tgt_events_lock, NULL); + pthread_rwlock_init(&tgt_events_rwlock, NULL); pagesize = sysconf(_SC_PAGESIZE); for (pageshift = 0;; pageshift++) -- To unsubscribe from this list: send the line "unsubscribe stgt" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html