From 0418b0861230072f5a7b59fd54536db1b4a20843 Mon Sep 17 00:00:00 2001 From: Rajesh Amaravathi Date: Wed, 23 May 2012 14:08:37 +0530 Subject: nfs/nlm: statedump of locks This change allows statedump of nlm locks giving number of clients, number of locks each client holds and the files on which lock(s) is/are held. Change-Id: I6341c12ec58005ef71b93b316b527e610ff7ee8f BUG: 824804 Signed-off-by: Rajesh Amaravathi Reviewed-on: http://review.gluster.com/3432 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/nfs/server/src/nlm4.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'xlators/nfs/server/src/nlm4.c') diff --git a/xlators/nfs/server/src/nlm4.c b/xlators/nfs/server/src/nlm4.c index 4755db1df50..5acc1b80978 100644 --- a/xlators/nfs/server/src/nlm4.c +++ b/xlators/nfs/server/src/nlm4.c @@ -48,6 +48,7 @@ #include #include #include +#include /* TODO: * 1) 2 opens racing .. creating an fd leak. @@ -2437,3 +2438,44 @@ nlm4svc_init(xlator_t *nfsx) err: return NULL; } + +int32_t +nlm_priv (xlator_t *this) +{ + int32_t ret = -1; + uint32_t client_count = 0; + uint64_t file_count = 0; + nlm_client_t *client = NULL; + nlm_fde_t *fde = NULL; + char key[GF_DUMP_MAX_BUF_LEN] = {0}; + char gfid_str[64] = {0}; + + gf_proc_dump_add_section("nfs.nlm"); + + LOCK (&nlm_client_list_lk); + + list_for_each_entry (client, &nlm_client_list, nlm_clients) { + + gf_proc_dump_build_key (key, "client", "%d.hostname", client_count); + gf_proc_dump_write (key, "%s\n", client->caller_name); + + file_count = 0; + list_for_each_entry (fde, &client->fdes, fde_list) { + gf_proc_dump_build_key (key, "file", "%ld.gfid", file_count); + memset (gfid_str, 0, 64); + uuid_utoa_r (fde->fd->inode->gfid, gfid_str); + gf_proc_dump_write (key, "%s", gfid_str); + file_count++; + } + + gf_proc_dump_build_key (key, "client", "files-locked"); + gf_proc_dump_write (key, "%ld\n", file_count); + client_count++; + } + + gf_proc_dump_build_key (key, "nlm", "client-count"); + gf_proc_dump_write (key, "%d", client_count); + + UNLOCK (&nlm_client_list_lk); + return ret; +} -- cgit