diff --git a/0001-Use-cmap-for-getting-cluster-name.patch b/0001-Use-cmap-for-getting-cluster-name.patch deleted file mode 100644 index 5a675e7..0000000 --- a/0001-Use-cmap-for-getting-cluster-name.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 6423caf73ef9d0f22acf294e100523bc2af3acc9 Mon Sep 17 00:00:00 2001 -From: Goldwyn Rodrigues -Date: Sat, 21 Dec 2013 18:41:04 -0600 -Subject: [PATCH] Use cmap for getting cluster name - ---- - debugfs.ocfs2/Makefile | 2 +- - libo2cb/o2cb_abi.c | 79 +++++++++++++++++++++++++++----------------------- - o2cb.pc.in | 2 +- - o2cb_ctl/Makefile | 2 +- - 4 files changed, 46 insertions(+), 39 deletions(-) - -diff --git a/debugfs.ocfs2/Makefile b/debugfs.ocfs2/Makefile -index ca4c9a4..30dfa5f 100644 ---- a/debugfs.ocfs2/Makefile -+++ b/debugfs.ocfs2/Makefile -@@ -32,7 +32,7 @@ HFILES = \ - OBJS = $(subst .c,.o,$(CFILES)) - - LIBOCFS2_LIBS = -L$(TOPDIR)/libocfs2 -locfs2 --LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -+LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb $(DL_LIBS) - - MANS = debugfs.ocfs2.8 - -diff --git a/libo2cb/o2cb_abi.c b/libo2cb/o2cb_abi.c -index ae03595..6c3ad73 100644 ---- a/libo2cb/o2cb_abi.c -+++ b/libo2cb/o2cb_abi.c -@@ -35,6 +35,8 @@ - #include - #include - #include -+#include -+#include - - #include - -@@ -1966,52 +1968,57 @@ static errcode_t classic_list_clusters(char ***clusters) - - static errcode_t user_list_clusters(char ***clusters) - { -- errcode_t err = O2CB_ET_SERVICE_UNAVAILABLE; -- int rc, fd = -1; -- char buf[OCFS2_CONTROLD_MAXLINE]; -+ errcode_t ret = O2CB_ET_SERVICE_UNAVAILABLE; -+ void *lib_handle = NULL; -+ char **list; -+ int rv; - -- rc = ocfs2_client_connect(); -- if (rc < 0) { -- /* fprintf(stderr, "Unable to connect to ocfs2_controld: %s\n", -- strerror(-rc)); */ -- switch (rc) { -- case -EACCES: -- case -EPERM: -- err = O2CB_ET_PERMISSION_DENIED; -- break; -+ cmap_handle_t handle; -+ static int (*initialize)(cmap_handle_t *handle); -+ static int (*get_string)(cmap_handle_t handle, -+ const char *string, -+ char **name); -+ static int (*finalize)(cmap_handle_t handle); - -- default: -- err = O2CB_ET_SERVICE_UNAVAILABLE; -- break; -- } -+ -+ lib_handle = dlopen("libcmap.so.4", RTLD_NOW | RTLD_LOCAL); -+ if (!lib_handle) -+ return ret; -+ -+ initialize = dlsym(lib_handle, "cmap_initialize"); -+ if (!initialize) - goto out; -- } -- fd = rc; - -- rc = send_message(fd, CM_LISTCLUSTERS); -- if (rc) { -- /* fprintf(stderr, -- "Unable to send LISTCLUSTERS message: %s\n", -- strerror(-rc)); */ -- err = O2CB_ET_IO; -+ get_string = dlsym(lib_handle, "cmap_get_string"); -+ if (!get_string) - goto out; -- } - -- rc = receive_list(fd, buf, clusters); -- if (rc) { -- /* fprintf(stderr, "Error reading from daemon: %s\n", -- strerror(-rc)); */ -- err = O2CB_ET_IO; -+ finalize = dlsym(lib_handle, "cmap_finalize"); -+ if (!finalize) - goto out; -- } - -- err = 0; -+ rv = initialize(&handle); -+ if (rv != CS_OK) -+ goto out; - --out: -- if (fd != -1) -- close(fd); -+ list = (char **)malloc(sizeof(char *) * 2); -+ if (!list) -+ goto out; - -- return err; -+ rv = get_string(handle, "totem.cluster_name", &list[0]); -+ if (rv != CS_OK) { -+ free(list); -+ ret = O2CB_ET_INTERNAL_FAILURE; -+ goto out; -+ } -+ -+ list[1] = NULL; -+ *clusters = list; -+ finalize(handle); -+ ret = 0; -+out: -+ dlclose(lib_handle); -+ return ret; - } - - errcode_t o2cb_list_clusters(char ***clusters) -diff --git a/o2cb.pc.in b/o2cb.pc.in -index be94b8a..f13c560 100644 ---- a/o2cb.pc.in -+++ b/o2cb.pc.in -@@ -7,5 +7,5 @@ Name: o2cb - Description: Library for accessing the ocfs2 cluster base (o2cb) - Version: @VERSION@ - Requires: com_err --Libs: -L${libdir} -lo2cb -+Libs: -L${libdir} -lo2cb -ldl - Cflags: -I${includedir} -diff --git a/o2cb_ctl/Makefile b/o2cb_ctl/Makefile -index 5efcab4..8589748 100644 ---- a/o2cb_ctl/Makefile -+++ b/o2cb_ctl/Makefile -@@ -13,7 +13,7 @@ LIBTOOLS_INTERNAL_DEPS = $(TOPDIR)/libtools-internal/libtools-internal.a - LIBOCFS2_LIBS = -L$(TOPDIR)/libocfs2 -locfs2 - LIBOCFS2_DEPS = $(TOPDIR)/libocfs2/libocfs2.a - --LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -+LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb $(DL_LIBS) - LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a - - LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) --- -1.8.4 - diff --git a/0001-libo2dlm-Close-file-description-after-use.patch b/0001-libo2dlm-Close-file-description-after-use.patch new file mode 100644 index 0000000..7df2295 --- /dev/null +++ b/0001-libo2dlm-Close-file-description-after-use.patch @@ -0,0 +1,34 @@ +From 63a8fc605fc8dc1c4e327eb17ba6a5a614928608 Mon Sep 17 00:00:00 2001 +From: piaojun +Date: Thu, 2 Apr 2015 20:46:47 +0800 +Subject: [PATCH 1/2] libo2dlm: Close file description after use + +In o2dlm_generate_random_value(), randfd should be closed after use. + +Signed-off-by: Jun Piao +Reviewed-by: Alex Chen +Signed-off-by: Goldwyn Rodrigues +--- + libo2dlm/o2dlm.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/libo2dlm/o2dlm.c b/libo2dlm/o2dlm.c +index dbc642b..375f659 100644 +--- a/libo2dlm/o2dlm.c ++++ b/libo2dlm/o2dlm.c +@@ -102,9 +102,10 @@ static errcode_t o2dlm_generate_random_value(int64_t *value) + if ((randfd = open("/dev/urandom", O_RDONLY)) == -1) + return O2DLM_ET_RANDOM; + +- if (read(randfd, value, readlen) != readlen) ++ if (read(randfd, value, readlen) != readlen) { ++ close(randfd); + return O2DLM_ET_RANDOM; +- ++ } + close(randfd); + + return 0; +-- +2.1.2 + diff --git a/0002-Remove-controld-dependency-in-group_join-leave.patch b/0002-Remove-controld-dependency-in-group_join-leave.patch deleted file mode 100644 index 6016aa9..0000000 --- a/0002-Remove-controld-dependency-in-group_join-leave.patch +++ /dev/null @@ -1,188 +0,0 @@ -From c863784d971acd7efddc415d5140b8846799162e Mon Sep 17 00:00:00 2001 -From: Goldwyn Rodrigues -Date: Fri, 27 Dec 2013 09:20:52 -0600 -Subject: [PATCH] Remove controld dependency in group_join/leave - ---- - libo2cb/o2cb_abi.c | 156 +++-------------------------------------------------- - 1 file changed, 7 insertions(+), 149 deletions(-) - -diff --git a/libo2cb/o2cb_abi.c b/libo2cb/o2cb_abi.c -index 40f8176..5eca49d 100644 ---- a/libo2cb/o2cb_abi.c -+++ b/libo2cb/o2cb_abi.c -@@ -1373,164 +1373,22 @@ static errcode_t user_parse_status(char **args, int *error, char **error_msg) - } - - static errcode_t user_begin_group_join(struct o2cb_cluster_desc *cluster, -- struct o2cb_region_desc *region) -+ struct o2cb_region_desc *region) - { -- errcode_t err; -- int rc; -- int error; -- char *error_msg; -- client_message message; -- char *argv[OCFS2_CONTROLD_MAXARGS + 1]; -- char buf[OCFS2_CONTROLD_MAXLINE]; -- -- if (control_daemon_fd != -1) { -- /* fprintf(stderr, "Join already in progress!\n"); */ -- err = O2CB_ET_INTERNAL_FAILURE; -- goto out; -- } -- -- rc = ocfs2_client_connect(); -- if (rc < 0) { -- /* fprintf(stderr, "Unable to connect to ocfs2_controld: %s\n", -- strerror(-rc)); */ -- switch (rc) { -- case -EACCES: -- case -EPERM: -- err = O2CB_ET_PERMISSION_DENIED; -- break; -- -- default: -- err = O2CB_ET_SERVICE_UNAVAILABLE; -- break; -- } -- goto out; -- } -- control_daemon_fd = rc; -- -- rc = send_message(control_daemon_fd, CM_MOUNT, OCFS2_FS_NAME, -- region->r_name, cluster->c_cluster, -- region->r_device_name, region->r_service); -- if (rc) { -- /* fprintf(stderr, "Unable to send MOUNT message: %s\n", -- strerror(-rc)); */ -- err = O2CB_ET_IO; -- goto out; -- } -- -- rc = receive_message(control_daemon_fd, buf, &message, argv); -- if (rc < 0) { -- /* fprintf(stderr, "Error reading from daemon: %s\n", -- strerror(-rc)); */ -- err = O2CB_ET_IO; -- goto out; -- } -- -- switch (message) { -- case CM_STATUS: -- err = user_parse_status(argv, &error, &error_msg); -- if (err) { -- /* fprintf(stderr, "Bad status message: %s\n", -- strerror(-rc)); */ -- goto out; -- } -- if (error && (error != EALREADY)) { -- /* fprintf(stderr, -- "Error %d from daemon: %s\n", -- error, error_msg); */ -- err = O2CB_ET_CONFIGURATION_ERROR; -- goto out; -- } -- break; -- -- default: -- /* fprintf(stderr, -- "Unexpected message %s from daemon\n", -- message_to_string(message)); */ -- err = O2CB_ET_INTERNAL_FAILURE; -- goto out; -- break; -- } -- -- err = 0; -+ errcode_t ret = 0; - --out: -- if (err && (control_daemon_fd != -1)) { -- close(control_daemon_fd); -- control_daemon_fd = -1; -- } -+ ret = o2cb_validate_cluster_name(cluster); -+ if (ret) -+ return ret; - -- return err; -+ return ret; - } - - static errcode_t user_complete_group_join(struct o2cb_cluster_desc *cluster, - struct o2cb_region_desc *region, - int result) - { -- errcode_t err = O2CB_ET_SERVICE_UNAVAILABLE; -- int rc; -- int error; -- char *error_msg; -- client_message message; -- char *argv[OCFS2_CONTROLD_MAXARGS + 1]; -- char buf[OCFS2_CONTROLD_MAXLINE]; -- -- if (control_daemon_fd == -1) { -- /* fprintf(stderr, "Join not started!\n"); */ -- err = O2CB_ET_SERVICE_UNAVAILABLE; -- goto out; -- } -- -- rc = send_message(control_daemon_fd, CM_MRESULT, OCFS2_FS_NAME, -- region->r_name, result, region->r_service); -- if (rc) { -- /* fprintf(stderr, "Unable to send MRESULT message: %s\n", -- strerror(-rc)); */ -- err = O2CB_ET_IO; -- goto out; -- } -- -- rc = receive_message(control_daemon_fd, buf, &message, argv); -- if (rc < 0) { -- /* fprintf(stderr, "Error reading from daemon: %s\n", -- strerror(-rc)); */ -- err = O2CB_ET_IO; -- goto out; -- } -- -- switch (message) { -- case CM_STATUS: -- err = user_parse_status(argv, &error, &error_msg); -- if (err) { -- /* fprintf(stderr, "Bad status message: %s\n", -- strerror(-rc)); */ -- goto out; -- } -- if (error) { -- /* fprintf(stderr, -- "Error %d from daemon: %s\n", -- error, error_msg); */ -- err = O2CB_ET_CONFIGURATION_ERROR; -- } -- break; -- -- default: -- /* fprintf(stderr, -- "Unexpected message %s from daemon\n", -- message_to_string(message)); */ -- err = O2CB_ET_INTERNAL_FAILURE; -- goto out; -- break; -- } -- -- err = 0; -- --out: -- if (control_daemon_fd != -1) { -- close(control_daemon_fd); -- control_daemon_fd = -1; -- } -- -- return err; -+ return 0; - } - - static errcode_t user_group_leave(struct o2cb_cluster_desc *cluster, --- -1.8.4 - diff --git a/0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch b/0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch new file mode 100644 index 0000000..1ea8780 --- /dev/null +++ b/0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch @@ -0,0 +1,73 @@ +From 41057a7eef9da9d77cde46d336a7f8a19564d7f8 Mon Sep 17 00:00:00 2001 +From: piaojun +Date: Wed, 6 May 2015 10:25:10 +0800 +Subject: [PATCH 2/2] debugfs.ocfs2: Fix a bug in process_open_args() + +In process_open_args(), 'dev' get the wrong value because getopt() will +change the value of args[1]. This problem will cause failure in +debugfs.ocfs2. ocfs2. So we should assign 'dev' before getopt(). + +This fix fixes the bug introduced in 9693851641bfcd0f2bab226e9f03d9ab05cb7edf + +Signed-off-by: Jun Piao +Reviewed-by: Alex Chen +Signed-off-by: Goldwyn Rodrigues +Reported-by: Gang He +--- + debugfs.ocfs2/commands.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +diff --git a/debugfs.ocfs2/commands.c b/debugfs.ocfs2/commands.c +index 1b0b2d9..6da396a 100644 +--- a/debugfs.ocfs2/commands.c ++++ b/debugfs.ocfs2/commands.c +@@ -534,6 +534,7 @@ static int process_open_args(char **args, + int num, argc, c; + + for (argc = 0; (args[argc]); ++argc); ++ dev = strdup(args[1]); + optind = 0; + while ((c = getopt(argc, args, "is:")) != EOF) { + switch (c) { +@@ -544,26 +545,31 @@ static int process_open_args(char **args, + s = strtoul(optarg, &ptr, 0); + break; + default: +- return 1; ++ ret = 1; ++ goto bail; + break; + } + } + +- if (!s) +- return 0; ++ if (!s) { ++ ret = 0; ++ goto bail; ++ } + + num = ocfs2_get_backup_super_offsets(NULL, byte_off, + ARRAY_SIZE(byte_off)); +- if (!num) +- return -1; ++ if (!num) { ++ ret = -1; ++ goto bail; ++ } + + if (s < 1 || s > num) { + fprintf(stderr, "Backup super block is outside of valid range" + "(between 1 and %d)\n", num); +- return -1; ++ ret = -1; ++ goto bail; + } + +- dev = strdup(args[1]); + ret = get_blocksize(dev, byte_off[s-1], &blksize, s); + if (ret) { + com_err(args[0],ret, "Can't get the blocksize from the device" +-- +2.1.2 + diff --git a/0003-Auto-setup-cluster_stack-based-on-what-is-on-disk.patch b/0003-Auto-setup-cluster_stack-based-on-what-is-on-disk.patch deleted file mode 100644 index 7e283d5..0000000 --- a/0003-Auto-setup-cluster_stack-based-on-what-is-on-disk.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 4b99b5a6042fe9b33079df64ab13817a309de528 Mon Sep 17 00:00:00 2001 -From: Goldwyn Rodrigues -Date: Fri, 27 Dec 2013 09:52:09 -0600 -Subject: [PATCH] Auto setup cluster_stack based on what is on disk - -This happens only the first time. -mount.ocfs2 reads the stack from the filesystems superblock. If the -stack is not setup, it will modprobe the modules and write the -appropriate stack name to cluster_stack file. -If it is already present, it tries to edit/re-write it, if different. -If it fails, the mount fails. ---- - include/o2cb/o2cb.h | 1 + - libo2cb/o2cb_abi.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++ - mount.ocfs2/mount.ocfs2.c | 6 +++ - 3 files changed, 111 insertions(+) - -diff --git a/include/o2cb/o2cb.h b/include/o2cb/o2cb.h -index d512cf9..5ef9754 100644 ---- a/include/o2cb/o2cb.h -+++ b/include/o2cb/o2cb.h -@@ -208,5 +208,6 @@ void o2cb_control_close(void); - errcode_t o2cb_control_node_down(const char *uuid, unsigned int nodeid); - - errcode_t o2cb_get_hb_ctl_path(char *buf, int count); -+errcode_t o2cb_setup_stack(char *stack_name); - - #endif /* _O2CB_H */ -diff --git a/libo2cb/o2cb_abi.c b/libo2cb/o2cb_abi.c -index 5eca49d..c751abf 100644 ---- a/libo2cb/o2cb_abi.c -+++ b/libo2cb/o2cb_abi.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -145,6 +146,22 @@ static ssize_t read_single_line_file(const char *file, char *line, - return ret; - } - -+static int write_single_line_file(char *filename, char *line, size_t count) -+{ -+ ssize_t ret = 0; -+ FILE *f; -+ -+ f = fopen(filename, "w"); -+ if (f) { -+ if (fputs(line, f)) -+ ret = strlen(line); -+ fclose(f); -+ } else -+ ret = -errno; -+ -+ return ret; -+} -+ - static ssize_t read_stack_file(char *line, size_t count) - { - return read_single_line_file(CLUSTER_STACK_FILE, line, count); -@@ -2383,3 +2400,90 @@ errcode_t o2cb_get_hb_ctl_path(char *buf, int count) - - return 0; - } -+ -+#define MODPROBE_COMMAND "/sbin/modprobe" -+#define USER_KERNEL_MODULE "ocfs2_stack_user" -+#define O2CB_KERNEL_MODULE "ocfs2_stack_o2cb" -+ -+static int perform_modprobe(char *module_name) -+{ -+ pid_t child; -+ int child_status; -+ -+ char *argv[3]; -+ -+ argv[0] = MODPROBE_COMMAND; -+ argv[1] = module_name; -+ argv[2] = NULL; -+ -+ child = fork(); -+ if (child == 0) { -+ execv(MODPROBE_COMMAND, argv); -+ /* If execv fails, we have a problem */ -+ return -EINVAL; -+ } else -+ wait(&child_status); -+ -+ return child_status; -+} -+ -+errcode_t o2cb_setup_stack(char *stack_name) -+{ -+ char line[64]; -+ int modprobe_performed = 0, write_performed = 0; -+ errcode_t err = O2CB_ET_SERVICE_UNAVAILABLE; -+ int len; -+ -+redo: -+ len = read_single_line_file(CLUSTER_STACK_FILE, line, sizeof(line)); -+ -+ if (len > 0) { -+ if (line[len - 1] == '\n') { -+ line[len - 1] = '\0'; -+ len--; -+ } -+ -+ if (len != OCFS2_STACK_LABEL_LEN) { -+ err = O2CB_ET_INTERNAL_FAILURE; -+ goto out; -+ } -+ -+ if (!strncmp(line, stack_name, OCFS2_STACK_LABEL_LEN)) { -+ err = 0; -+ goto out; -+ } -+ -+ if (!write_performed) { -+ write_single_line_file(CLUSTER_STACK_FILE, stack_name, -+ strlen(stack_name)); -+ write_performed = 1; -+ goto redo; -+ } -+ -+ } else if (len == -ENOENT) { -+ if (!modprobe_performed) { -+ perform_modprobe("ocfs2"); -+ if ((!strncmp(stack_name, OCFS2_PCMK_CLUSTER_STACK, -+ OCFS2_STACK_LABEL_LEN)) || -+ (!strncmp(stack_name, OCFS2_CMAN_CLUSTER_STACK, -+ OCFS2_STACK_LABEL_LEN))) -+ perform_modprobe(USER_KERNEL_MODULE); -+ else if (!strncmp(stack_name, classic_stack.s_name, -+ OCFS2_STACK_LABEL_LEN)) -+ perform_modprobe(O2CB_KERNEL_MODULE); -+ -+ write_single_line_file(CLUSTER_STACK_FILE, stack_name, -+ OCFS2_STACK_LABEL_LEN); -+ write_performed = 1; -+ goto redo; -+ } else -+ err = O2CB_ET_INTERNAL_FAILURE; -+ } else { -+ err = O2CB_ET_INTERNAL_FAILURE; -+ goto out; -+ } -+ -+ err = 0; -+out: -+ return err; -+} -diff --git a/mount.ocfs2/mount.ocfs2.c b/mount.ocfs2/mount.ocfs2.c -index f2ca5cb..c009d82 100644 ---- a/mount.ocfs2/mount.ocfs2.c -+++ b/mount.ocfs2/mount.ocfs2.c -@@ -357,6 +357,12 @@ int main(int argc, char **argv) - if (verbose) - printf("device=%s\n", mo.dev); - -+ ret = o2cb_setup_stack((char *)OCFS2_RAW_SB(fs->fs_super)->s_cluster_info.ci_stack); -+ if (ret) { -+ com_err(progname, ret, "while setting up stack\n"); -+ goto bail; -+ } -+ - if (clustered) { - ret = o2cb_init(); - if (ret) { --- -1.8.4 - diff --git a/0004-mkfs.ocfs2-Abort-if-cluster-information-is-not-detec.patch b/0004-mkfs.ocfs2-Abort-if-cluster-information-is-not-detec.patch deleted file mode 100644 index 13e32fe..0000000 --- a/0004-mkfs.ocfs2-Abort-if-cluster-information-is-not-detec.patch +++ /dev/null @@ -1,86 +0,0 @@ -From f7ea242d2bf76c71cfe7fd9555d44c2486610486 Mon Sep 17 00:00:00 2001 -From: Goldwyn Rodrigues -Date: Fri, 27 Dec 2013 10:01:33 -0600 -Subject: [PATCH] mkfs.ocfs2: Abort if cluster information is not detected - ---- - mkfs.ocfs2/check.c | 19 +++++++++++++++---- - mkfs.ocfs2/mkfs.h | 2 +- - 2 files changed, 16 insertions(+), 5 deletions(-) - -diff --git a/mkfs.ocfs2/check.c b/mkfs.ocfs2/check.c -index f05dc72..75f0e7b 100644 ---- a/mkfs.ocfs2/check.c -+++ b/mkfs.ocfs2/check.c -@@ -33,7 +33,7 @@ int is_classic_stack(char *stack_name) - } - - /* For ocfs2_fill_cluster_information(). Errors are to be ignored */ --void cluster_fill(char **stack_name, char **cluster_name, uint8_t *stack_flags) -+errcode_t cluster_fill(char **stack_name, char **cluster_name, uint8_t *stack_flags) - { - errcode_t err; - struct o2cb_cluster_desc cluster; -@@ -44,11 +44,11 @@ void cluster_fill(char **stack_name, char **cluster_name, uint8_t *stack_flags) - - err = o2cb_init(); - if (err) -- return; -+ goto out; - - err = o2cb_running_cluster_desc(&cluster); - if (err) -- return; -+ goto out; - - if (cluster.c_stack) { - /* -@@ -59,6 +59,8 @@ void cluster_fill(char **stack_name, char **cluster_name, uint8_t *stack_flags) - *cluster_name = cluster.c_cluster; - *stack_flags = cluster.c_flags; - } -+out: -+ return err; - } - - /* For ocfs2_fill_cluster_information(). Errors are to be ignored */ -@@ -132,6 +134,7 @@ int ocfs2_fill_cluster_information(State *s) - uint8_t user_stack_flags, o2cb_stack_flags, disk_stack_flags; - int clusterinfo = 0, userspace = 0; - int ret = -1; -+ errcode_t err; - - if (s->mount == MOUNT_LOCAL) - return 0; -@@ -139,7 +142,15 @@ int ocfs2_fill_cluster_information(State *s) - *user_value = *o2cb_value = *disk_value = '\0'; - - /* get currently active cluster stack */ -- cluster_fill(&o2cb_stack_name, &o2cb_cluster_name, &o2cb_stack_flags); -+ err = cluster_fill(&o2cb_stack_name, &o2cb_cluster_name, &o2cb_stack_flags); -+ if (err && !s->cluster_stack) { -+ com_err(s->progname, 0, "Could not determine cluster " -+ "information.\nEither load the correct kernel module" -+ ", set the cluster_stack and start cluster " -+ "services, or provide --cluster-stack and " -+ "--cluster-name command line arguments.\n"); -+ return -1; -+ } - - /* get cluster stack configured on disk */ - disk_fill(s->device_name, &disk_stack_name, &disk_cluster_name, -diff --git a/mkfs.ocfs2/mkfs.h b/mkfs.ocfs2/mkfs.h -index 13b4fb5..ca2004c 100644 ---- a/mkfs.ocfs2/mkfs.h -+++ b/mkfs.ocfs2/mkfs.h -@@ -243,6 +243,6 @@ struct _State { - }; - - int is_classic_stack(char *stack_name); --void cluster_fill(char **stack_name, char **cluster_name, uint8_t *stack_flags); -+errcode_t cluster_fill(char **stack_name, char **cluster_name, uint8_t *stack_flags); - int ocfs2_fill_cluster_information(State *s); - int ocfs2_check_volume(State *s); --- -1.8.4 - diff --git a/0005-mkfs-Setup-cluster_stack-if-not-setup-based-on-what-.patch b/0005-mkfs-Setup-cluster_stack-if-not-setup-based-on-what-.patch deleted file mode 100644 index 4d90ca4..0000000 --- a/0005-mkfs-Setup-cluster_stack-if-not-setup-based-on-what-.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 8d9ac69db21d36c6e05a58a38da1091bbb70956d Mon Sep 17 00:00:00 2001 -From: Goldwyn Rodrigues -Date: Fri, 27 Dec 2013 10:05:23 -0600 -Subject: [PATCH] mkfs: Setup cluster_stack if not setup based on what is set - ---- - mkfs.ocfs2/check.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/mkfs.ocfs2/check.c b/mkfs.ocfs2/check.c -index 75f0e7b..865dcc3 100644 ---- a/mkfs.ocfs2/check.c -+++ b/mkfs.ocfs2/check.c -@@ -350,6 +350,15 @@ int ocfs2_check_volume(State *s) - goto nolock; - - if (!s->force) { -+ if (s->cluster_stack) { -+ ret = o2cb_setup_stack(s->cluster_stack); -+ if (ret) { -+ com_err(s->progname, ret, -+ "while setting up stack\n"); -+ return -1; -+ } -+ } -+ - ret = o2cb_init(); - if (ret) { - com_err(s->progname, ret, --- -1.8.4 - diff --git a/0006-Auto-setup-pcmk-stack-as-default-if-no-stack-is-setu.patch b/0006-Auto-setup-pcmk-stack-as-default-if-no-stack-is-setu.patch deleted file mode 100644 index db77704..0000000 --- a/0006-Auto-setup-pcmk-stack-as-default-if-no-stack-is-setu.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 1e041fdfb09bfc39aa37bea7d491bcf56794fa1c Mon Sep 17 00:00:00 2001 -From: Goldwyn Rodrigues -Date: Tue, 11 Feb 2014 10:54:23 -0600 -Subject: [PATCH] Auto setup pcmk stack as default if no stack is setup - -Note: This changes the default behavior from classic stack to pcmk ---- - libo2cb/o2cb_abi.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/libo2cb/o2cb_abi.c b/libo2cb/o2cb_abi.c -index 5e0c4fb..26ea03e 100644 ---- a/libo2cb/o2cb_abi.c -+++ b/libo2cb/o2cb_abi.c -@@ -172,7 +172,9 @@ static errcode_t determine_stack(void) - ssize_t len; - char line[100]; - errcode_t err = O2CB_ET_SERVICE_UNAVAILABLE; -+ int setup_performed = 0; - -+redo: - len = read_stack_file(line, sizeof(line)); - if (len > 0) { - if (line[len - 1] == '\n') { -@@ -192,8 +194,11 @@ static errcode_t determine_stack(void) - err = 0; - } - } else if (len == -ENOENT) { -- current_stack = &classic_stack; -- err = 0; -+ if (!setup_performed) { -+ o2cb_setup_stack(OCFS2_PCMK_CLUSTER_STACK); -+ setup_performed = 1; -+ goto redo; -+ } - } - - return err; --- -1.8.4 - diff --git a/_service b/_service index 2c4074b..c4e80e7 100644 --- a/_service +++ b/_service @@ -1,9 +1,9 @@ - git://oss.oracle.com/git/ocfs2-tools.git + https://github.com/markfasheh/ocfs2-tools.git git .git - 1.8.3+git.%ct.%h + 1.8.4 master diff --git a/ocfs2-tools-1.8.3+git.1418704844.65fac00.tar.gz b/ocfs2-tools-1.8.3+git.1418704844.65fac00.tar.gz deleted file mode 100644 index 890782b..0000000 --- a/ocfs2-tools-1.8.3+git.1418704844.65fac00.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0da129916f2be1f4a2950c127d8c31ec57f2c8635b4d5de7c386125b0a5b88b0 -size 1507995 diff --git a/ocfs2-tools-1.8.4.tar.gz b/ocfs2-tools-1.8.4.tar.gz new file mode 100644 index 0000000..67a5b36 --- /dev/null +++ b/ocfs2-tools-1.8.4.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a55b7c49b833562ddb4958e9bfaa7fbf28a955a8f9e6e19a8334cb82c18a9d0 +size 1479049 diff --git a/ocfs2-tools.changes b/ocfs2-tools.changes index d203585..08cb559 100644 --- a/ocfs2-tools.changes +++ b/ocfs2-tools.changes @@ -1,3 +1,24 @@ +------------------------------------------------------------------- +Fri May 8 13:12:57 UTC 2015 - ghe@suse.com + +- libo2dlm: Close file description after use + + 0001-libo2dlm-Close-file-description-after-use.patch +- debugfs.ocfs2: Fix a bug in process_open_args() + + 0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch + +------------------------------------------------------------------- +Thu May 7 12:26:30 UTC 2015 - ghe@suse.com + +- Update ocfs2-tools.tar.bz2 to upstream v1.8.4 +- Use new ocfs2-tools git URL https://github.com/markfasheh/ocfs2-tools.git +- Drop patches (merged upstream): + - 0001-Use-cmap-for-getting-cluster-name.patch + - 0002-Remove-controld-dependency-in-group_join-leave.patch + - 0003-Auto-setup-cluster_stack-based-on-what-is-on-disk.patch + - 0004-mkfs.ocfs2-Abort-if-cluster-information-is-not-detec.patch + - 0005-mkfs-Setup-cluster_stack-if-not-setup-based-on-what-.patch + - 0006-Auto-setup-pcmk-stack-as-default-if-no-stack-is-setu.patch + ------------------------------------------------------------------- Mon Feb 9 03:26:29 UTC 2015 - ghe@suse.com diff --git a/ocfs2-tools.spec b/ocfs2-tools.spec index b8367f7..b4ccdb8 100644 --- a/ocfs2-tools.spec +++ b/ocfs2-tools.spec @@ -1,7 +1,7 @@ # # spec file for package ocfs2-tools # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,12 +17,12 @@ Name: ocfs2-tools -Version: 1.8.3+git.1418704844.65fac00 +Version: 1.8.4 Release: 0 Summary: Oracle Cluster File System 2 Core Tools License: GPL-2.0+ Group: System/Filesystems -Url: http://oss.oracle.com/projects/ocfs2-tools/ +Url: https://ocfs2.wiki.kernel.org/ Source: ocfs2-tools-%{version}.tar.gz Source1: o2cb.ocf Source2: reflink.tar.bz2 @@ -35,12 +35,8 @@ Patch202: fix-configure-check-libs.patch Patch204: dont-use-var-lock-subsys.patch Patch205: ocfs2-tools-kernel33.patch Patch206: ocfs2-tools-resource.patch -Patch222: 0001-Use-cmap-for-getting-cluster-name.patch -Patch223: 0002-Remove-controld-dependency-in-group_join-leave.patch -Patch224: 0003-Auto-setup-cluster_stack-based-on-what-is-on-disk.patch -Patch225: 0004-mkfs.ocfs2-Abort-if-cluster-information-is-not-detec.patch -Patch226: 0005-mkfs-Setup-cluster_stack-if-not-setup-based-on-what-.patch -Patch227: 0006-Auto-setup-pcmk-stack-as-default-if-no-stack-is-setu.patch +Patch301: 0001-libo2dlm-Close-file-description-after-use.patch +Patch302: 0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch BuildRequires: autoconf BuildRequires: e2fsprogs-devel @@ -139,12 +135,8 @@ OCFS2 filesystem. %patch204 -p1 %patch205 -p1 %patch206 -p1 -%patch222 -p1 -%patch223 -p1 -%patch224 -p1 -%patch225 -p1 -%patch226 -p1 -%patch227 -p1 +%patch301 -p1 +%patch302 -p1 %build export PROJECT="ocfs2-tools"