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 e268cac26..a305d0316 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) {  | 
