Hello community, here is the log from the commit of package ocfs2-tools for openSUSE:Factory checked in at 2015-05-10 10:47:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ocfs2-tools (Old) and /work/SRC/openSUSE:Factory/.ocfs2-tools.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ocfs2-tools" Changes: -------- --- /work/SRC/openSUSE:Factory/ocfs2-tools/ocfs2-tools.changes 2015-04-25 11:25:58.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ocfs2-tools.new/ocfs2-tools.changes 2015-05-10 10:47:17.000000000 +0200 @@ -1,0 +2,21 @@ +Fri May 8 13:12:57 UTC 2015 - [email protected] + +- 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 - [email protected] + +- 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 + +------------------------------------------------------------------- Old: ---- 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 ocfs2-tools-1.8.3+git.1418704844.65fac00.tar.gz New: ---- 0001-libo2dlm-Close-file-description-after-use.patch 0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch ocfs2-tools-1.8.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ocfs2-tools.spec ++++++ --- /var/tmp/diff_new_pack.pN7CqD/_old 2015-05-10 10:47:18.000000000 +0200 +++ /var/tmp/diff_new_pack.pN7CqD/_new 2015-05-10 10:47:18.000000000 +0200 @@ -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 @@ 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 @@ %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" ++++++ 0001-libo2dlm-Close-file-description-after-use.patch ++++++ >From 63a8fc605fc8dc1c4e327eb17ba6a5a614928608 Mon Sep 17 00:00:00 2001 From: piaojun <[email protected]> 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 <[email protected]> Reviewed-by: Alex Chen <[email protected]> Signed-off-by: Goldwyn Rodrigues <[email protected]> --- 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 ++++++ 0002-debugfs.ocfs2-Fix-a-bug-in-process_open_args.patch ++++++ >From 41057a7eef9da9d77cde46d336a7f8a19564d7f8 Mon Sep 17 00:00:00 2001 From: piaojun <[email protected]> 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 <[email protected]> Reviewed-by: Alex Chen <[email protected]> Signed-off-by: Goldwyn Rodrigues <[email protected]> Reported-by: Gang He <[email protected]> --- 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 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.pN7CqD/_old 2015-05-10 10:47:18.000000000 +0200 +++ /var/tmp/diff_new_pack.pN7CqD/_new 2015-05-10 10:47:18.000000000 +0200 @@ -1,9 +1,9 @@ <services> <service name="tar_scm" mode="disabled"> - <param name="url">git://oss.oracle.com/git/ocfs2-tools.git</param> + <param name="url">https://github.com/markfasheh/ocfs2-tools.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="versionformat">1.8.3+git.%ct.%h</param> + <param name="versionformat">1.8.4</param> <param name="revision">master</param> </service> ++++++ ocfs2-tools-1.8.3+git.1418704844.65fac00.tar.gz -> ocfs2-tools-1.8.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/Config.make.in new/ocfs2-tools-1.8.4/Config.make.in --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/Config.make.in 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/Config.make.in 2015-05-08 06:54:54.000000000 +0200 @@ -81,6 +81,7 @@ BUILD_OCFS2_CONTROLD = @BUILD_OCFS2_CONTROLD@ BUILD_PCMK_SUPPORT = @BUILD_PCMK_SUPPORT@ BUILD_CMAN_SUPPORT = @BUILD_CMAN_SUPPORT@ +BUILD_CMAP_SUPPORT = @BUILD_CMAP_SUPPORT@ BUILD_FSDLM_SUPPORT = @BUILD_FSDLM_SUPPORT@ CPG_LDFLAGS = @CPG_LDFLAGS@ AIS_LDFLAGS = @AIS_LDFLAGS@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/Makefile new/ocfs2-tools-1.8.4/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -57,6 +57,7 @@ CREDITS \ MAINTAINERS \ README \ + README.O2CB \ Config.make.in \ Preamble.make \ Postamble.make \ @@ -79,6 +80,7 @@ vendor.guess \ Makepdfs \ documentation/samples/cluster.conf \ + documentation/users_guide.txt \ $(PKGCONFIG_SOURCES) \ $(DEBIAN_FILES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/configure.in new/ocfs2-tools-1.8.4/configure.in --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/configure.in 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/configure.in 2015-05-08 06:54:54.000000000 +0200 @@ -9,7 +9,7 @@ # Adjust these for the software version. MAJOR_VERSION=1 MINOR_VERSION=8 -MICRO_VERSION=3 +MICRO_VERSION=4 EXTRA_VERSION= DIST_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION @@ -382,6 +382,25 @@ fi AC_SUBST(BUILD_OCFS2_CONTROLD) +LIBCMAP_FOUND= +AC_CHECK_HEADER(corosync/cmap.h, LIBCMAP_FOUND=yes, + [AC_MSG_WARN([corosync/cmap.h not found, cmap support will not be built. Older api will be used])]) +AC_SUBST(LIBCMAP_FOUND) + +fsdlm_found= +if test "x$LIBCMAP_FOUND" = "xyes"; then + AC_CHECK_LIB(cmap, cmap_initialize, cmap_found=yes) + if test "x$cmap_found" = "xyes"; then + AC_MSG_WARN([libcmap not found, cmap support will not be built. Older api will be used]) + fi +fi + +BUILD_CMAP_SUPPORT= +if test "x$cmap_found" = "xyes"; then + BUILD_CMAP_SUPPORT=yes +fi +AC_SUBST(BUILD_CMAP_SUPPORT) + BUILD_PCMK_SUPPORT= if test "x$pcmk_found" = "xyes" -a "x$BUILD_OCFS2_CONTROLD" = "xyes"; then BUILD_PCMK_SUPPORT=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/debugfs.ocfs2/Makefile new/ocfs2-tools-1.8.4/debugfs.ocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/debugfs.ocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/debugfs.ocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -33,6 +33,12 @@ LIBOCFS2_LIBS = -L$(TOPDIR)/libocfs2 -locfs2 LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif MANS = debugfs.ocfs2.8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/debugfs.ocfs2/commands.c new/ocfs2-tools-1.8.4/debugfs.ocfs2/commands.c --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/debugfs.ocfs2/commands.c 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/debugfs.ocfs2/commands.c 2015-05-08 06:54:54.000000000 +0200 @@ -534,7 +534,6 @@ 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) { @@ -564,6 +563,7 @@ return -1; } + 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" @@ -575,6 +575,7 @@ *superblock = byte_off[s-1]/blksize; ret = 0; bail: + g_free(dev); return ret; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/debugfs.ocfs2/main.c new/ocfs2-tools-1.8.4/debugfs.ocfs2/main.c --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/debugfs.ocfs2/main.c 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/debugfs.ocfs2/main.c 2015-05-08 06:54:54.000000000 +0200 @@ -363,7 +363,7 @@ static int get_logmode_sysfs(const char *path, const char *name) { char *logpath; - char *current_mask; + char *current_mask = NULL; logpath = g_strdup_printf(LOG_CTL_SYSFS_FORMAT, path, name); if (g_file_get_contents(logpath, ¤t_mask, @@ -372,6 +372,7 @@ } g_free(logpath); + g_free(current_mask); return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/fsck.ocfs2/Makefile new/ocfs2-tools-1.8.4/fsck.ocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/fsck.ocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/fsck.ocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -14,6 +14,12 @@ LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif LIBTOOLS_INTERNAL_LIBS = -L$(TOPDIR)/libtools-internal -ltools-internal LIBTOOLS_INTERNAL_DEPS = $(TOPDIR)/libtools-internal/libtools-internal.a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/fswreck/Makefile new/ocfs2-tools-1.8.4/fswreck/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/fswreck/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/fswreck/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -41,7 +41,11 @@ LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt +else LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +endif LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a dist-subdircreate: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/include/o2cb/o2cb.h new/ocfs2-tools-1.8.4/include/o2cb/o2cb.h --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/include/o2cb/o2cb.h 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/include/o2cb/o2cb.h 2015-05-08 06:54:54.000000000 +0200 @@ -208,5 +208,6 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/libo2cb/Makefile new/ocfs2-tools-1.8.4/libo2cb/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/libo2cb/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/libo2cb/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -11,6 +11,14 @@ CFLAGS += -fPIC +ifneq ($(BUILD_CMAP_SUPPORT),) +DEFINES += -DHAVE_CMAP +endif + +ifneq ($(BUILD_FSDLM_SUPPORT),) +DEFINES += -DHAVE_FSDLM +endif + ifneq ($(OCFS2_DEBUG_EXE),) DEBUG_EXE_FILES = $(shell awk '/DEBUG_EXE/{if (k[FILENAME] == 0) {print FILENAME; k[FILENAME] = 1;}}' $(CFILES)) DEBUG_EXE_PROGRAMS = $(addprefix debug_,$(subst .c,,$(DEBUG_EXE_FILES))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/libo2cb/o2cb_abi.c new/ocfs2-tools-1.8.4/libo2cb/o2cb_abi.c --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/libo2cb/o2cb_abi.c 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/libo2cb/o2cb_abi.c 2015-05-08 06:54:54.000000000 +0200 @@ -29,6 +29,7 @@ #include <sys/ioctl.h> #include <sys/ipc.h> #include <sys/sem.h> +#include <sys/wait.h> #include <dirent.h> #include <fcntl.h> #include <unistd.h> @@ -37,6 +38,12 @@ #include <ctype.h> #include <linux/types.h> +#ifdef HAVE_CMAP +#include <corosync/cmap.h> +#endif +#ifdef HAVE_FSDLM +#include <libdlm.h> +#endif #include "o2cb/o2cb.h" #include "o2cb/o2cb_client_proto.h" @@ -47,6 +54,7 @@ #define LOCKING_PROTOCOL_FILE "/sys/fs/ocfs2/max_locking_protocol" #define OCFS2_STACK_LABEL_LEN 4 #define CONTROL_DEVICE "/dev/misc/ocfs2_control" +#define DLM_RECOVER_CALLBACK "/sys/fs/ocfs2/dlm_recover_callback_support" static errcode_t o2cb_validate_cluster_name(struct o2cb_cluster_desc *desc); static errcode_t o2cb_validate_cluster_flags(struct o2cb_cluster_desc *desc, @@ -143,6 +151,22 @@ 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); @@ -153,7 +177,9 @@ 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') { @@ -173,8 +199,11 @@ err = 0; } } else if (len == -ENOENT) { - current_stack = &classic_stack; - err = 0; + if (!setup_performed) { + o2cb_setup_stack(OCFS2_CLASSIC_CLUSTER_STACK); + setup_performed = 1; + goto redo; + } } return err; @@ -1381,6 +1410,26 @@ char *argv[OCFS2_CONTROLD_MAXARGS + 1]; char buf[OCFS2_CONTROLD_MAXLINE]; +#ifdef HAVE_FSDLM + uint32_t maj, min, pat; + + if (strncmp(cluster->c_stack, OCFS2_PCMK_CLUSTER_STACK, OCFS2_STACK_LABEL_LEN)) + goto no_pcmk; + + rc = dlm_kernel_version(&maj, &min, &pat); + + if (rc < 0) + return O2CB_ET_SERVICE_UNAVAILABLE; + + if (read_single_line_file(DLM_RECOVER_CALLBACK, buf, 3) > 0) { + /* Controld is not required */ + if (maj < 6) + return O2CB_ET_INTERNAL_FAILURE; + return 0; + } +no_pcmk: +#endif + if (control_daemon_fd != -1) { /* fprintf(stderr, "Join already in progress!\n"); */ err = O2CB_ET_INTERNAL_FAILURE; @@ -1472,6 +1521,13 @@ char *argv[OCFS2_CONTROLD_MAXARGS + 1]; char buf[OCFS2_CONTROLD_MAXLINE]; +#ifdef HAVE_FSDLM + if (read_single_line_file(DLM_RECOVER_CALLBACK, buf, 3) > 0) { + /* Controld is not required */ + return 0; + } +#endif + if (control_daemon_fd == -1) { /* fprintf(stderr, "Join not started!\n"); */ err = O2CB_ET_SERVICE_UNAVAILABLE; @@ -1542,6 +1598,13 @@ char *argv[OCFS2_CONTROLD_MAXARGS + 1]; char buf[OCFS2_CONTROLD_MAXLINE]; +#ifdef HAVE_FSDLM + if (read_single_line_file(DLM_RECOVER_CALLBACK, buf, 3) > 0) { + /* Controld is not required */ + return 0; + } +#endif + if (control_daemon_fd != -1) { /* fprintf(stderr, "Join in progress!\n"); */ err = O2CB_ET_INTERNAL_FAILURE; @@ -1962,6 +2025,30 @@ return o2cb_list_dir(path, clusters); } +#ifdef HAVE_CMAP +static errcode_t user_list_clusters(char ***clusters) +{ + cmap_handle_t handle; + char **list; + int rv; + + rv = cmap_initialize(&handle); + if (rv != CS_OK) + return O2CB_ET_SERVICE_UNAVAILABLE; + + /* We supply only one cluster_name */ + list = (char **)malloc(sizeof(char *) * 2); + rv = cmap_get_string(handle, "totem.cluster_name", &list[0]); + if (rv != CS_OK) { + free(list); + return O2CB_ET_INTERNAL_FAILURE; + } + + list[1] = NULL; + *clusters = list; + return 0; +} +#else static errcode_t user_list_clusters(char ***clusters) { errcode_t err = O2CB_ET_SERVICE_UNAVAILABLE; @@ -2011,6 +2098,7 @@ return err; } +#endif errcode_t o2cb_list_clusters(char ***clusters) { @@ -2516,3 +2604,92 @@ 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) { + len = write_single_line_file(CLUSTER_STACK_FILE, + stack_name, strlen(stack_name)); + if (len < 0) + goto out; + 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/libocfs2/Makefile new/ocfs2-tools-1.8.4/libocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/libocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/libocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -9,7 +9,11 @@ LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt +else LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +endif LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a CFLAGS += -fPIC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/listuuid/Makefile new/ocfs2-tools-1.8.4/listuuid/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/listuuid/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/listuuid/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -10,7 +10,11 @@ LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt +else LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +endif LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a UNINST_PROGRAMS = listuuid diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mkfs.ocfs2/Makefile new/ocfs2-tools-1.8.4/mkfs.ocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mkfs.ocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/mkfs.ocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -10,6 +10,12 @@ LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mkfs.ocfs2/check.c new/ocfs2-tools-1.8.4/mkfs.ocfs2/check.c --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mkfs.ocfs2/check.c 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/mkfs.ocfs2/check.c 2015-05-08 06:54:54.000000000 +0200 @@ -339,6 +339,15 @@ 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, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mount.ocfs2/Makefile new/ocfs2-tools-1.8.4/mount.ocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mount.ocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/mount.ocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -12,6 +12,12 @@ LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif DEFINES = -DVERSION=\"$(VERSION)\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mount.ocfs2/mount.ocfs2.c new/ocfs2-tools-1.8.4/mount.ocfs2/mount.ocfs2.c --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mount.ocfs2/mount.ocfs2.c 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/mount.ocfs2/mount.ocfs2.c 2015-05-08 06:54:54.000000000 +0200 @@ -358,6 +358,12 @@ 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) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mounted.ocfs2/Makefile new/ocfs2-tools-1.8.4/mounted.ocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/mounted.ocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/mounted.ocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -10,6 +10,12 @@ LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif LIBTOOLS_INTERNAL_LIBS = -L$(TOPDIR)/libtools-internal -ltools-internal LIBTOOLS_INTERNAL_DEPS = $(TOPDIR)/libtools-internal/libtools-internal.a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/o2cb_ctl/Makefile new/ocfs2-tools-1.8.4/o2cb_ctl/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/o2cb_ctl/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/o2cb_ctl/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -13,8 +13,14 @@ LIBOCFS2_LIBS = -L$(TOPDIR)/libocfs2 -locfs2 LIBOCFS2_DEPS = $(TOPDIR)/libocfs2/libocfs2.a -LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/o2image/Makefile new/ocfs2-tools-1.8.4/o2image/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/o2image/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/o2image/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -13,7 +13,11 @@ LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt +else LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +endif LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a sbindir = $(root_sbindir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2_controld/Makefile new/ocfs2-tools-1.8.4/ocfs2_controld/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2_controld/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/ocfs2_controld/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -18,7 +18,7 @@ endif INCLUDES = -I$(TOPDIR)/include -I. $(PCMK_INCLUDES) -LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a LIBOCFS2_LIBS = -L$(TOPDIR)/libocfs2 -locfs2 LIBOCFS2_DEPS = $(TOPDIR)/libocfs2/libocfs2.a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2_hb_ctl/Makefile new/ocfs2-tools-1.8.4/ocfs2_hb_ctl/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2_hb_ctl/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/ocfs2_hb_ctl/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -12,6 +12,12 @@ LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif ifndef OCFS2_DYNAMIC_CTL LDFLAGS += -static diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2cdsl/Makefile new/ocfs2-tools-1.8.4/ocfs2cdsl/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2cdsl/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/ocfs2cdsl/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -9,7 +9,11 @@ LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt +else LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +endif sbindir = $(root_sbindir) SBIN_PROGRAMS = ocfs2cdsl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2console/ocfs2interface/Makefile new/ocfs2-tools-1.8.4/ocfs2console/ocfs2interface/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/ocfs2console/ocfs2interface/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/ocfs2console/ocfs2interface/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -14,7 +14,11 @@ LIBO2DLM_LIBS = -L$(TOPDIR)/libo2dlm -lo2dlm $(DL_LIBS) LIBO2DLM_DEPS = $(TOPDIR)/libo2dlm/libo2dlm.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb -ldlm_lt +else LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb +endif LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a ifdef HAVE_BLKID diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocfs2-tools-1.8.3+git.1418704844.65fac00/tunefs.ocfs2/Makefile new/ocfs2-tools-1.8.4/tunefs.ocfs2/Makefile --- old/ocfs2-tools-1.8.3+git.1418704844.65fac00/tunefs.ocfs2/Makefile 2015-01-27 10:04:16.000000000 +0100 +++ new/ocfs2-tools-1.8.4/tunefs.ocfs2/Makefile 2015-05-08 06:54:54.000000000 +0200 @@ -13,6 +13,12 @@ LIBO2CB_LIBS = -L$(TOPDIR)/libo2cb -lo2cb LIBO2CB_DEPS = $(TOPDIR)/libo2cb/libo2cb.a +ifneq ($(BUILD_FSDLM_SUPPORT),) +LIBO2CB_LIBS += -ldlm_lt +endif +ifneq ($(BUILD_CMAP_SUPPORT),) +LIBO2CB_LIBS += -lcmap +endif UNINST_LIBRARIES = libocfs2ne.a
