From: bmarzins@sourceware.org
To: dm-cvs@sourceware.org, dm-devel@redhat.com
Subject: multipath-tools ./multipath.conf.annotated ./m ...
Date: 14 Apr 2008 22:32:06 -0000 [thread overview]
Message-ID: <20080414223206.14781.qmail@sourceware.org> (raw)
CVSROOT: /cvs/dm
Module name: multipath-tools
Branch: RHEL4_FC5
Changes by: bmarzins@sourceware.org 2008-04-14 22:32:04
Modified files:
. : multipath.conf.annotated
multipath.conf.synthetic
kpartx : devmapper.c devmapper.h kpartx.c
libmultipath : config.c config.h devmapper.c devmapper.h
dict.c propsel.c propsel.h structs.h
multipath : main.c
Log message:
Fix for bz #251388. Added three new parameters to /etc/multipath.conf:
mode, uid, and gid. These can be used to override the default values when
multipath device nodes are created. Unfortunately, you cannot do name
resolution with static binaries, since you must load libnss dynamically, so
uid and gid must use the numerical user id and group id.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath.conf.annotated.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.16.2.4&r2=1.16.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath.conf.synthetic.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.10.2.1&r2=1.10.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/kpartx/devmapper.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.6.2.1&r2=1.6.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/kpartx/devmapper.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.3.2.1&r2=1.3.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/kpartx/kpartx.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.7.2.2&r2=1.7.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/config.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.17.2.2&r2=1.17.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/config.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.17.2.2&r2=1.17.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/devmapper.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.18.2.1&r2=1.18.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/devmapper.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.10&r2=1.10.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/dict.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.16.2.3&r2=1.16.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/propsel.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.9.2.1&r2=1.9.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/propsel.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.4.2.1&r2=1.4.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/structs.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.17.2.6&r2=1.17.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath/main.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.41.2.6&r2=1.41.2.7
--- multipath-tools/multipath.conf.annotated 2008/01/25 22:30:00 1.16.2.4
+++ multipath-tools/multipath.conf.annotated 2008/04/14 22:32:03 1.16.2.5
@@ -161,6 +161,32 @@
# # default : "/var/lib/multipath/bindings"
# bindings_file "/etc/multipath_bindings"
#
+# #
+# # name : mode
+# # scope : multipath
+# # desc : The mode to use for the multipath device nodes, in octal.
+# # values : 0000 - 0777
+# # default : determined by the process
+# mode 0644
+#
+# #
+# # name : uid
+# # scope : multipath
+# # desc : The user id to use for the multipath device nodes. You
+# # must use the numeric user id.
+# # values : <user_id_number>
+# # default : determined by the process
+# uid 0
+#
+# #
+# # name : gid
+# # scope : multipath
+# # desc : The group id to use for the multipath device nodes. You
+# # must use the numeric group id.
+# # values : <group_id_number>
+# # default : determined by the process
+# gid 0
+#
#}
#
##
@@ -256,6 +282,33 @@
# # values : queue|fail|n (>0)
# #
# no_path_retry queue
+# #
+# # name : mode
+# # scope : multipath
+# # desc : The mode to use for the multipath device node,
+# # in octal.
+# # values : 0000 - 0777
+# # default : determined by the process
+# mode 0644
+#
+# #
+# # name : uid
+# # scope : multipath
+# # desc : The user id to use for the multipath device node.
+# # You must use the numeric user id.
+# # values : <user_id_number>
+# # default : determined by the process
+# uid 0
+#
+# #
+# # name : gid
+# # scope : multipath
+# # desc : The group id to use for the multipath device node.
+# # You must use the numeric group id.
+# # values : <group_id_number>
+# # default : determined by the process
+# gid 0
+#
# }
# multipath {
# wwid 1DEC_____321816758474
--- multipath-tools/multipath.conf.synthetic 2008/01/25 22:30:00 1.10.2.1
+++ multipath-tools/multipath.conf.synthetic 2008/04/14 22:32:03 1.10.2.2
@@ -16,6 +16,9 @@
# failback immediate
# no_path_retry fail
# user_friendly_name yes
+# mode 0666
+# uid 0
+# gid 0
#}
#devnode_blacklist {
# wwid 26353900f02796769
--- multipath-tools/kpartx/devmapper.c 2006/09/19 21:06:40 1.6.2.1
+++ multipath-tools/kpartx/devmapper.c 2008/04/14 22:32:04 1.6.2.2
@@ -72,7 +72,8 @@
extern int
dm_addmap (int task, const char *name, const char *target,
- const char *params, unsigned long size, const char *uuid, int part) {
+ const char *params, unsigned long size, const char *uuid, int part,
+ mode_t mode, uid_t uid, gid_t gid) {
int r = 0;
struct dm_task *dmt;
char *prefixed_uuid = NULL;
@@ -98,6 +99,13 @@
goto freeout;
}
+ if (!dm_task_set_mode(dmt, mode))
+ goto freeout;
+ if (!dm_task_set_uid(dmt, uid))
+ goto freeout;
+ if (!dm_task_set_gid(dmt, gid))
+ goto freeout;
+
dm_task_no_open_count(dmt);
r = dm_task_run (dmt);
--- multipath-tools/kpartx/devmapper.h 2006/09/19 21:06:40 1.3.2.1
+++ multipath-tools/kpartx/devmapper.h 2008/04/14 22:32:04 1.3.2.2
@@ -1,7 +1,7 @@
int dm_prereq (char *, int, int, int);
int dm_simplecmd (int, const char *);
int dm_addmap (int, const char *, const char *, const char *, unsigned long,
- char *, int);
+ char *, int, mode_t, uid_t, gid_t);
int dm_map_present (char *);
const char * dm_mapname(int major, int minor);
dev_t dm_get_first_dep(char *devname);
--- multipath-tools/kpartx/kpartx.c 2007/10/19 21:41:56 1.7.2.2
+++ multipath-tools/kpartx/kpartx.c 2008/04/14 22:32:04 1.7.2.3
@@ -511,7 +511,9 @@
DM_DEVICE_RELOAD : DM_DEVICE_CREATE);
dm_addmap(op, partname, DM_TARGET, params,
- slices[j].size, uuid, j+1);
+ slices[j].size, uuid, j+1,
+ buf.st_mode & 0777, buf.st_uid,
+ buf.st_gid);
if (op == DM_DEVICE_RELOAD)
dm_simplecmd(DM_DEVICE_RESUME,
--- multipath-tools/libmultipath/config.c 2008/01/25 22:30:00 1.17.2.2
+++ multipath-tools/libmultipath/config.c 2008/04/14 22:32:04 1.17.2.3
@@ -407,6 +407,7 @@
conf->dev_type = DEV_NONE;
conf->rr_min_io = DEFAULT_RR_MIN_IO;
conf->max_fds = 0;
+ conf->attribute_flags = 0;
conf->bindings_file = DEFAULT_BINDINGS_FILE;
/*
--- multipath-tools/libmultipath/config.h 2008/01/25 22:30:00 1.17.2.2
+++ multipath-tools/libmultipath/config.h 2008/04/14 22:32:04 1.17.2.3
@@ -1,6 +1,8 @@
#ifndef _CONFIG_H
#define _CONFIG_H
+#include <sys/types.h>
+
#ifndef _VECTOR_H
#include "vector.h"
#endif
@@ -41,6 +43,10 @@
int rr_weight;
int no_path_retry;
int pg_timeout;
+ int attribute_flags;
+ uid_t uid;
+ gid_t gid;
+ mode_t mode;
char * wwid;
char * selector;
@@ -68,6 +74,10 @@
int user_friendly_names;
int pg_timeout;
int max_fds;
+ int attribute_flags;
+ uid_t uid;
+ gid_t gid;
+ mode_t mode;
char * dev;
char * udev_dir;
--- multipath-tools/libmultipath/devmapper.c 2007/07/31 22:19:56 1.18.2.1
+++ multipath-tools/libmultipath/devmapper.c 2008/04/14 22:32:04 1.18.2.2
@@ -111,40 +111,48 @@
}
extern int
-dm_addmap (int task, const char *name, const char *target,
- const char *params, unsigned long long size, const char *uuid) {
+dm_addmap (int task, const char *target, struct multipath *mpp, int use_wwid) {
int r = 0;
struct dm_task *dmt;
- char *prefixed_uuid = NULL;
+ char *prefixed_wwid = NULL;
if (!(dmt = dm_task_create (task)))
return 0;
- if (!dm_task_set_name (dmt, name))
+ if (!dm_task_set_name (dmt, mpp->alias))
goto addout;
- if (!dm_task_add_target (dmt, 0, size, target, params))
+ if (!dm_task_add_target (dmt, 0, mpp->size, target, mpp->params))
goto addout;
- if (uuid) {
- prefixed_uuid = MALLOC(UUID_PREFIX_LEN + strlen(uuid) + 1);
- if (!prefixed_uuid) {
+ if (use_wwid && mpp->wwid) {
+ prefixed_wwid = MALLOC(UUID_PREFIX_LEN + strlen(mpp->wwid) + 1);
+ if (!prefixed_wwid) {
condlog(0, "cannot create prefixed uuid : %s\n",
strerror(errno));
goto addout;
}
- sprintf(prefixed_uuid, UUID_PREFIX "%s", uuid);
- if (!dm_task_set_uuid(dmt, prefixed_uuid))
+ sprintf(prefixed_wwid, UUID_PREFIX "%s", mpp->wwid);
+ if (!dm_task_set_uuid(dmt, prefixed_wwid))
goto freeout;
}
+ if (mpp->attribute_flags & (1 << ATTR_MODE) &&
+ !dm_task_set_mode(dmt, mpp->mode))
+ goto freeout;
+ if (mpp->attribute_flags & (1 << ATTR_UID) &&
+ !dm_task_set_uid(dmt, mpp->uid))
+ goto freeout;
+ if (mpp->attribute_flags & (1 << ATTR_GID) &&
+ !dm_task_set_gid(dmt, mpp->gid))
+ goto freeout;
dm_task_no_open_count(dmt);
r = dm_task_run (dmt);
freeout:
- if (prefixed_uuid)
- free(prefixed_uuid);
+ if (prefixed_wwid)
+ free(prefixed_wwid);
addout:
dm_task_destroy (dmt);
--- multipath-tools/libmultipath/devmapper.h 2005/11/04 23:35:28 1.10
+++ multipath-tools/libmultipath/devmapper.h 2008/04/14 22:32:04 1.10.2.1
@@ -2,8 +2,7 @@
void dm_restore_log(void);
int dm_prereq (char *, int, int, int);
int dm_simplecmd (int, const char *);
-int dm_addmap (int, const char *, const char *, const char *,
- unsigned long long, const char *uuid);
+int dm_addmap (int, const char *, struct multipath *mpp, int use_wwid);
int dm_map_present (char *);
int dm_get_map(char *, unsigned long long *, char *);
int dm_get_status(char *, char *);
--- multipath-tools/libmultipath/dict.c 2008/01/25 22:30:00 1.16.2.3
+++ multipath-tools/libmultipath/dict.c 2008/04/14 22:32:04 1.16.2.4
@@ -4,6 +4,9 @@
* Copyright (c) 2005 Benjamin Marzinski, Redhat
* Copyright (c) 2005 Kiyoshi Ueda, NEC
*/
+#include <sys/types.h>
+#include <pwd.h>
+
#include "vector.h"
#include "hwtable.h"
#include "structs.h"
@@ -160,6 +163,79 @@
}
static int
+def_mode_handler(vector strvec)
+{
+ mode_t mode;
+ char *buff;
+
+ buff = set_value(strvec);
+ if (!buff)
+ return 1;
+
+ if (sscanf(buff, "%o", &mode) == 1 && mode <= 0777){
+ conf->attribute_flags |= (1 << ATTR_MODE);
+ conf->mode = mode;
+ }
+
+ FREE(buff);
+ return 0;
+}
+
+static int
+def_uid_handler(vector strvec)
+{
+ uid_t uid;
+ char *buff;
+ /*
+ char passwd_buf[1024];
+ struct passwd info, *found;
+ */
+
+ buff = set_value(strvec);
+ if (!buff)
+ return 1;
+ /* Can't do this for statically linked binaries, because libnss
+ must be dynamically loaded. When we can use dynamically link
+ binaries in the initramfs, we can put this back */
+ /*if (getpwnam_r(buff, &info, passwd_buf, 1024, &found) == 0 && found) {
+ conf->attribute_flags |= (1 << ATTR_UID);
+ conf->uid = info.pw_uid;
+ }
+ else */if (sscanf(buff, "%u", &uid) == 1){
+ conf->attribute_flags |= (1 << ATTR_UID);
+ conf->uid = uid;
+ }
+ FREE(buff);
+ return 0;
+}
+
+static int
+def_gid_handler(vector strvec)
+{
+ gid_t gid;
+ char *buff;
+ /*
+ char passwd_buf[1024];
+ struct passwd info, *found;
+ */
+
+ buff = set_value(strvec);
+ if (!buff)
+ return 1;
+
+ /*if (getpwnam_r(buff, &info, passwd_buf, 1024, &found) == 0 && found) {
+ conf->attribute_flags |= (1 << ATTR_GID);
+ conf->gid = info.pw_gid;
+ }
+ else */if (sscanf(buff, "%u", &gid) == 1){
+ conf->attribute_flags |= (1 << ATTR_GID);
+ conf->gid = gid;
+ }
+ FREE(buff);
+ return 0;
+}
+
+static int
def_weight_handler(vector strvec)
{
char * buff;
@@ -781,6 +857,88 @@
}
static int
+mp_mode_handler(vector strvec)
+{
+ mode_t mode;
+ struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
+ char *buff;
+
+ if (!mpe)
+ return 1;
+
+ buff = set_value(strvec);
+ if (!buff)
+ return 1;
+ if (sscanf(buff, "%o", &mode) == 1 && mode <= 0777){
+ mpe->attribute_flags |= (1 << ATTR_MODE);
+ mpe->mode = mode;
+ }
+
+ FREE(buff);
+ return 0;
+}
+
+static int
+mp_uid_handler(vector strvec)
+{
+ uid_t uid;
+ char *buff;
+ /*
+ char passwd_buf[1024];
+ struct passwd info, *found;
+ */
+ struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
+
+ if (!mpe)
+ return 1;
+
+ buff = set_value(strvec);
+ if (!buff)
+ return 1;
+
+ /*if (getpwnam_r(buff, &info, passwd_buf, 1024, &found) == 0 && found) {
+ mpe->attribute_flags |= (1 << ATTR_UID);
+ mpe->uid = info.pw_uid;
+ }
+ else */if (sscanf(buff, "%u", &uid) == 1){
+ mpe->attribute_flags |= (1 << ATTR_UID);
+ mpe->uid = uid;
+ }
+ FREE(buff);
+ return 0;
+}
+
+static int
+mp_gid_handler(vector strvec)
+{
+ gid_t gid;
+ char *buff;
+ /*
+ char passwd_buf[1024];
+ struct passwd info, *found;
+ */
+ struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
+
+ if (!mpe)
+ return 1;
+
+ buff = set_value(strvec);
+ if (!buff)
+ return 1;
+
+ /*if (getpwnam_r(buff, &info, passwd_buf, 1024, &found) == 0 && found) {
+ mpe->attribute_flags |= (1 << ATTR_GID);
+ mpe->gid = info.pw_gid;
+ }
+ else */if (sscanf(buff, "%u", &gid) == 1){
+ mpe->attribute_flags |= (1 << ATTR_GID);
+ mpe->gid = gid;
+ }
+ FREE(buff);
+ return 0;
+}
+
+static int
mp_pg_timeout_handler(vector strvec)
{
int pg_timeout;
@@ -832,6 +990,9 @@
install_keyword("pg_timeout", &default_pg_timeout_handler);
install_keyword("user_friendly_names", &names_handler);
install_keyword("bindings_file", &bindings_file_handler);
+ install_keyword("mode", &def_mode_handler);
+ install_keyword("uid", &def_uid_handler);
+ install_keyword("gid", &def_gid_handler);
/*
* deprecated synonyms
@@ -877,6 +1038,9 @@
install_keyword("rr_weight", &mp_weight_handler);
install_keyword("no_path_retry", &mp_no_path_retry_handler);
install_keyword("pg_timeout", &mp_pg_timeout_handler);
+ install_keyword("mode", &mp_mode_handler);
+ install_keyword("uid", &mp_uid_handler);
+ install_keyword("gid", &mp_gid_handler);
install_sublevel_end();
return keywords;
--- multipath-tools/libmultipath/propsel.c 2006/12/01 23:45:18 1.9.2.1
+++ multipath-tools/libmultipath/propsel.c 2008/04/14 22:32:04 1.9.2.2
@@ -173,6 +173,60 @@
}
extern int
+select_mode (struct multipath *mp)
+{
+ if (mp->mpe && (mp->mpe->attribute_flags & (1 << ATTR_MODE))) {
+ mp->attribute_flags |= (1 << ATTR_MODE);
+ mp->mode = mp->mpe->mode;
+ condlog(3, "mode = 0%o (multipath setting)", mp->mode);
+ }
+ else if (conf->attribute_flags & (1 << ATTR_MODE)) {
+ mp->attribute_flags |= (1 << ATTR_MODE);
+ mp->mode = conf->mode;
+ condlog(3, "mode = 0%o (config file default)", mp->mode);
+ }
+ else
+ mp->attribute_flags &= ~(1 << ATTR_MODE);
+ return 0;
+}
+
+extern int
+select_uid (struct multipath *mp)
+{
+ if (mp->mpe && (mp->mpe->attribute_flags & (1 << ATTR_UID))) {
+ mp->attribute_flags |= (1 << ATTR_UID);
+ mp->uid = mp->mpe->uid;
+ condlog(3, "uid = %u (multipath setting)", mp->uid);
+ }
+ else if (conf->attribute_flags & (1 << ATTR_UID)) {
+ mp->attribute_flags |= (1 << ATTR_UID);
+ mp->uid = conf->uid;
+ condlog(3, "uid = %u (config file default)", mp->uid);
+ }
+ else
+ mp->attribute_flags &= ~(1 << ATTR_UID);
+ return 0;
+}
+
+extern int
+select_gid (struct multipath *mp)
+{
+ if (mp->mpe && (mp->mpe->attribute_flags & (1 << ATTR_GID))) {
+ mp->attribute_flags |= (1 << ATTR_GID);
+ mp->gid = mp->mpe->gid;
+ condlog(3, "gid = %u (multipath setting)", mp->gid);
+ }
+ else if (conf->attribute_flags & (1 << ATTR_GID)) {
+ mp->attribute_flags |= (1 << ATTR_GID);
+ mp->gid = conf->gid;
+ condlog(3, "gid = %u (config file default)", mp->gid);
+ }
+ else
+ mp->attribute_flags &= ~(1 << ATTR_GID);
+ return 0;
+}
+
+extern int
select_features (struct multipath * mp)
{
if (mp->hwe && mp->hwe->features) {
--- multipath-tools/libmultipath/propsel.h 2006/12/01 23:45:18 1.4.2.1
+++ multipath-tools/libmultipath/propsel.h 2008/04/14 22:32:04 1.4.2.2
@@ -11,3 +11,6 @@
int select_no_path_retry(struct multipath *mp);
int select_pg_timeout(struct multipath *mp);
int select_rr_min_io(struct multipath *mp);
+int select_mode(struct multipath *mp);
+int select_uid(struct multipath *mp);
+int select_gid(struct multipath *mp);
--- multipath-tools/libmultipath/structs.h 2008/01/25 22:30:00 1.17.2.6
+++ multipath-tools/libmultipath/structs.h 2008/04/14 22:32:04 1.17.2.7
@@ -1,6 +1,8 @@
#ifndef _STRUCTS_H
#define _STRUCTS_H
+#include <sys/types.h>
+
#define WWID_SIZE 128
#define SERIAL_SIZE 64
#define NODE_NAME_SIZE 19
@@ -63,6 +65,12 @@
PGTIMEOUT_NONE
};
+enum attribute_bits {
+ ATTR_UID,
+ ATTR_GID,
+ ATTR_MODE,
+};
+
struct scsi_idlun {
int dev_id;
int host_unique_id;
@@ -133,6 +141,11 @@
int no_path_retry; /* number of retries after all paths are down */
int retry_tick; /* remaining times for retries */
int pg_timeout;
+ int attribute_flags;
+ uid_t uid;
+ gid_t gid;
+ mode_t mode;
+
unsigned long long size;
vector paths;
vector pg;
--- multipath-tools/multipath/main.c 2007/12/17 23:15:22 1.41.2.6
+++ multipath-tools/multipath/main.c 2008/04/14 22:32:04 1.41.2.7
@@ -1,7 +1,7 @@
/*
* Soft: multipath device mapper target autoconfig
*
- * Version: $Id: main.c,v 1.41.2.6 2007/12/17 23:15:22 bmarzins Exp $
+ * Version: $Id: main.c,v 1.41.2.7 2008/04/14 22:32:04 bmarzins Exp $
*
* Author: Christophe Varoqui
*
@@ -33,7 +33,6 @@
#include <vector.h>
#include <memory.h>
#include <libdevmapper.h>
-#include <devmapper.h>
#include <checkers.h>
#include <path_state.h>
#include <blacklist.h>
@@ -51,6 +50,7 @@
#include <sysfs/libsysfs.h>
#include <print.h>
#include <alias.h>
+#include <devmapper.h>
#include "main.h"
#include "pgpolicies.h"
@@ -669,8 +669,7 @@
if (dm_map_present(mpp->alias))
break;
- r = dm_addmap(DM_DEVICE_CREATE, mpp->alias, DEFAULT_TARGET,
- mpp->params, mpp->size, mpp->wwid);
+ r = dm_addmap(DM_DEVICE_CREATE, DEFAULT_TARGET, mpp, 1);
/*
* DM_DEVICE_CREATE is actually DM_DEV_CREATE plus
@@ -689,8 +688,7 @@
break;
case ACT_RELOAD:
- r = (dm_addmap(DM_DEVICE_RELOAD, mpp->alias, DEFAULT_TARGET,
- mpp->params, mpp->size, NULL) &&
+ r = (dm_addmap(DM_DEVICE_RELOAD, DEFAULT_TARGET, mpp, 0) &&
dm_simplecmd(DM_DEVICE_RESUME, mpp->alias));
break;
@@ -774,6 +772,9 @@
mpp->hwe = pp1->hwe;
strcpy(mpp->wwid, pp1->wwid);
select_alias(mpp);
+ select_mode(mpp);
+ select_uid(mpp);
+ select_gid(mpp);
pp1->mpp = mpp;
mpp->size = pp1->size;
next reply other threads:[~2008-04-14 22:32 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-14 22:32 bmarzins [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-10-10 4:15 multipath-tools ./multipath.conf.annotated ./m bmarzins
2009-01-17 0:46 bmarzins
2008-09-08 22:01 bmarzins
2008-09-04 20:09 bmarzins
2008-08-25 20:59 bmarzins
2008-04-14 22:40 bmarzins
2008-01-25 22:30 wysochanski
2008-01-15 1:34 bmarzins
2007-12-03 18:42 bmarzins
2007-10-19 21:41 bmarzins
2007-10-11 20:17 bmarzins
2007-06-19 18:12 bmarzins
2007-01-15 21:52 bmarzins
2007-01-10 20:08 bmarzins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080414223206.14781.qmail@sourceware.org \
--to=bmarzins@sourceware.org \
--cc=dm-cvs@sourceware.org \
--cc=dm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.