diff options
| -rw-r--r-- | libglusterfs/src/inode.c | 15 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.h | 3 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht.c | 29 | ||||
| -rw-r--r-- | xlators/features/locks/src/posix.c | 26 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client-protocol.c | 28 | 
5 files changed, 88 insertions, 13 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 06f742cc625..ff65d101ec3 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -1213,6 +1213,8 @@ inode_dump (inode_t *inode, char *prefix)  {          char            key[GF_DUMP_MAX_BUF_LEN];          int             ret = -1; +        xlator_t        *xl = NULL; +        int             i = 0;          if (!inode)                   return; @@ -1236,6 +1238,19 @@ inode_dump (inode_t *inode, char *prefix)          gf_proc_dump_build_key(key, prefix, "st_mode");          gf_proc_dump_write(key, "%d", inode->st_mode);  	UNLOCK(&inode->lock); +	if (!inode->_ctx) +	       goto out; + +	for (i = 0; i < inode->table->xl->ctx->xl_count; i++) { +		if (inode->_ctx[i].key) { +			xl = (xlator_t *)(long)inode->_ctx[i].key; +			if (xl->dumpops && xl->dumpops->inodectx) +				xl->dumpops->inodectx (xl, inode); +		} +	} + +out: +        return;  }  void diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 2e815af911a..4adbec2e5d8 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -812,11 +812,14 @@ typedef int32_t (*dumpop_inode_t) (xlator_t *this);  typedef int32_t (*dumpop_fd_t)  (xlator_t   *this); +typedef int32_t (*dumpop_inodectx_t) (xlator_t *this, inode_t *ino); +  struct xlator_dumpops {  	dumpop_priv_t            priv;  	dumpop_inode_t           inode;          dumpop_fd_t              fd; +	dumpop_inodectx_t        inodectx;  };  typedef struct xlator_list { diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index 24782471e1d..46f3b87000c 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -166,6 +166,34 @@ dht_priv_dump (xlator_t *this)          return 0;  } +int32_t +dht_inodectx_dump (xlator_t *this, inode_t *inode) +{ +        int             ret = -1; +        char            key_prefix[GF_DUMP_MAX_BUF_LEN]; +        dht_layout_t    *layout = NULL; +	uint64_t        tmp_layout = 0; + +        if (!inode) +                return -1; + +	ret = inode_ctx_get (inode, this, &tmp_layout); + +        if (ret != 0) +                return ret; + +        layout = (dht_layout_t *)(long)tmp_layout; + +        if (!layout) +                return -1; + +        gf_proc_dump_build_key(key_prefix, "xlator.cluster.dht", +                               "%s.inode.%ld", this->name, inode->ino); +        dht_layout_dump(layout, key_prefix); + +        return 0; +} +  int  notify (xlator_t *this, int event, void *data, ...)  { @@ -373,6 +401,7 @@ struct xlator_mops mops = {  struct xlator_dumpops dumpops = {          .priv = dht_priv_dump, +        .inodectx = dht_inodectx_dump,  }; diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c index 71098be5e13..5514d441495 100644 --- a/xlators/features/locks/src/posix.c +++ b/xlators/features/locks/src/posix.c @@ -769,32 +769,34 @@ pl_forget (xlator_t *this,  } -void -pl_dump_inode_priv (inode_t *inode) +int32_t +pl_dump_inode_priv (xlator_t *this, inode_t *inode)  { -        int ret = -1; -        uint64_t   tmp_pl_inode = 0; -        pl_inode_t *pl_inode = NULL; -        char key[GF_DUMP_MAX_BUF_LEN]; +        int             ret = -1; +        uint64_t        tmp_pl_inode = 0; +        pl_inode_t      *pl_inode = NULL; +        char            key[GF_DUMP_MAX_BUF_LEN];          if (!inode) -                return; +                return -1; -	ret = inode_ctx_get (inode, inode->table->xl, &tmp_pl_inode); +	ret = inode_ctx_get (inode, this, &tmp_pl_inode);  	if (ret != 0)  -                return; +                return ret;          pl_inode = (pl_inode_t *)(long)tmp_pl_inode;          if (!pl_inode)  -                return; +                return -1;          gf_proc_dump_build_key(key,                                  "xlator.feature.locks.inode", -                               "%ld.%s",inode->ino, "mandatory"); +                               "%ld.mandatory",inode->ino);          gf_proc_dump_write(key, "%d", pl_inode->mandatory); + +        return 0;  } @@ -916,7 +918,7 @@ struct xlator_mops mops = {  };  struct xlator_dumpops dumpops = { -        .inode      = pl_dump_inode, +        .inodectx    = pl_dump_inode_priv,  };  struct xlator_cbks cbks = { diff --git a/xlators/protocol/client/src/client-protocol.c b/xlators/protocol/client/src/client-protocol.c index bd6854caa6d..db4e507ae1a 100644 --- a/xlators/protocol/client/src/client-protocol.c +++ b/xlators/protocol/client/src/client-protocol.c @@ -6105,7 +6105,7 @@ client_priv_dump (xlator_t *this)          conf = this->private;           if (!conf) { -                gf_log (this->name, GF_LOG_WARNING, +		gf_log (this->name, GF_LOG_WARNING,                          "conf null in xlator");                  return -1;           } @@ -6141,6 +6141,31 @@ client_priv_dump (xlator_t *this)  } +int32_t +client_inodectx_dump (xlator_t *this, inode_t *inode) +{ +	ino_t   par = 0; +        int     ret = -1; +        char    key[GF_DUMP_MAX_BUF_LEN]; + +        if (!inode) +                return -1; + +        if (!this) +                return -1; + +	ret = inode_ctx_get (inode, this, &par); + +        if (ret != 0) +                return ret; + +        gf_proc_dump_build_key(key, "xlator.protocol.client", +                               "%s.inode.%ld.par", +                                this->name,inode->ino); +        gf_proc_dump_write(key, "%ld", par); + +        return 0; +}  /*   * client_protocol_notify - notify function for client protocol @@ -6358,6 +6383,7 @@ struct xlator_cbks cbks = {  struct xlator_dumpops dumpops = {          .priv      =  client_priv_dump, +        .inodectx  =  client_inodectx_dump,  };  struct volume_options options[] = {  | 
