]> sourceware.org Git - lvm2.git/commitdiff
Add exec_cmd paramater sync_needed
authorZdenek Kabelac <zkabelac@redhat.com>
Thu, 13 Jan 2011 14:51:32 +0000 (14:51 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Thu, 13 Jan 2011 14:51:32 +0000 (14:51 +0000)
As sync_local_dev_names() cannot be called within activation context,
add new parametr which allows to select if the sync call is needed
before executing new command.

WHATS_NEW
lib/activate/activate.c
lib/misc/lvm-exec.c
lib/misc/lvm-exec.h
tools/lvresize.c

index d28f9709ed100a4050c3a1e6d8da008832f989a8..b4d63142d045ab92235a38f0ae6f2f191ae5dc77 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.81 -
 ===================================
+  Extend exec_cmd params to specify, when device sync is needed.
   Replace fs_unlock by sync_local_dev_names to notify local clvmd. (2.02.80)
   Introduce sync_local_dev_names and CLVMD_CMD_SYNC_NAMES to issue fs_unlock.
   Accept fusion fio in device type filter.
index e199fbbdf7e46c8ddf844c051d1692fdd5510bc6..3670ea4a5a89b76bfa6fc0a095fad9cfcdd31de5 100644 (file)
@@ -424,7 +424,7 @@ int module_present(struct cmd_context *cmd, const char *target_name)
        argv[1] = module;
        argv[2] = NULL;
 
-       ret = exec_cmd(cmd, argv, NULL);
+       ret = exec_cmd(cmd, argv, NULL, 0);
 #endif
        return ret;
 }
index 79291259d7468ae472104bbadf0eb12d1e5e988b..775b801f6c2c09d1e09307dedaa1feb0406f4fab 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
  *
  * This file is part of LVM2.
  *
@@ -47,7 +47,8 @@ static char *_verbose_args(const char *const argv[], char *buf, size_t sz)
 /*
  * Execute and wait for external command
  */
-int exec_cmd(struct cmd_context *cmd, const char *const argv[], int *rstatus)
+int exec_cmd(struct cmd_context *cmd, const char *const argv[],
+            int *rstatus, int sync_needed)
 {
        pid_t pid;
        int status;
@@ -55,7 +56,12 @@ int exec_cmd(struct cmd_context *cmd, const char *const argv[], int *rstatus)
 
        log_verbose("Executing: %s", _verbose_args(argv, buf, sizeof(buf)));
 
-       sync_local_dev_names(cmd); /* Flush ops and reset dm cookie */
+       if (rstatus)
+               *rstatus = -1;
+
+       if (sync_needed)
+               if (!sync_local_dev_names(cmd)) /* Flush ops and reset dm cookie */
+                       return_0;
 
        if ((pid = fork()) == -1) {
                log_error("fork failed: %s", strerror(errno));
@@ -74,9 +80,6 @@ int exec_cmd(struct cmd_context *cmd, const char *const argv[], int *rstatus)
                _exit(errno);
        }
 
-       if (rstatus)
-               *rstatus = -1;
-
        /* Parent */
        if (wait4(pid, &status, 0, NULL) != pid) {
                log_error("wait4 child process %u failed: %s", pid,
index 6d984f846743f3af75f6bb0d7c816c2368214972..c91ffafe4f313dbc281ce3830f306e2e843ba748 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
- * Copyright (C) 2004-2010 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
  *
  * This file is part of LVM2.
  *
 #include "lib.h"
 
 struct cmd_context;
-int exec_cmd(struct cmd_context *cmd, const char *const argv[], int *rstatus);
+
+/**
+ * Execute command with paramaters and return status
+ *
+ * \param rstatus
+ * Returns command's exit status code.
+ *
+ * \param sync_needed
+ * Bool specifying whether local devices needs to be synchronized
+ * before executing command.
+ * Note: You cannot synchronize devices within activation context.
+ *
+ * \return
+ * 0 (success) or -1 (failure).
+ */
+int exec_cmd(struct cmd_context *cmd, const char *const argv[],
+            int *rstatus, int sync_needed);
 
 #endif
index c970f3f5381c74d8b6f693e7a52efe926dccd120..225c4465bb98879c05d17d2e1e8dc52a376192bf 100644 (file)
@@ -179,7 +179,7 @@ static int _fsadm_cmd(struct cmd_context *cmd,
 
        argv[i] = NULL;
 
-       return exec_cmd(cmd, argv, status);
+       return exec_cmd(cmd, argv, status, 1);
 }
 
 static int _lvresize_params(struct cmd_context *cmd, int argc, char **argv,
This page took 0.081435 seconds and 5 git commands to generate.