diff options
author | Raghavendra G <raghavendra@gluster.com> | 2011-07-19 16:38:44 +0530 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-07-29 01:33:32 -0700 |
commit | 5f98fe60c291075702ef61f711ba89f724d2e75e (patch) | |
tree | 21dc27ffe27fcdc846f38a9eb0f3d97d3b35995d /xlators/performance/io-cache/src/ioc-inode.c | |
parent | be817019cbb096fe2cca632c6fbcf77f360e201d (diff) |
performance/io-cache: hold lock on ioc_inode whereever a page is being accessed/modified
Change-Id: I77e94166d4ad7a9ac87127de840add7278992bf3
BUG: 2939
Reviewed-on: http://review.gluster.com/24
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
Diffstat (limited to 'xlators/performance/io-cache/src/ioc-inode.c')
-rw-r--r-- | xlators/performance/io-cache/src/ioc-inode.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/xlators/performance/io-cache/src/ioc-inode.c b/xlators/performance/io-cache/src/ioc-inode.c index e268cac2621..a305d0316f3 100644 --- a/xlators/performance/io-cache/src/ioc-inode.c +++ b/xlators/performance/io-cache/src/ioc-inode.c @@ -36,6 +36,7 @@ void * str_to_ptr (char *string) { void *ptr = NULL; + GF_VALIDATE_OR_GOTO ("io-cache", string, out); ptr = (void *)strtoul (string, NULL, 16); @@ -122,9 +123,10 @@ ioc_inode_wakeup (call_frame_t *frame, ioc_inode_t *ioc_inode, ioc_inode_lock (ioc_inode); { page_waitq = - ioc_page_wakeup (waiter_page); + __ioc_page_wakeup (waiter_page); } ioc_inode_unlock (ioc_inode); + if (page_waitq) ioc_waitq_return (page_waitq); } else { @@ -132,17 +134,19 @@ ioc_inode_wakeup (call_frame_t *frame, ioc_inode_t *ioc_inode, * page->ready = 0, to avoid double faults */ ioc_inode_lock (ioc_inode); - - if (waiter_page->ready) { - waiter_page->ready = 0; - need_fault = 1; - } else { - gf_log (frame->this->name, GF_LOG_TRACE, - "validate frame(%p) is waiting" - "for in-transit page = %p", - frame, waiter_page); + { + if (waiter_page->ready) { + waiter_page->ready = 0; + need_fault = 1; + } else { + gf_log (frame->this->name, + GF_LOG_TRACE, + "validate frame(%p) is " + "waiting for " + "in-transit page = %p", + frame, waiter_page); + } } - ioc_inode_unlock (ioc_inode); if (need_fault) { |