From: bmarzins@sourceware.org
To: dm-cvs@sourceware.org, dm-devel@redhat.com
Subject: multipath-tools kpartx/Makefile libmultipath/d ...
Date: 12 Oct 2006 16:16:11 -0000 [thread overview]
Message-ID: <20061012161611.30781.qmail@sourceware.org> (raw)
CVSROOT: /cvs/dm
Module name: multipath-tools
Changes by: bmarzins@sourceware.org 2006-10-12 16:16:10
Modified files:
kpartx : Makefile
libmultipath : discovery.c discovery.h hwtable.c
multipath : Makefile
multipathd : main.c
Added files:
multipath : mpath_faker.c
Log message:
This makes multipath and gnbd work together.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/kpartx/Makefile.diff?cvsroot=dm&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/discovery.c.diff?cvsroot=dm&r1=1.31&r2=1.32
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/discovery.h.diff?cvsroot=dm&r1=1.13&r2=1.14
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/hwtable.c.diff?cvsroot=dm&r1=1.19&r2=1.20
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath/mpath_faker.c.diff?cvsroot=dm&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath/Makefile.diff?cvsroot=dm&r1=1.15&r2=1.16
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipathd/main.c.diff?cvsroot=dm&r1=1.68&r2=1.69
--- multipath-tools/kpartx/Makefile 2006/06/06 20:38:51 1.7
+++ multipath-tools/kpartx/Makefile 2006/10/12 16:16:09 1.8
@@ -46,4 +46,4 @@
rm -f $(DESTDIR)$(mandir)/$(EXEC).8
clean:
- rm -f core *.o $(EXEC) *.gz
+ rm -f core *.o $(EXEC) $(EXEC).static *.gz
--- multipath-tools/libmultipath/discovery.c 2006/10/06 18:35:13 1.31
+++ multipath-tools/libmultipath/discovery.c 2006/10/12 16:16:09 1.32
@@ -52,6 +52,49 @@
return NULL;
}
+/*
+ * This is used to make sure that zero size gnbd devices don't get added.
+ * returns
+ * 1: ok
+ * 0: not ok
+ * -1: error
+ */
+int device_ok_to_add(char *devname)
+{
+ char path[FILE_NAME_SIZE];
+ unsigned int val;
+ struct sysfs_attribute *sysattr;
+
+ if (sscanf(devname, "gnbd%u", &val) != 1)
+ return 1;
+ if (safe_sprintf(path, "%s/class/gnbd/%s/sectors", sysfs_path,
+ devname)) {
+ condlog(0, "path too small for %s sectors", devname);
+ return -1;
+ }
+ if ((sysattr = sysfs_open_attribute(path)) == NULL) {
+ condlog(0, "cannot open sysfs attribute %s : %s",
+ path, strerror(errno));
+ return -1;
+ }
+ if (sysfs_read_attribute(sysattr) < 0) {
+ condlog(0, "cannnot read %s : %s", path,
+ strerror(errno));
+ sysfs_close_attribute(sysattr);
+ return -1;
+ }
+ if (sscanf(sysattr->value, "%u\n", &val) != 1) {
+ condlog(0, "invalid gnbd value for %s : %s", path,
+ sysattr->value);
+ sysfs_close_attribute(sysattr);
+ return -1;
+ }
+ sysfs_close_attribute(sysattr);
+ if (!val)
+ return 0;
+ return 1;
+}
+
static int
path_discover (vector pathvec, struct config * conf, char * devname, int flag)
{
@@ -72,33 +115,13 @@
if (!filepresent(path)){
unsigned int val;
- struct sysfs_attribute *sysattr;
+ int ret;
if (sscanf(devname, "gnbd%u", &val) != 1)
- return 0;
- if (safe_sprintf(path, "%s/class/gnbd/%s/sectors", sysfs_path,
- devname)) {
- condlog(0, "path too small for %s sectors", devname);
- return 1;
- }
- if ((sysattr = sysfs_open_attribute(path)) == NULL) {
- condlog(0, "cannot open sysfs attribute %s : %s",
- path, strerror(errno));
- return 1;
- }
- if (sysfs_read_attribute(sysattr) < 0) {
- condlog(0, "cannnot read %s : %s", path,
- strerror(errno));
- sysfs_close_attribute(sysattr);
return 1;
- }
- if (sscanf(sysattr->value, "%u\n", &val) != 1) {
- condlog(0, "invalid gnbd value for %s : %s", path,
- sysattr->value);
- sysfs_close_attribute(sysattr);
+ ret = device_ok_to_add(devname);
+ if (ret == -1)
return 1;
- }
- sysfs_close_attribute(sysattr);
- if (!val)
+ if (ret == 0)
return 0;
}
@@ -403,6 +426,7 @@
if (sscanf(pp->dev, "gnbd%u", &unused) == 1){
strcpy(pp->vendor_id, "GNBD");
strcpy(pp->product_id, "GNBD");
+ pp->hwe = find_hwe(conf->hwtable, pp->vendor_id, pp->product_id);
return 0;
}
/*
--- multipath-tools/libmultipath/discovery.h 2006/07/13 19:49:23 1.13
+++ multipath-tools/libmultipath/discovery.h 2006/10/12 16:16:09 1.14
@@ -24,6 +24,7 @@
#define SCSI_COMMAND_TERMINATED 0x22
#define SG_ERR_DRIVER_SENSE 0x08
+int device_ok_to_add(char *devname);
int sysfs_get_vendor (char * sysfs_path, char * dev, char * buff, int len);
int sysfs_get_model (char * sysfs_path, char * dev, char * buff, int len);
int sysfs_get_rev (char * sysfs_path, char * dev, char * buff, int len);
--- multipath-tools/libmultipath/hwtable.c 2006/09/15 18:08:03 1.19
+++ multipath-tools/libmultipath/hwtable.c 2006/10/12 16:16:09 1.20
@@ -519,7 +519,7 @@
{
.vendor = "GNBD",
.product = "GNBD",
- .getuid = "/sbin/gnbd_import -U /block/%n",
+ .getuid = "/sbin/gnbd_import -q -U /block/%n",
.getprio = NULL,
.features = DEFAULT_FEATURES,
.hwhandler = DEFAULT_HWHANDLER,
diff -u -r1.7 -r1.8
--- multipath-tools/multipath/Makefile 2006/10/06 16:38:01 1.15
+++ multipath-tools/multipath/Makefile 2006/10/12 16:16:09 1.16
@@ -22,6 +22,7 @@
glibc: clean $(OBJS)
$(CC) $(OBJS) -o $(EXEC) $(LDFLAGS)
$(CC) $(OBJS) -o $(EXEC).static -static $(LDFLAGS) -lselinux -lsepol
+ $(CC) mpath_faker.c -o mpath_ctl $(CFLAGS) -static
klibc: $(OBJS)
$(CC) -static -o $(EXEC) $(CRT0) $(OBJS) $(KLIBC) $(LIBGCC)
@@ -35,7 +36,7 @@
install:
install -d $(DESTDIR)$(bindir)
- install -m 755 $(EXEC) $(EXEC).static mpath_get_name kpartx_get_name $(DESTDIR)$(bindir)/
+ install -m 755 $(EXEC) $(EXEC).static mpath_ctl mpath_wait $(DESTDIR)$(bindir)/
install -d $(DESTDIR)/etc/udev/rules.d
install -m 644 multipath.rules $(DESTDIR)/etc/udev/rules.d/40-multipath.rules
install -d $(DESTDIR)$(mandir)
@@ -49,8 +50,9 @@
rm $(DESTDIR)$(bindir)/$(EXEC)
rm $(DESTDIR)$(bindir)/$(EXEC).static
rm $(DESTDIR)$(bindir)/mpath_wait
+ rm $(DESTDIR)$(bindir)/mpath_ctl
rm $(DESTDIR)$(mandir)/$(EXEC).8
clean:
$(MAKE) -C $(multipathdir) clean
- rm -f core *.o $(EXEC) $(EXEC).static *.gz
+ rm -f core *.o $(EXEC) $(EXEC).static mpath_ctl *.gz
--- multipath-tools/multipathd/main.c 2006/08/02 21:37:23 1.68
+++ multipath-tools/multipathd/main.c 2006/10/12 16:16:09 1.69
@@ -348,6 +348,14 @@
struct multipath * mpp;
struct path * pp;
char empty_buff[WWID_SIZE] = {0};
+ int ret;
+
+ ret = device_ok_to_add(devname);
+ if (ret < 0)
+ return 1;
+ if (ret == 0)
+ /* Is 2 the best return code? */
+ return 2;
pp = find_path_by_dev(vecs->pathvec, devname);
@@ -1016,6 +1024,18 @@
return NULL;
}
+static void
+orphan_unused_paths (struct vectors *vecs)
+{
+ int i;
+ struct path *pp;
+
+ vector_foreach_slot(vecs->pathvec, pp, i) {
+ if (pp->mpp == NULL)
+ orphan_path(pp);
+ }
+}
+
int
configure (struct vectors * vecs, int start_waiters)
{
@@ -1082,6 +1102,7 @@
vector_free(vecs->mpvec);
vecs->mpvec = mpvec;
+ orphan_unused_paths(vecs);
/*
* start dm event waiter threads for these new maps
*/
reply other threads:[~2006-10-12 16:16 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20061012161611.30781.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.