diff options
-rw-r--r-- | libglusterfs/src/graph.c | 25 | ||||
-rw-r--r-- | libglusterfs/src/xlator.h | 1 |
2 files changed, 18 insertions, 8 deletions
diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c index c18d026595f..70b38dc504d 100644 --- a/libglusterfs/src/graph.c +++ b/libglusterfs/src/graph.c @@ -20,8 +20,6 @@ #include "defaults.h" - - #if 0 static void _gf_dump_details (int argc, char **argv) @@ -119,7 +117,8 @@ glusterfs_graph_set_first (glusterfs_graph_t *graph, xlator_t *xl) int glusterfs_graph_insert (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx, - const char *type, const char *name) + const char *type, const char *name, + gf_boolean_t autoload) { xlator_t *ixl = NULL; @@ -145,6 +144,8 @@ glusterfs_graph_insert (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx, if (!ixl->name) goto err; + ixl->is_autoloaded = autoload; + if (xlator_set_type (ixl, type) == -1) { gf_log ("glusterfs", GF_LOG_ERROR, "%s (%s) initialization failed", @@ -175,7 +176,7 @@ glusterfs_graph_acl (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx) return 0; ret = glusterfs_graph_insert (graph, ctx, "system/posix-acl", - "posix-acl-autoload"); + "posix-acl-autoload", 1); return ret; } @@ -191,7 +192,7 @@ glusterfs_graph_worm (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx) return 0; ret = glusterfs_graph_insert (graph, ctx, "features/worm", - "worm-autoload"); + "worm-autoload", 1); return ret; } @@ -207,7 +208,7 @@ glusterfs_graph_mac_compat (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx) return 0; ret = glusterfs_graph_insert (graph, ctx, "features/mac-compat", - "mac-compat-autoload"); + "mac-compat-autoload", 1); return ret; } @@ -508,18 +509,26 @@ glusterfs_graph_activate (glusterfs_graph_t *graph, glusterfs_ctx_t *ctx) return 0; } + int glusterfs_graph_reconfigure (glusterfs_graph_t *oldgraph, glusterfs_graph_t *newgraph) { - xlator_t *old_xl = NULL; - xlator_t *new_xl = NULL; + xlator_t *old_xl = NULL; + xlator_t *new_xl = NULL; GF_ASSERT (oldgraph); GF_ASSERT (newgraph); old_xl = oldgraph->first; + while (old_xl->is_autoloaded) { + old_xl = old_xl->children->xlator; + } + new_xl = newgraph->first; + while (new_xl->is_autoloaded) { + new_xl = new_xl->children->xlator; + } return xlator_tree_reconfigure (old_xl, new_xl); } diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index eaaa4472434..ec58dc170f1 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -824,6 +824,7 @@ struct _xlator { /* for the memory pool of 'frame->local' */ struct mem_pool *local_pool; + gf_boolean_t is_autoloaded; }; #define xlator_has_parent(xl) (xl->parents != NULL) |