diff options
| author | Krishnan Parthasarathi <kp@gluster.com> | 2012-03-07 00:19:29 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2012-03-07 10:17:41 -0800 | 
| commit | 63281d7eeb5b8ac44e3630ccfbc61774eedf2ae2 (patch) | |
| tree | 48d900da52bc01740b1be0c585de26eaf9b017d9 /libglusterfs/src | |
| parent | ac568d561ba15a148d8de6a3d4431714bce230f6 (diff) | |
protocol/client: Added lk_ctx info in fdctx dump
- Added a brief explanation as to why we can't use gf_log
  when in statedump.
- Removed gf_log messages from client_priv_dump since
  it can cause a 'deadlock' - See statedump.c for explanation
- Added try-lock based accessors for fd_lk_list for dump purposes.
Change-Id: I1d755a4ef2c568acf22fb8c4ab0a33a4f5fd07b4
BUG: 789858
Signed-off-by: Krishnan Parthasarathi <kp@gluster.com>
Reviewed-on: http://review.gluster.com/2882
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/fd-lk.c | 21 | ||||
| -rw-r--r-- | libglusterfs/src/fd-lk.h | 3 | ||||
| -rw-r--r-- | libglusterfs/src/statedump.c | 3 | 
3 files changed, 26 insertions, 1 deletions
diff --git a/libglusterfs/src/fd-lk.c b/libglusterfs/src/fd-lk.c index 8df43bb602f..4e10d649ee9 100644 --- a/libglusterfs/src/fd-lk.c +++ b/libglusterfs/src/fd-lk.c @@ -129,6 +129,27 @@ fd_lk_ctx_ref (fd_lk_ctx_t *lk_ctx)  }  fd_lk_ctx_t * +fd_lk_ctx_try_ref (fd_lk_ctx_t *lk_ctx) +{ +        int         ret         = -1; +        fd_lk_ctx_t *new_lk_ctx = NULL; + +        if (!lk_ctx) { +                goto out; +        } + +        ret = TRY_LOCK (&lk_ctx->lock); +        if (ret) +                goto out; + +        new_lk_ctx = _fd_lk_ctx_ref (lk_ctx); +        UNLOCK (&lk_ctx->lock); + +out: +        return new_lk_ctx; +} + +fd_lk_ctx_t *  fd_lk_ctx_create ()  {          fd_lk_ctx_t *fd_lk_ctx = NULL; diff --git a/libglusterfs/src/fd-lk.h b/libglusterfs/src/fd-lk.h index 3e419e14377..7adbb5131b7 100644 --- a/libglusterfs/src/fd-lk.h +++ b/libglusterfs/src/fd-lk.h @@ -60,6 +60,9 @@ fd_lk_ctx_t *  fd_lk_ctx_ref (fd_lk_ctx_t *lk_ctx);  fd_lk_ctx_t * +fd_lk_ctx_try_ref (fd_lk_ctx_t *lk_ctx); + +fd_lk_ctx_t *  fd_lk_ctx_create ();  int diff --git a/libglusterfs/src/statedump.c b/libglusterfs/src/statedump.c index 9b15c5ba50d..f438c5a61ea 100644 --- a/libglusterfs/src/statedump.c +++ b/libglusterfs/src/statedump.c @@ -30,7 +30,8 @@  #endif /* MALLOC_H */  /* We don't want gf_log in this function because it may cause -   'deadlock' with statedump */ +   'deadlock' with statedump. This is because statedump happens +   inside a signal handler and cannot afford to block on a lock.*/  #ifdef gf_log  # undef gf_log  #endif  | 
