diff options
| author | Amar Tumballi <amarts@redhat.com> | 2013-07-31 23:58:04 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-08-21 12:13:16 -0700 | 
| commit | df9bfff8ea08176a3874fb0cdec8fd4b988d3ffa (patch) | |
| tree | 47a4bd23277bd45a96e666bcd9da531d0166e520 /libglusterfs | |
| parent | 271804a26ca73c2eab706eff4b3be9a62bec2b13 (diff) | |
core: changes to support gfid-access
Change-Id: I38d2fdc47e4b805deafca6805e54807976ffdb7e
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 952029
Reviewed-on: http://review.gluster.org/5496
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/glusterfs.h | 2 | ||||
| -rw-r--r-- | libglusterfs/src/graph.c | 23 | ||||
| -rw-r--r-- | libglusterfs/src/inode.c | 26 | ||||
| -rw-r--r-- | libglusterfs/src/inode.h | 1 | 
4 files changed, 40 insertions, 12 deletions
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index 14f0130ef26..324e3f5b45c 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -325,6 +325,7 @@ struct _cmd_args {          int              mac_compat;  	int		 fopen_keep_cache;  	int		 gid_timeout; +        int              aux_gfid_mount;  	struct list_head xlator_options;  /* list of xlator_option_t */  	/* fuse options */ @@ -353,6 +354,7 @@ struct _cmd_args {          int             brick_port;          char           *brick_name;          int             brick_port2; +  };  typedef struct _cmd_args cmd_args_t; diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c index 8a84d4cbc16..1dba63fc052 100644 --- a/libglusterfs/src/graph.c +++ b/libglusterfs/src/graph.c @@ -213,6 +213,21 @@ glusterfs_graph_mac_compat (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)          return ret;  } +int +glusterfs_graph_gfid_access (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx) +{ +        int ret = 0; +        cmd_args_t      *cmd_args = NULL; + +        cmd_args = &ctx->cmd_args; + +        if (!cmd_args->aux_gfid_mount) +                return 0; + +        ret = glusterfs_graph_insert (graph, ctx, "features/gfid-access", +                                      "gfid-access-autoload", 1); +        return ret; +}  static void  gf_add_cmdline_options (glusterfs_graph_t *graph, cmd_args_t *cmd_args) @@ -441,6 +456,14 @@ glusterfs_graph_prepare (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx)                  return -1;          } +        /* XXX: gfid-access */ +        ret = glusterfs_graph_gfid_access (graph, ctx); +        if (ret) { +                gf_log ("graph", GF_LOG_ERROR, +                        "glusterfs graph 'gfid-access' failed"); +                return -1; +        } +          /* XXX: this->ctx setting */          for (trav = graph->first; trav; trav = trav->next) {                  trav->ctx = ctx; diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 6f1c8ec3f25..add686fd208 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -310,7 +310,7 @@ __inode_destroy (inode_t *inode)                  goto noctx;          } -        for (index = 0; index < inode->table->xl->graph->xl_count; index++) { +        for (index = 0; index < inode->table->ctxcount; index++) {                  if (inode->_ctx[index].xl_key) {                          xl = (xlator_t *)(long)inode->_ctx[index].xl_key;                          old_THIS = THIS; @@ -528,10 +528,9 @@ __inode_create (inode_table_t *table)          INIT_LIST_HEAD (&newi->hash);          INIT_LIST_HEAD (&newi->dentry_list); -        newi->_ctx = GF_CALLOC (1, (sizeof (struct _inode_ctx) * -                                    table->xl->graph->xl_count), +        newi->_ctx = GF_CALLOC (1, +                                (sizeof (struct _inode_ctx) * table->ctxcount),                                  gf_common_mt_inode_ctx); -          if (newi->_ctx == NULL) {                  LOCK_DESTROY (&newi->lock);                  mem_put (newi); @@ -1316,6 +1315,7 @@ inode_table_new (size_t lru_limit, xlator_t *xl)                  return NULL;          new->xl = xl; +        new->ctxcount = xl->graph->xl_count + 1;          new->lru_limit = lru_limit; @@ -1466,7 +1466,7 @@ __inode_ctx_set2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p,          if (!inode || !xlator)                  return -1; -        for (index = 0; index < xlator->graph->xl_count; index++) { +        for (index = 0; index < inode->table->ctxcount; index++) {                  if (!inode->_ctx[index].xl_key) {                          if (set_idx == -1)                                  set_idx = index; @@ -1523,12 +1523,12 @@ __inode_ctx_get2 (inode_t *inode, xlator_t *xlator, uint64_t *value1,          if (!inode || !xlator)                  return -1; -        for (index = 0; index < xlator->graph->xl_count; index++) { +        for (index = 0; index < inode->table->ctxcount; index++) {                  if (inode->_ctx[index].xl_key == xlator)                          break;          } -        if (index == xlator->graph->xl_count) { +        if (index == inode->table->ctxcount) {                  ret = -1;                  goto out;          } @@ -1575,12 +1575,13 @@ inode_ctx_del2 (inode_t *inode, xlator_t *xlator, uint64_t *value1,          LOCK (&inode->lock);          { -                for (index = 0; index < xlator->graph->xl_count; index++) { +                for (index = 0; index < inode->table->ctxcount; +                     index++) {                          if (inode->_ctx[index].xl_key == xlator)                                  break;                  } -                if (index == xlator->graph->xl_count) { +                if (index == inode->table->ctxcount) {                          ret = -1;                          goto unlock;                  } @@ -1628,14 +1629,15 @@ inode_dump (inode_t *inode, char *prefix)                  gf_proc_dump_write("ref", "%u", inode->ref);                  gf_proc_dump_write("ia_type", "%d", inode->ia_type);                  if (inode->_ctx) { -                        inode_ctx = GF_CALLOC (inode->table->xl->graph->xl_count, +                        inode_ctx = GF_CALLOC (inode->table->ctxcount,                                                 sizeof (*inode_ctx),                                                 gf_common_mt_inode_ctx);                          if (inode_ctx == NULL) {                                  goto unlock;                          } -                        for (i = 0; i < inode->table->xl->graph->xl_count; i++) { +                        for (i = 0; i < inode->table->ctxcount; +                             i++) {                                  inode_ctx[i] = inode->_ctx[i];                          }                  } @@ -1652,7 +1654,7 @@ unlock:          UNLOCK(&inode->lock);          if (inode_ctx && (dump_options.xl_options.dump_inodectx == _gf_true)) { -                for (i = 0; i < inode->table->xl->graph->xl_count; i++) { +                for (i = 0; i < inode->table->ctxcount; i++) {                          if (inode_ctx[i].xl_key) {                                  xl = (xlator_t *)(long)inode_ctx[i].xl_key;                                  if (xl->dumpops && xl->dumpops->inodectx) diff --git a/libglusterfs/src/inode.h b/libglusterfs/src/inode.h index 199ce44849a..cf766a31bc6 100644 --- a/libglusterfs/src/inode.h +++ b/libglusterfs/src/inode.h @@ -56,6 +56,7 @@ struct _inode_table {          struct mem_pool   *inode_pool;  /* memory pool for inodes */          struct mem_pool   *dentry_pool; /* memory pool for dentrys */          struct mem_pool   *fd_mem_pool; /* memory pool for fd_t */ +        int                ctxcount;    /* number of slots in inode->ctx */  };  | 
