From f7fbefc50be5560c58b4e5875f91e9452352c2ed Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Tue, 10 Feb 2009 11:13:29 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ocfs2-tools?expand=0&rev=15 --- o2cb.ocf | 1 + ocfs2-devel.diff | 38 +-- ocfs2-tools.changes | 17 ++ ocfs2-tools.spec | 14 +- ocfs2_controld-pacemaker.diff | 487 ++++++++++++++++++++++++++++++ ocfs2console-display-fix.diff | 33 +- ocfs2console-extraoption-fix.diff | 29 ++ 7 files changed, 572 insertions(+), 47 deletions(-) create mode 100644 ocfs2_controld-pacemaker.diff create mode 100644 ocfs2console-extraoption-fix.diff diff --git a/o2cb.ocf b/o2cb.ocf index dd3445e..248ce25 100644 --- a/o2cb.ocf +++ b/o2cb.ocf @@ -155,6 +155,7 @@ bringup_daemon() COUNT=`expr $COUNT + 1` if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then ocf_log err "`basename $DAEMON` did not come up" + ps axf | grep -C 3 $$ return $OCF_ERR_GENERIC fi status_daemon; rc=$? diff --git a/ocfs2-devel.diff b/ocfs2-devel.diff index 50185ac..f286568 100644 --- a/ocfs2-devel.diff +++ b/ocfs2-devel.diff @@ -1,5 +1,3 @@ -Only in upstream: .gitignore -Only in dev: .hgtags --- upstream/ocfs2_controld/main.c 2008-10-27 14:55:50.000000000 +0100 +++ dev/ocfs2_controld/main.c 2008-10-27 14:57:24.000000000 +0100 @@ -1027,6 +1027,7 @@ static void lockfile(void) @@ -10,7 +8,7 @@ Only in dev: .hgtags pid_t pid = fork(); if (pid < 0) { perror("main: cannot fork"); -@@ -1040,6 +1041,18 @@ static void daemonize(void) +@@ -1040,7 +1041,19 @@ static void daemonize(void) close(0); close(1); close(2); @@ -29,39 +27,7 @@ Only in dev: .hgtags openlog("ocfs2_controld", LOG_PID, LOG_DAEMON); lockfile(); ---- upstream/ocfs2_controld/pacemaker.c 2008-09-11 16:51:11.000000000 +0200 -+++ dev/ocfs2_controld/pacemaker.c 2008-10-23 13:14:56.000000000 +0200 -@@ -20,8 +20,16 @@ - #include - #include - --#include --#include -+#include -+ -+#include -+/* heartbeat support is irrelevant here */ -+#undef SUPPORT_HEARTBEAT -+#define SUPPORT_HEARTBEAT 0 -+ -+#include -+#include -+#include - #include - - #include "ocfs2-kernel/kernel-list.h" -@@ -29,9 +37,6 @@ - - #include "ocfs2_controld.h" - --#include --#include --#include - #include - - int our_nodeid = 0; -Only in dev: static.patch -Only in dev/tunefs.ocfs2: Makefile.rej + --- upstream/vendor/common/o2cb.init.sh 2008-09-11 16:51:11.000000000 +0200 +++ dev/vendor/common/o2cb.init.sh 2008-10-23 14:36:49.000000000 +0200 @@ -8,7 +8,8 @@ diff --git a/ocfs2-tools.changes b/ocfs2-tools.changes index 336d68e..4305f1c 100644 --- a/ocfs2-tools.changes +++ b/ocfs2-tools.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Tue Feb 10 10:07:36 CET 2009 - coyli@suse.de + +- ocfs2console: remove unsupported option when calling tunefs.ocfs2 (bnc#472353) + +------------------------------------------------------------------- +Mon Feb 9 16:52:25 CET 2009 - abeekhof@suse.de + +- Re-implement kill_stack_node() to use node attributes instead of stonithd +- Reuse more functions from Pacemaker shared libraries +- Have the o2cb OCF agent produce extra output if the daemon doesn't come up + +------------------------------------------------------------------- +Thu Feb 5 19:55:41 CET 2009 - coyli@suse.de + +- Replace Hu Ziming's patch to Jeol Becker's patch for bnc#448523. + ------------------------------------------------------------------- Tue Jan 13 17:12:27 CET 2009 - coyli@suse.de diff --git a/ocfs2-tools.spec b/ocfs2-tools.spec index 1dcbe41..d85c1fb 100644 --- a/ocfs2-tools.spec +++ b/ocfs2-tools.spec @@ -22,7 +22,7 @@ Name: ocfs2-tools BuildRequires: e2fsprogs-devel glib2-devel libdlm-devel libopenais-devel libpacemaker-devel libxml2-devel libxslt-devel python-devel python-gtk-devel readline-devel update-desktop-files Summary: Oracle Cluster File System 2 Core Tools Version: 1.4.1 -Release: 9 +Release: 14 License: GPL v2 or later Group: System/Filesystems Source: ocfs2-tools.tar.bz2 @@ -32,6 +32,8 @@ Patch6: ocfs2console-display-fix.diff Patch99: ocfs2-devel.diff Patch100: ocfs2-quota.diff Patch101: change-quotafile-names.diff +Patch102: ocfs2_controld-pacemaker.diff +Patch103: ocfs2console-extraoption-fix.diff Url: http://oss.oracle.com/projects/ocfs2-tools/ Requires: net-tools, modutils, e2fsprogs, /sbin/chkconfig, glib2 >= 2.2.3 PreReq: %insserv_prereq %fillup_prereq @@ -96,6 +98,8 @@ Authors: %patch99 -p1 %patch100 -p1 %patch101 -p1 +%patch102 -p1 +%patch103 -p1 %build %{?suse_update_config:%{suse_update_config -f}} @@ -202,6 +206,14 @@ fi %{_libdir}/pkgconfig/ocfs2.pc %changelog +* Tue Feb 10 2009 coyli@suse.de +- ocfs2console: remove unsupported option when calling tunefs.ocfs2 (bnc#472353) +* Mon Feb 09 2009 abeekhof@suse.de +- Re-implement kill_stack_node() to use node attributes instead of stonithd +- Reuse more functions from Pacemaker shared libraries +- Have the o2cb OCF agent produce extra output if the daemon doesn't come up +* Thu Feb 05 2009 coyli@suse.de +- Replace Hu Ziming's patch to Jeol Becker's patch for bnc#448523. * Tue Jan 13 2009 coyli@suse.de - fix ocfs2console crashing when DISOPLAY is not correclty set(bnc#448523), thanks to Hu Ziming from IBM. diff --git a/ocfs2_controld-pacemaker.diff b/ocfs2_controld-pacemaker.diff new file mode 100644 index 0000000..9ed314e --- /dev/null +++ b/ocfs2_controld-pacemaker.diff @@ -0,0 +1,487 @@ +diff --git a/ocfs2_controld/pacemaker.c b/ocfs2_controld/pacemaker.c +--- a/ocfs2_controld/pacemaker.c ++++ b/ocfs2_controld/pacemaker.c +@@ -20,20 +20,31 @@ + #include + #include + +-#include +-#include +-#include ++#include ++ ++#include ++ ++/* heartbeat support is irrelevant here */ ++#undef SUPPORT_HEARTBEAT ++#define SUPPORT_HEARTBEAT 0 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include + + #include "ocfs2-kernel/kernel-list.h" + #include "o2cb/o2cb.h" + + #include "ocfs2_controld.h" + +-#include +-#include +-#include + #include + ++#define log_printf(level, format, args...) syslog(level, "%s:%d " format "\n", __FILE__, __LINE__, ##args) ++ + int our_nodeid = 0; + static int pcmk_ci; + static int stonithd_ci; +@@ -44,29 +55,57 @@ const char *stackname = "pcmk"; + extern int ais_fd_async; + char *local_node_uname = NULL; + +-int kill_stack_node(int nodeid) +-{ +- int error = 1; +- stonith_ops_t st_op; +- char *target = nodeid2name(nodeid); +- +- log_debug("killing node %d (aka. %s)", nodeid, target); +- +- if(target) { +- st_op.timeout = 150; +- st_op.node_uuid = NULL; +- st_op.private_data = NULL; +- st_op.node_name = target; +- st_op.optype = POWEROFF; +- +- error = stonithd_node_fence(&st_op); +- } ++static IPC_Channel *attrd = NULL; + +- if (error) +- log_debug("Unable to kill node %d, %d %d", nodeid, error, +- errno); ++static void attrd_deadfn(int ci) ++{ ++ log_printf(LOG_ERR, "Lost connection to attrd"); ++ attrd = NULL; ++ return; ++} + +- return error; ++int kill_stack_node(int nodeid) ++{ ++ gboolean rc = FALSE; ++ xmlNode *update = NULL; ++ time_t now = time(NULL); ++ crm_node_t *node = crm_get_peer(nodeid, NULL); ++ ++ if(node == NULL || node->uname == NULL) { ++ log_printf(LOG_ERR, "%s: Don't know how to kick node %d/%p", __FUNCTION__, nodeid, node); ++ return -1; ++ } ++ ++ if(attrd == NULL) { ++ log_printf(LOG_INFO, "Connecting to attrd..."); ++ attrd = init_client_ipc_comms_nodispatch(T_ATTRD); ++ if(attrd) { ++ connection_add(attrd->ops->get_recv_select_fd(attrd), NULL, attrd_deadfn); ++ } ++ } ++ ++ if(attrd != NULL) { ++ update = create_xml_node(NULL, __FUNCTION__); ++ crm_xml_add(update, F_TYPE, T_ATTRD); ++ crm_xml_add(update, F_ORIG, crm_system_name); ++ ++ crm_xml_add(update, F_ATTRD_TASK, "update"); ++ crm_xml_add(update, F_ATTRD_SECTION, XML_CIB_TAG_STATUS); ++ crm_xml_add(update, F_ATTRD_ATTRIBUTE, "terminate"); ++ crm_xml_add_int(update, F_ATTRD_VALUE, now); ++ crm_xml_add(update, F_ATTRD_HOST, node->uname); ++ ++ rc = send_ipc_message(attrd, update); ++ free_xml(update); ++ } ++ ++ if(rc) { ++ log_printf(LOG_INFO, "Requested that node %d/%s be kicked from the cluster", nodeid, node->uname); ++ return 1; ++ } ++ ++ log_printf(LOG_ERR, "Could not kick node %d/%s from the cluster", nodeid, node->uname); ++ return 0; + } + + char *nodeid2name(int nodeid) { +@@ -81,7 +120,7 @@ char *nodeid2name(int nodeid) { + int validate_cluster(const char *cluster) + { + if (!clustername) { +- log_error("Trying to validate before pacemaker is alive"); ++ log_printf(LOG_ERR, "Trying to validate before pacemaker is alive"); + return 0; + } + +@@ -94,12 +133,12 @@ int validate_cluster(const char *cluster) + int get_clustername(const char **cluster) + { + if (!clustername) { +- log_error("Trying to validate before pacemaker is alive"); ++ log_printf(LOG_ERR, "Trying to validate before pacemaker is alive"); + return -EIO; + } + + if (!cluster) { +- log_error("NULL passed!"); ++ log_printf(LOG_ERR, "NULL passed!"); + return -EINVAL; + } + +@@ -110,316 +149,36 @@ int get_clustername(const char **cluster) + static void dead_pcmk(int ci) + { + if (ci != pcmk_ci) { +- log_error("Unknown connection %d", ci); ++ log_printf(LOG_ERR, "Unknown connection %d", ci); + return; + } + +- log_error("pacemaker connection died"); ++ log_printf(LOG_ERR, "pacemaker connection died"); + shutdown_daemon(); + connection_dead(ci); + } + ++extern void terminate_ais_connection(void); ++ + void exit_stack(void) + { +- log_debug("closing stonithd connection"); +- stonithd_signoff(); +- + log_debug("closing pacemaker connection"); +- if (ais_fd_async) { +- close(ais_fd_async); +- ais_fd_async = 0; +- } +- if (ais_fd_sync) { +- close(ais_fd_sync); +- ais_fd_sync = 0; +- } ++ terminate_ais_connection(); + } + + static void process_pcmk(int ci) + { +- /* ci ::= client number */ +- char *data = NULL; +- char *uncompressed = NULL; +- AIS_Message *msg = NULL; +- SaAisErrorT rc = SA_AIS_OK; +- mar_res_header_t *header = NULL; +- static int header_len = sizeof(mar_res_header_t); +- +- header = malloc(header_len); +- memset(header, 0, header_len); +- +- errno = 0; +- rc = saRecvRetry(ais_fd_async, header, header_len); +- if (rc != SA_AIS_OK) { +- cl_perror("Receiving message header failed: (%d) %s", rc, +- ais_error2text(rc)); +- goto bail; +- } else if(header->size == header_len) { +- log_error("Empty message: id=%d, size=%d, error=%d, header_len=%d", +- header->id, header->size, header->error, header_len); +- goto done; +- } else if(header->size == 0 || header->size < header_len) { +- log_error("Mangled header: size=%d, header=%d, error=%d", +- header->size, header_len, header->error); +- goto done; +- } else if(header->error != 0) { +- log_error("Header contined error: %d", header->error); +- } +- +- header = realloc(header, header->size); +- /* Use a char* so we can store the remainder into an offset */ +- data = (char*)header; +- +- errno = 0; +- rc = saRecvRetry(ais_fd_async, data+header_len, header->size - header_len); +- msg = (AIS_Message*)data; +- +- if (rc != SA_AIS_OK) { +- cl_perror("Receiving message body failed: (%d) %s", rc, ais_error2text(rc)); +- goto bail; +- } +- +- data = msg->data; +- if(msg->is_compressed && msg->size > 0) { +- int rc = BZ_OK; +- unsigned int new_size = msg->size; +- +- if (check_message_sanity(msg, NULL) == FALSE) +- goto badmsg; +- +- log_debug("Decompressing message data"); +- uncompressed = malloc(new_size); +- memset(uncompressed, 0, new_size); +- +- rc = BZ2_bzBuffToBuffDecompress( +- uncompressed, &new_size, data, msg->compressed_size, +- 1, 0); +- +- if(rc != BZ_OK) { +- log_error("Decompression failed: %d", rc); +- goto badmsg; +- } +- +- CRM_ASSERT(rc == BZ_OK); +- CRM_ASSERT(new_size == msg->size); +- +- data = uncompressed; +- +- } else if(check_message_sanity(msg, data) == FALSE) { +- goto badmsg; +- +- } else if(safe_str_eq("identify", data)) { +- int pid = getpid(); +- char *pid_s = crm_itoa(pid); +- +- send_ais_text(0, pid_s, TRUE, NULL, crm_msg_ais); +- crm_free(pid_s); +- goto done; +- } +- +- if (msg->header.id == crm_class_members) { +- xmlNode *xml = string2xml(data); +- +- if(xml != NULL) { +- const char *value = crm_element_value(xml, "id"); +- if(value) +- crm_peer_seq = crm_int_helper(value, NULL); +- +- log_debug("Updating membership %llu", crm_peer_seq); +- /* crm_log_xml_info(xml, __PRETTY_FUNCTION__); */ +- xml_child_iter(xml, node, crm_update_ais_node(node, crm_peer_seq)); +- crm_calculate_quorum(); +- free_xml(xml); +- } else { +- log_error("Invalid peer update: %s", data); +- } +- } else { +- log_error("Unexpected AIS message type: %d", msg->header.id); +- } +- +-done: +- free(uncompressed); +- free(msg); +- return; +- +-badmsg: +- log_error("Invalid message (id=%d, dest=%s:%s, from=%s:%s.%d):" +- " min=%d, total=%d, size=%d, bz2_size=%d", +- msg->id, ais_dest(&(msg->host)), msg_type2text(msg->host.type), +- ais_dest(&(msg->sender)), msg_type2text(msg->sender.type), +- msg->sender.pid, (int)sizeof(AIS_Message), +- msg->header.size, msg->size, msg->compressed_size); +- free(uncompressed); +- free(msg); +- return; +- +-bail: +- log_error("AIS connection failed"); +- return; +-} +- +-static void dead_stonithd(int ci) +-{ +- if (ci != stonithd_ci) { +- log_error("Unknown connection %d", ci); +- return; +- } +- +- log_error("stonithd connection died"); +- shutdown_daemon(); +- connection_dead(ci); +-} +- +-static void process_stonithd(int ci) +-{ +- IPC_Channel *stonithd_ch = stonithd_input_IPC_channel(); +- +- while (stonithd_op_result_ready()) { +- if (stonithd_ch->ch_status != IPC_CONNECT) { +- /* The message which was pending for us is that +- * the IPC status is now IPC_DISCONNECT */ +- break; +- } +- +- if (ST_FAIL == stonithd_receive_ops_result(FALSE)) { +- log_error("stonithd_receive_ops_result() failed"); +- } +- } +- +- if (stonithd_ch->ch_status != IPC_CONNECT) +- dead_stonithd(stonithd_ci); +-} +- +-static void result_stonithd(stonith_ops_t *op) +-{ +- if (op == NULL) { +- log_error("Called with a NULL op!"); +- return; +- } +- +- log_debug("Stonithd result: call=%d, optype=%d, node_name=%s, result=%d, node_list=%s, action=%s", +- op->call_id, op->optype, op->node_name, op->op_result, +- (char *)op->node_list, op->private_data); +- +- switch(op->op_result) { +- case STONITH_SUCCEEDED: +- break; +- case STONITH_CANNOT: +- case STONITH_TIMEOUT: +- case STONITH_GENERIC: +- log_error("Stonith of %s failed (%d)", +- op->node_name, op->op_result); +- break; +- default: +- log_error("Unsupported action result: %d", op->op_result); +- } +-} +- +-static gboolean setup_stonith(void) +-{ +- int lpc = 0; +- int rc = ST_OK; +- int stonithd_fd; +- const char *reason = NULL; +- IPC_Channel *stonithd_ch = NULL; +- +- for(lpc = 0; lpc < 30; lpc++) { +- log_debug("Attempting connection to fencing daemon..."); +- +- sleep(1); +- rc = stonithd_signon("ocfs2-tools"); +- if(rc == ST_OK) +- break; +- +- log_error("Sign-in failed: pausing and trying again in 2s..."); +- sleep(1); +- } +- +- if(rc != ST_OK) { +- reason = "Sign-in failed"; +- goto bail; +- } +- +- rc = stonithd_set_stonith_ops_callback(result_stonithd); +- if(rc != ST_OK) { +- reason = "Setup failed"; +- goto bail; +- } +- +- stonithd_ch = stonithd_input_IPC_channel(); +- if(stonithd_ch == NULL) { +- reason = "No connection"; +- goto bail; +- } +- stonithd_fd = stonithd_ch->ops->get_recv_select_fd(stonithd_ch); +- if(stonithd_ch <= 0) { +- reason = "No fd"; +- goto bail; +- } +- +- stonithd_ci = connection_add(stonithd_fd, process_stonithd, +- dead_stonithd); +- if (stonithd_ci < 0) { +- log_error("Unable to add stonithd client: %s", +- strerror(-stonithd_ci)); +- goto bail; +- } +- +- return TRUE; +- +-bail: +- log_error("Unable to add stonithd client: %s", reason); +- return FALSE; ++ ais_dispatch(ais_fd_async, NULL); + } + + int setup_stack(void) + { +- int retries = 0; +- int pid; +- char *pid_s; +- int rc = SA_AIS_OK; +- struct utsname name; +- + crm_log_init("ocfs2_controld", LOG_INFO, FALSE, TRUE, 0, NULL); +- crm_peer_init(); + +- if (local_node_uname == NULL) { +- if (uname(&name) < 0) { +- cl_perror("uname(2) call failed"); +- exit(100); ++ if(init_ais_connection(NULL, NULL, NULL, &local_node_uname, &our_nodeid) == FALSE) { ++ log_printf(LOG_ERR, "Connection to our AIS plugin (%d) failed", CRM_SERVICE); ++ return -1; + } +- local_node_uname = crm_strdup(name.nodename); +- log_debug("Local node name: %s", local_node_uname); +- } +- +-retry: +- log_debug("Creating connection to our AIS plugin"); +- rc = saServiceConnect (&ais_fd_sync, &ais_fd_async, CRM_SERVICE); +- if (rc != SA_AIS_OK) +- log_error("Connection to our AIS plugin (%d) failed: %s (%d)", +- CRM_SERVICE, ais_error2text(rc), rc); +- +- switch(rc) { +- case SA_AIS_OK: +- break; +- case SA_AIS_ERR_TRY_AGAIN: +- if(retries < 30) { +- sleep(1); +- retries++; +- goto retry; +- } +- log_error("Retry count exceeded"); +- return 0; +- default: +- return 0; +- } +- +- log_debug("AIS connection established"); +- +- pid = getpid(); +- pid_s = crm_itoa(pid); +- send_ais_text(0, pid_s, TRUE, NULL, crm_msg_ais); +- crm_free(pid_s); + + /* Sign up for membership updates */ + send_ais_text(crm_class_notify, "true", TRUE, NULL, crm_msg_ais); +@@ -427,14 +186,11 @@ retry: + /* Requesting the current list of known nodes */ + send_ais_text(crm_class_members, __FUNCTION__, TRUE, NULL, crm_msg_ais); + +- our_nodeid = get_ais_nodeid(); +- log_debug("Local node id: %d", our_nodeid); +- + pcmk_ci = connection_add(ais_fd_async, process_pcmk, dead_pcmk); +- if (pcmk_ci >= 0 && setup_stonith()) ++ if (pcmk_ci >= 0) + return ais_fd_async; + +- log_error("Unable to add pacemaker client: %s", strerror(-pcmk_ci)); ++ log_printf(LOG_ERR, "Unable to add pacemaker client: %s", strerror(-pcmk_ci)); + exit_stack(); + return pcmk_ci; + } diff --git a/ocfs2console-display-fix.diff b/ocfs2console-display-fix.diff index 3c66efd..ebfd5a6 100644 --- a/ocfs2console-display-fix.diff +++ b/ocfs2console-display-fix.diff @@ -1,28 +1,41 @@ From: Coly Li Subject: fix ocfs2console crashing when DISPLAY is not correctly set References: bnc#448523 -Author: Hu Ziming +Author: Joel Becker When DISPLAY is not correctly set, this patch makes ocfs2console report error mesage and exit, other than a ugly crash. -Signed-off-by: Hu Ziming +Signed-off-by: Joel Becker Signed-off-by: Coly Li --- - ocfs2console/ocfs2console | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - diff --git a/ocfs2console/ocfs2console b/ocfs2console/ocfs2console -index 77ab623..580d54b 100755 +index 77ab623..17dcfc5 100755 --- a/ocfs2console/ocfs2console +++ b/ocfs2console/ocfs2console -@@ -3,6 +3,9 @@ +@@ -3,14 +3,23 @@ from ocfs2interface.about import process_args nodeconf = process_args() - + +import warnings -+warnings.simplefilter("error") ++warnings.filterwarnings("error") + try: import gtk - except RuntimeError: +-except RuntimeError: ++except Exception, e: + import sys +- print >>sys.stderr, '''ERROR: ocfs2console needs an X11 display. ++ if str(e).lower().find('display') == -1: ++ print >>sys.stderr, '''ERROR: Unable to initialize the windowing ++system: %s\n''' % e ++ else: ++ print >>sys.stderr, '''ERROR: ocfs2console needs an X11 display. + Make sure a proper setup for your display environment exists.\n''' + sys.exit(1) + ++warnings.resetwarnings() ++ + if nodeconf: + from ocfs2interface.nodeconfig import node_config + node_config() diff --git a/ocfs2console-extraoption-fix.diff b/ocfs2console-extraoption-fix.diff new file mode 100644 index 0000000..8add6f2 --- /dev/null +++ b/ocfs2console-extraoption-fix.diff @@ -0,0 +1,29 @@ +From: Coly Li +Subject: ocfs2console: remove unsupported option when calling tunefs.ocfs2 +References: bnc#472353 +commit 1adbec9a9d409f3f2c127ddbff8c4504e2d126ed +Author: Coly Li +Date: Sun Feb 8 12:20:05 2009 +0800 + + ocfs2console: remove unsupported option when calling tunefs.ocfs2 + + ocfs2interface/tune.py call tunefs.ocfs2 with -x option, which is not supported in tunefs.ocfs2. + This patch remove this unsupported option from ocfs2console. + + Signed-off-by: Coly Li + Cc: Joel Becker + Signed-off-by: Joel Becker + +diff --git a/ocfs2console/ocfs2interface/tune.py b/ocfs2console/ocfs2interface/tune.py +index c76dbaa..0e514bd 100644 +--- a/ocfs2console/ocfs2interface/tune.py ++++ b/ocfs2console/ocfs2interface/tune.py +@@ -24,7 +24,7 @@ from process import Process + + from fswidgets import NumSlots, VolumeLabel + +-base_command = ('tunefs.ocfs2', '-x') ++base_command = ('tunefs.ocfs2',) + + class TuneVolumeLabel(VolumeLabel): + def __init__(self, device=None):