[nfs-utils/rawhide/user/steved/pnfs-rawhide] Updated to latest upstream release: pnfs-nfs-utils-1-2-4-rc5

Steve Dickson steved at fedoraproject.org
Fri Jan 28 20:01:32 UTC 2011


commit 960fa605634235937395f5c0aa767e8248443797
Author: Steve Dickson <steved at redhat.com>
Date:   Fri Jan 28 15:00:41 2011 -0500

    Updated to latest upstream release: pnfs-nfs-utils-1-2-4-rc5
    
    Signed-off-by: Steve Dickson <steved at redhat.com>

 nfs-utils.spec                                     |    7 +-
 ...2-4-rc1.patch => pnfs-nfs-utils-1-2-4-rc5.patch |  636 +++++++++++---------
 2 files changed, 347 insertions(+), 296 deletions(-)
---
diff --git a/nfs-utils.spec b/nfs-utils.spec
index d44ff79..134322e 100644
--- a/nfs-utils.spec
+++ b/nfs-utils.spec
@@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser
 Name: nfs-utils
 URL: http://sourceforge.net/projects/nfs
 Version: 1.2.3
-Release: 8%{?dist}
+Release: 8.pnfs%{?dist}
 Epoch: 1
 
 # group all 32bit related archs
@@ -26,7 +26,7 @@ Patch101: nfs-utils-1.2.2-statdpath.patch
 Patch102: nfs-utils-1.2.1-exp-subtree-warn-off.patch
 Patch103: nfs-utils-1.2.3-sm-notify-res_init.patch
 
-Patch200: pnfs-utils-1-2-4-rc1.patch
+Patch200: pnfs-nfs-utils-1-2-4-rc5.patch
 Patch201: nfs-utils-1.2.3-blkmapd-init.patch
 
 Group: System Environment/Daemons
@@ -276,6 +276,9 @@ fi
 %config(noreplace) /etc/modprobe.d/nfsv41.conf
 
 %changelog
+* Fri Jan 28 2011 Steve Dickson <steved at redhat.com> 1.2.3-8.pnfs
+- Updated to latest upstream release: pnfs-nfs-utils-1-2-4-rc5
+
 * Wed Jan 26 2011 Steve Dickson <steved at redhat.com> 1.2.3-8
 - Fixed segfault in rpc.mountd (bz 669065)
 
diff --git a/pnfs-utils-1-2-4-rc1.patch b/pnfs-nfs-utils-1-2-4-rc5.patch
similarity index 92%
rename from pnfs-utils-1-2-4-rc1.patch
rename to pnfs-nfs-utils-1-2-4-rc5.patch
index 2349e45..2b79901 100644
--- a/pnfs-utils-1-2-4-rc1.patch
+++ b/pnfs-nfs-utils-1-2-4-rc5.patch
@@ -1,6 +1,6 @@
 diff -up nfs-utils-1.2.3/configure.ac.orig nfs-utils-1.2.3/configure.ac
---- nfs-utils-1.2.3/configure.ac.orig	2010-11-09 11:45:19.849588000 -0500
-+++ nfs-utils-1.2.3/configure.ac	2010-11-09 11:45:37.237104000 -0500
+--- nfs-utils-1.2.3/configure.ac.orig	2011-01-28 14:52:39.593133634 -0500
++++ nfs-utils-1.2.3/configure.ac	2011-01-28 14:54:34.569096121 -0500
 @@ -72,11 +72,15 @@ AC_ARG_ENABLE(nfsv4,
  	enable_nfsv4=yes)
  	if test "$enable_nfsv4" = yes; then
@@ -17,7 +17,7 @@ diff -up nfs-utils-1.2.3/configure.ac.orig nfs-utils-1.2.3/configure.ac
  	AC_SUBST(IDMAPD)
  	AC_SUBST(enable_nfsv4)
  	AM_CONDITIONAL(CONFIG_NFSV4, [test "$enable_nfsv4" = "yes"])
-@@ -439,9 +443,11 @@ AC_CONFIG_FILES([
+@@ -445,9 +449,11 @@ AC_CONFIG_FILES([
  	tools/mountstats/Makefile
  	tools/nfs-iostat/Makefile
  	utils/Makefile
@@ -29,9 +29,28 @@ diff -up nfs-utils-1.2.3/configure.ac.orig nfs-utils-1.2.3/configure.ac
  	utils/mount/Makefile
  	utils/mountd/Makefile
  	utils/nfsd/Makefile
+diff -up nfs-utils-1.2.3/.gitignore.orig nfs-utils-1.2.3/.gitignore
+--- nfs-utils-1.2.3/.gitignore.orig	2011-01-28 14:52:39.558134862 -0500
++++ nfs-utils-1.2.3/.gitignore	2011-01-28 14:54:34.569096121 -0500
+@@ -36,6 +36,7 @@ support/include/stamp-h1
+ lib*.a
+ tools/rpcgen/rpcgen
+ tools/rpcdebug/rpcdebug
++utils/blkmapd/blkmapd
+ utils/exportfs/exportfs
+ utils/idmapd/idmapd
+ utils/lockd/lockd
+@@ -48,6 +49,7 @@ utils/rquotad/rquotad
+ utils/rquotad/rquota.h
+ utils/rquotad/rquota_xdr.c
+ utils/showmount/showmount
++utils/spnfsd/spnfsd
+ utils/statd/statd
+ tools/locktest/testlk
+ tools/getiversion/getiversion
 diff -up nfs-utils-1.2.3/support/include/nfslib.h.orig nfs-utils-1.2.3/support/include/nfslib.h
---- nfs-utils-1.2.3/support/include/nfslib.h.orig	2010-11-09 11:45:19.728584000 -0500
-+++ nfs-utils-1.2.3/support/include/nfslib.h	2010-11-09 11:45:37.247102000 -0500
+--- nfs-utils-1.2.3/support/include/nfslib.h.orig	2011-01-28 14:52:39.561134758 -0500
++++ nfs-utils-1.2.3/support/include/nfslib.h	2011-01-28 14:54:34.570096119 -0500
 @@ -89,6 +89,7 @@ struct exportent {
  	char *          e_fslocdata;
  	char *		e_uuid;
@@ -42,7 +61,7 @@ diff -up nfs-utils-1.2.3/support/include/nfslib.h.orig nfs-utils-1.2.3/support/i
  struct rmtabent {
 diff -up nfs-utils-1.2.3/support/include/nfs/nfs.h.orig nfs-utils-1.2.3/support/include/nfs/nfs.h
 --- nfs-utils-1.2.3/support/include/nfs/nfs.h.orig	2010-09-28 08:24:16.000000000 -0400
-+++ nfs-utils-1.2.3/support/include/nfs/nfs.h	2010-11-09 11:45:37.242105000 -0500
++++ nfs-utils-1.2.3/support/include/nfs/nfs.h	2011-01-28 14:54:34.570096119 -0500
 @@ -47,6 +47,7 @@ struct nfs_fh_old {
  #define NFSCTL_GETFH		6	/* get an fh (used by mountd) */
  #define NFSCTL_GETFD		7	/* get an fh by path (used by mountd) */
@@ -80,8 +99,8 @@ diff -up nfs-utils-1.2.3/support/include/nfs/nfs.h.orig nfs-utils-1.2.3/support/
  };
  
 diff -up nfs-utils-1.2.3/support/nfs/exports.c.orig nfs-utils-1.2.3/support/nfs/exports.c
---- nfs-utils-1.2.3/support/nfs/exports.c.orig	2010-11-09 11:45:19.864588000 -0500
-+++ nfs-utils-1.2.3/support/nfs/exports.c	2010-11-09 11:45:37.253103000 -0500
+--- nfs-utils-1.2.3/support/nfs/exports.c.orig	2011-01-28 14:52:39.596133529 -0500
++++ nfs-utils-1.2.3/support/nfs/exports.c	2011-01-28 14:54:34.571096115 -0500
 @@ -107,6 +107,7 @@ static void init_exportent (struct expor
  	ee->e_nsquids = 0;
  	ee->e_nsqgids = 0;
@@ -111,9 +130,9 @@ diff -up nfs-utils-1.2.3/support/nfs/exports.c.orig nfs-utils-1.2.3/support/nfs/
  			char *oe;
  			ep->e_anonuid = strtol(opt+8, &oe, 10);
 diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig nfs-utils-1.2.3/utils/blkmapd/device-discovery.c
---- nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig	2010-11-09 11:45:37.266108000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/device-discovery.c	2010-11-09 11:45:37.268108000 -0500
-@@ -0,0 +1,476 @@
+--- nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig	2011-01-28 14:54:34.573096101 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/device-discovery.c	2011-01-28 14:54:34.573096101 -0500
+@@ -0,0 +1,473 @@
 +/*
 + * device-discovery.c: main function, discovering device and processing
 + * pipe request from kernel.
@@ -155,12 +174,14 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig nfs-utils-1.2.3/u
 +#include <stdlib.h>
 +#include <stdio.h>
 +#include <string.h>
++#include <syslog.h>
 +#include <dirent.h>
 +#include <ctype.h>
 +#include <fcntl.h>
 +#include <unistd.h>
 +#include <libgen.h>
 +#include <errno.h>
++#include <libdevmapper.h>
 +
 +#include "device-discovery.h"
 +
@@ -269,10 +290,13 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig nfs-utils-1.2.3/u
 +
 +	dev = sb.st_rdev;
 +	serial = bldev_read_serial(fd, filepath);
-+	ap_state = bldev_read_ap_state(fd);
++	if (dm_is_dm_major(major(dev)))
++		ap_state = BL_PATH_STATE_PSEUDO;
++	else
++		ap_state = bldev_read_ap_state(fd);
 +	close(fd);
 +
-+	if (ap_state == BL_PATH_STATE_PASSIVE)
++	if (ap_state != BL_PATH_STATE_ACTIVE)
 +		return;
 +
 +	for (disk = visible_disk_list; disk != NULL; disk = disk->next) {
@@ -289,15 +313,6 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig nfs-utils-1.2.3/u
 +	if (disk && diskpath)
 +		return;
 +
-+	BL_LOG_INFO("%s: %s\n", __func__, filepath);
-+
-+	/*
-+	 * Not sure how to identify a pseudo device created by
-+	 * device-mapper, so leave /dev/mapper for now.
-+	 */
-+	if (strncmp(filepath, "/dev/mapper", 11) == 0)
-+		ap_state = BL_PATH_STATE_PSEUDO;
-+
 +	/* add path */
 +	path = malloc(sizeof(struct bl_disk_path));
 +	if (!path) {
@@ -423,6 +438,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig nfs-utils-1.2.3/u
 +	}
 +
 +	head->status = BL_DEVICE_REQUEST_PROC;
++
 +	switch (head->type) {
 +	case BL_DEVICE_MOUNT:
 +		/*
@@ -591,9 +607,9 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.c.orig nfs-utils-1.2.3/u
 +	exit(ret);
 +}
 diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig nfs-utils-1.2.3/utils/blkmapd/device-discovery.h
---- nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig	2010-11-09 11:45:37.271104000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/device-discovery.h	2010-11-09 11:45:37.272112000 -0500
-@@ -0,0 +1,161 @@
+--- nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig	2011-01-28 14:54:34.574096091 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/device-discovery.h	2011-01-28 14:54:34.574096091 -0500
+@@ -0,0 +1,160 @@
 +/*
 + * bl-device-discovery.h
 + *
@@ -624,11 +640,10 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig nfs-utils-1.2.3/u
 +#define BL_DEVICE_DISCOVERY_H
 +
 +#include <stdint.h>
-+#include <syslog.h>
 +
 +enum blk_vol_type {
 +	BLOCK_VOLUME_SIMPLE = 0,	/* maps to a single LU */
-+	BLOCK_VOLUME_SLICE = 1,	/* slice of another volume */
++	BLOCK_VOLUME_SLICE = 1,		/* slice of another volume */
 +	BLOCK_VOLUME_CONCAT = 2,	/* concatenation of multiple volumes */
 +	BLOCK_VOLUME_STRIPE = 3,	/* striped across multiple volumes */
 +	BLOCK_VOLUME_PSEUDO = 4,
@@ -641,15 +656,15 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig nfs-utils-1.2.3/u
 +	struct bl_volume **bv_vols;
 +	int bv_vol_n;
 +	union {
-+		dev_t bv_dev;	/* for BLOCK_VOLUME_SIMPLE(PSEUDO) */
++		dev_t bv_dev;		/* for BLOCK_VOLUME_SIMPLE(PSEUDO) */
 +		off_t bv_stripe_unit;	/* for BLOCK_VOLUME_STRIPE(CONCAT) */
 +		off_t bv_offset;	/* for BLOCK_VOLUME_SLICE */
 +	} param;
 +};
 +
 +struct bl_sig_comp {
-+	int64_t bs_offset;	/* In bytes */
-+	uint32_t bs_length;	/* In bytes */
++	int64_t bs_offset;		/* In bytes */
++	uint32_t bs_length;		/* In bytes */
 +	char *bs_string;
 +};
 +
@@ -686,7 +701,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig nfs-utils-1.2.3/u
 +	struct bl_disk *next;
 +	struct bl_serial *serial;
 +	dev_t dev;
-+	off_t size;
++	off_t size;			/* in 512-byte sectors */
 +	struct bl_disk_path *valid_path;
 +	struct bl_disk_path *paths;
 +};
@@ -703,7 +718,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig nfs-utils-1.2.3/u
 +	uint32_t msgid;
 +	uint8_t type;
 +	uint8_t flags;
-+	uint16_t totallen;	/* length of entire message, including hdr */
++	uint16_t totallen;		/* length of message including hdr */
 +	uint32_t status;
 +};
 +
@@ -756,9 +771,9 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-discovery.h.orig nfs-utils-1.2.3/u
 +#define BL_LOG_DEBUG(fmt...)		syslog(LOG_DEBUG, fmt)
 +#endif
 diff -up nfs-utils-1.2.3/utils/blkmapd/device-inq.c.orig nfs-utils-1.2.3/utils/blkmapd/device-inq.c
---- nfs-utils-1.2.3/utils/blkmapd/device-inq.c.orig	2010-11-09 11:45:37.275107000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/device-inq.c	2010-11-09 11:45:37.277103000 -0500
-@@ -0,0 +1,232 @@
+--- nfs-utils-1.2.3/utils/blkmapd/device-inq.c.orig	2011-01-28 14:54:34.574096091 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/device-inq.c	2011-01-28 14:54:34.574096091 -0500
+@@ -0,0 +1,233 @@
 +/*
 + * device-inq.c: inquire SCSI device information.
 + *
@@ -800,11 +815,12 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-inq.c.orig nfs-utils-1.2.3/utils/b
 +
 +#include <stdlib.h>
 +#include <stdio.h>
++#include <unistd.h>
 +#include <string.h>
++#include <syslog.h>
 +#include <dirent.h>
 +#include <ctype.h>
 +#include <fcntl.h>
-+#include <unistd.h>
 +#include <libgen.h>
 +#include <errno.h>
 +
@@ -935,10 +951,10 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-inq.c.orig nfs-utils-1.2.3/utils/b
 +struct bl_serial *bldev_read_serial(int fd, const char *filename)
 +{
 +	struct bl_serial *serial_out = NULL;
-+	int status = 0, pos, len;
++	int status = 0;
 +	char *buffer;
 +	struct bl_dev_id *dev_root, *dev_id;
-+	unsigned int current_id = 0;
++	unsigned int pos, len, current_id = 0;
 +
 +	status = bldev_inquire_pages(fd, 0x83, &buffer);
 +	if (status)
@@ -992,9 +1008,9 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-inq.c.orig nfs-utils-1.2.3/utils/b
 +	return serial_out;
 +}
 diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/utils/blkmapd/device-process.c
---- nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig	2010-11-09 11:45:37.280103000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/device-process.c	2010-11-09 11:45:37.281109000 -0500
-@@ -0,0 +1,386 @@
+--- nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig	2011-01-28 14:54:34.575096081 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/device-process.c	2011-01-28 14:54:34.575096081 -0500
+@@ -0,0 +1,410 @@
 +/*
 + * device-process.c: detailed processing of device information sent
 + * from kernel.
@@ -1030,33 +1046,58 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 + */
 +
-+#include <libdevmapper.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/user.h>
++#include <arpa/inet.h>
++#include <linux/kdev_t.h>
++
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <string.h>
 +#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/user.h>
++#include <syslog.h>
 +#include <fcntl.h>
 +#include <errno.h>
-+#include <arpa/inet.h>
-+#include <linux/kdev_t.h>
++
 +#include "device-discovery.h"
 +
++static char *pretty_sig(char *sig, uint32_t siglen)
++{
++	static char rs[100];
++	uint64_t sigval;
++	unsigned int i;
++
++	if (siglen <= sizeof(sigval)) {
++		sigval = 0;
++		for (i = 0; i < siglen; i++)
++			sigval |= ((unsigned char *)sig)[i] << (i * 8);
++		sprintf(rs, "0x%0llx", (unsigned long long) sigval);
++	} else {
++		if (siglen > sizeof rs - 4) {
++			siglen = sizeof rs - 4;
++			sprintf(&rs[siglen], "...");
++		} else
++			rs[siglen] = '\0';
++		memcpy(rs, sig, siglen);
++	}
++	return rs;
++}
++
 +uint32_t *blk_overflow(uint32_t * p, uint32_t * end, size_t nbytes)
 +{
 +	uint32_t *q = p + ((nbytes + 3) >> 2);
++
 +	if (q > end || q < p)
 +		return NULL;
 +	return p;
 +}
 +
-+static int decode_blk_signature(uint32_t **pp, uint32_t *end,
++static int decode_blk_signature(uint32_t **pp, uint32_t * end,
 +				struct bl_sig *sig)
 +{
-+	int i, tmp;
-+	uint32_t *p = *pp;
++	int i;
++	uint32_t siglen, *p = *pp;
 +
 +	BLK_READBUF(p, end, 4);
 +	READ32(sig->si_num_comps);
@@ -1070,19 +1111,21 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +		goto out_err;
 +	}
 +	for (i = 0; i < sig->si_num_comps; i++) {
++		struct bl_sig_comp *comp = &sig->si_comps[i];
++
 +		BLK_READBUF(p, end, 12);
-+		READ64(sig->si_comps[i].bs_offset);
-+		READ32(tmp);
-+		sig->si_comps[i].bs_length = tmp;
-+		BLK_READBUF(p, end, tmp);
++		READ64(comp->bs_offset);
++		READ32(siglen);
++		comp->bs_length = siglen;
++		BLK_READBUF(p, end, siglen);
 +		/* Note we rely here on fact that sig is used immediately
 +		 * for mapping, then thrown away.
 +		 */
-+		sig->si_comps[i].bs_string = (char *)p;
++		comp->bs_string = (char *)p;
 +		BL_LOG_INFO("%s: si_comps[%d]: bs_length %d, bs_string %s\n",
-+			   __func__, i, sig->si_comps[i].bs_length,
-+			   sig->si_comps[i].bs_string);
-+		p += ((tmp + 3) >> 2);
++			    __func__, i, siglen,
++			    pretty_sig(comp->bs_string, siglen));
++		p += ((siglen + 3) >> 2);
 +	}
 +	*pp = p;
 +	return 0;
@@ -1090,50 +1133,46 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +	return -EIO;
 +}
 +
-+/* Read signature from device
-+ * return 0: read successfully
-+ * return -1: error
++/*
++ * Read signature from device and compare to sig_comp
++ * return: 0=match, 1=no match, -1=error
 + */
-+int
-+read_cmp_blk_sig(const char *dev_name, struct bl_sig_comp *comp,
-+		 int64_t bs_offset)
++static int
++read_cmp_blk_sig(struct bl_disk *disk, int fd, struct bl_sig_comp *comp)
 +{
-+	int fd, ret = -1;
++	const char *dev_name = disk->valid_path->full_path;
++	int ret = -1;
++	ssize_t siglen = comp->bs_length;
++	int64_t bs_offset = comp->bs_offset;
 +	char *sig = NULL;
 +
-+	fd = open(dev_name, O_RDONLY | O_LARGEFILE);
-+	if (fd < 0) {
-+		BL_LOG_ERR("%s could not be opened for read\n", dev_name);
-+		goto error;
-+	}
-+
-+	sig = (char *)malloc(comp->bs_length);
++	sig = (char *)malloc(siglen);
 +	if (!sig) {
 +		BL_LOG_ERR("%s: Out of memory\n", __func__);
-+		goto error;
++		goto out;
 +	}
 +
++	if (bs_offset < 0)
++		bs_offset += (((int64_t) disk->size) << 9);
 +	if (lseek64(fd, bs_offset, SEEK_SET) == -1) {
 +		BL_LOG_ERR("File %s lseek error\n", dev_name);
-+		goto error;
++		goto out;
 +	}
 +
-+	if (read(fd, sig, comp->bs_length) != comp->bs_length) {
++	if (read(fd, sig, siglen) != siglen) {
 +		BL_LOG_ERR("File %s read error\n", dev_name);
-+		goto error;
++		goto out;
 +	}
 +
-+	BL_LOG_INFO
-+	    ("%s: %s sig: %s, bs_string: %s, bs_length: %d, bs_offset: %lld\n",
-+	     __func__, dev_name, sig, comp->bs_string, comp->bs_length,
-+	     (long long)bs_offset);
-+	ret = memcmp(sig, comp->bs_string, comp->bs_length);
++	ret = memcmp(sig, comp->bs_string, siglen);
++	if (!ret)
++		BL_LOG_INFO("%s: %s sig %s at %lld\n", __func__, dev_name,
++			    pretty_sig(sig, siglen),
++			    (long long)comp->bs_offset);
 +
-+ error:
++ out:
 +	if (sig)
 +		free(sig);
-+	if (fd >= 0)
-+		close(fd);
 +	return ret;
 +}
 +
@@ -1143,23 +1182,28 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 + */
 +static int verify_sig(struct bl_disk *disk, struct bl_sig *sig)
 +{
-+	struct bl_sig_comp *comp;
-+	int i, ret;
-+	int64_t bs_offset;
++	const char *dev_name = disk->valid_path->full_path;
++	int fd, i, rv;
++
++	fd = open(dev_name, O_RDONLY | O_LARGEFILE);
++	if (fd < 0) {
++		BL_LOG_ERR("%s: %s could not be opened for read\n", __func__,
++			   dev_name);
++		return 0;
++	}
++
++	rv = 1;
 +
 +	for (i = 0; i < sig->si_num_comps; i++) {
-+		comp = &sig->si_comps[i];
-+		bs_offset = comp->bs_offset;
-+		if (bs_offset < 0)
-+			bs_offset += (((int64_t) disk->size) << 9);
-+		BL_LOG_INFO("%s: bs_offset: %lld\n",
-+			   __func__, (long long) bs_offset);
-+		ret = read_cmp_blk_sig(disk->valid_path->full_path,
-+				       comp, bs_offset);
-+		if (ret)
-+			return 0;
++		if (read_cmp_blk_sig(disk, fd, &sig->si_comps[i])) {
++			rv = 0;
++			break;
++		}
 +	}
-+	return 1;
++
++	if (fd >= 0)
++		close(fd);
++	return rv;
 +}
 +
 +/*
@@ -1172,18 +1216,11 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +static int map_sig_to_device(struct bl_sig *sig, struct bl_volume *vol)
 +{
 +	int mapped = 0;
-+	struct bl_disk *disk = visible_disk_list;
++	struct bl_disk *disk;
 +	char *filepath = 0;
-+	struct bl_disk *lolDisk = disk;
-+
-+	while (lolDisk) {
-+		BL_LOG_INFO("%s: visible_disk_list: %s\n", __func__,
-+			   lolDisk->valid_path->full_path);
-+		lolDisk = lolDisk->next;
-+	}
 +
 +	/* scan disk list to find out match device */
-+	while (disk) {
++	for (disk = visible_disk_list; disk; disk = disk->next) {
 +		/* FIXME: should we use better algorithm for disk scan? */
 +		mapped = verify_sig(disk, sig);
 +		if (mapped) {
@@ -1192,7 +1229,6 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +			vol->bv_size = disk->size;
 +			break;
 +		}
-+		disk = disk->next;
 +	}
 +	return mapped;
 +}
@@ -1207,6 +1243,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +	int i, index;
 +	uint32_t *p = *pp;
 +	struct bl_volume **array = vols[working].bv_vols;
++
 +	for (i = 0; i < vols[working].bv_vol_n; i++) {
 +		BLK_READBUF(p, end, 4);
 +		READ32(index);
@@ -1227,23 +1264,25 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +{
 +	int i;
 +	uint64_t sum = 0;
++
 +	for (i = 0; i < vol->bv_vol_n; i++)
 +		sum += vol->bv_vols[i]->bv_size;
 +	return sum;
 +}
 +
-+static int decode_blk_volume(uint32_t **pp, uint32_t *end,
-+			     struct bl_volume *vols, int i, int *array_cnt)
++static int
++decode_blk_volume(uint32_t **pp, uint32_t *end, struct bl_volume *vols, int voln,
++		  int *array_cnt)
 +{
 +	int status = 0, j;
 +	struct bl_sig sig;
 +	uint32_t *p = *pp;
-+	struct bl_volume *vol = &vols[i];
-+	uint64_t tmp, tmp_size;
-+	div_t d;
++	struct bl_volume *vol = &vols[voln];
++	uint64_t tmp;
 +
 +	BLK_READBUF(p, end, 4);
 +	READ32(vol->bv_type);
++
 +	switch (vol->bv_type) {
 +	case BLOCK_VOLUME_SIMPLE:
 +		*array_cnt = 0;
@@ -1255,6 +1294,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +			BL_LOG_ERR("Could not find disk for device\n");
 +			return -ENXIO;
 +		}
++		BL_LOG_INFO("%s: simple %d\n", __func__, voln);
 +		status = 0;
 +		break;
 +	case BLOCK_VOLUME_SLICE:
@@ -1262,22 +1302,25 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +		READ_SECTOR(vol->param.bv_offset);
 +		READ_SECTOR(vol->bv_size);
 +		*array_cnt = vol->bv_vol_n = 1;
-+		status = set_vol_array(&p, end, vols, i);
++		BL_LOG_INFO("%s: slice %d\n", __func__, voln);
++		status = set_vol_array(&p, end, vols, voln);
 +		break;
 +	case BLOCK_VOLUME_STRIPE:
 +		BLK_READBUF(p, end, 8);
 +		READ_SECTOR(vol->param.bv_stripe_unit);
 +		off_t chunksize = vol->param.bv_stripe_unit;
-+		if ((chunksize == 0) ||
-+		    ((chunksize & (chunksize - 1)) != 0) ||
-+		    (chunksize < (PAGE_SIZE >> 9)))
++		/* Check limitations imposed by device-mapper */
++		if ((chunksize & (chunksize - 1)) != 0
++		    || chunksize < (off_t) (PAGE_SIZE >> 9))
 +			return -EIO;
 +		BLK_READBUF(p, end, 4);
 +		READ32(vol->bv_vol_n);
 +		if (!vol->bv_vol_n)
 +			return -EIO;
 +		*array_cnt = vol->bv_vol_n;
-+		status = set_vol_array(&p, end, vols, i);
++		BL_LOG_INFO("%s: stripe %d nvols=%d unit=%ld\n", __func__, voln,
++			    vol->bv_vol_n, (long)chunksize);
++		status = set_vol_array(&p, end, vols, voln);
 +		if (status)
 +			return status;
 +		for (j = 1; j < vol->bv_vol_n; j++) {
@@ -1287,11 +1330,8 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +				return -EIO;
 +			}
 +		}
-+		/* Make sure total size only includes addressable areas */
-+		tmp_size = vol->bv_vols[0]->bv_size;
-+		d = div(tmp_size, (uint32_t) vol->param.bv_stripe_unit);
-+		tmp_size = d.quot;
-+		vol->bv_size = tmp_size * vol->param.bv_stripe_unit;
++		/* Truncate size to a stripe unit boundary */
++		vol->bv_size = vol->bv_vols[0]->bv_size & ~(chunksize - 1);
 +		break;
 +	case BLOCK_VOLUME_CONCAT:
 +		BLK_READBUF(p, end, 4);
@@ -1299,7 +1339,9 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +		if (!vol->bv_vol_n)
 +			return -EIO;
 +		*array_cnt = vol->bv_vol_n;
-+		status = set_vol_array(&p, end, vols, i);
++		BL_LOG_INFO("%s: concat %d %d\n", __func__, voln,
++			    vol->bv_vol_n);
++		status = set_vol_array(&p, end, vols, voln);
 +		if (status)
 +			return status;
 +		vol->bv_size = sum_subvolume_sizes(vol);
@@ -1324,13 +1366,13 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +
 +	p = (uint32_t *) dev_addr_buf;
 +	end = (uint32_t *) ((char *)p + dev_addr_len);
++
 +	/* Decode block volume */
 +	BLK_READBUF(p, end, 4);
 +	READ32(num_vols);
-+	if (num_vols <= 0) {
-+		BL_LOG_ERR("Error: number of vols: %d\n", num_vols);
++	BL_LOG_INFO("%s: %d vols\n", __func__, num_vols);
++	if (num_vols <= 0)
 +		goto out_err;
-+	}
 +
 +	vols = (struct bl_volume *)malloc(num_vols * sizeof(struct bl_volume));
 +	if (!vols) {
@@ -1345,7 +1387,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +	 * referenced again, the volume arrays are guaranteed to fit
 +	 * in the suprisingly small space allocated.
 +	 */
-+	arrays =
++	arrays_ptr = arrays =
 +	    (struct bl_volume **)malloc(num_vols * 2 *
 +					sizeof(struct bl_volume *));
 +	if (!arrays) {
@@ -1353,8 +1395,6 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +		goto out_err;
 +	}
 +
-+	arrays_ptr = arrays;
-+
 +	for (i = 0; i < num_vols; i++) {
 +		vols[i].bv_vols = arrays_ptr;
 +		status = decode_blk_volume(&p, end, vols, i, &count);
@@ -1382,9 +1422,9 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/device-process.c.orig nfs-utils-1.2.3/uti
 +	return dev;
 +}
 diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/blkmapd/dm-device.c
---- nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig	2010-11-09 11:45:37.284107000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/dm-device.c	2010-11-09 11:45:37.286104000 -0500
-@@ -0,0 +1,510 @@
+--- nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig	2011-01-28 14:54:34.576096068 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/dm-device.c	2011-01-28 14:54:34.576096068 -0500
+@@ -0,0 +1,529 @@
 +/*
 + * dm-device.c: create or remove device via device mapper API.
 + *
@@ -1411,15 +1451,20 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 + */
-+#include <libdevmapper.h>
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <linux/kdev_t.h>
++
 +#include <stdio.h>
 +#include <stdlib.h>
++#include <unistd.h>
 +#include <string.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
++#include <syslog.h>
 +#include <fcntl.h>
 +#include <errno.h>
-+#include <linux/kdev_t.h>
++#include <libdevmapper.h>
++
 +#include "device-discovery.h"
 +
 +#define DM_DEV_NAME_LEN		256
@@ -1429,8 +1474,6 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +#endif
 +
 +#define DM_PARAMS_LEN		512	/* XXX: is this enough for target? */
-+#define DM_DIR			"/dev/mapper"
-+#define DM_DIR_LEN12
 +#define TYPE_HAS_DEV(type)	((type == BLOCK_VOLUME_SIMPLE) || \
 +			 (type == BLOCK_VOLUME_PSEUDO))
 +
@@ -1448,14 +1491,19 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	struct bl_dm_tree *next;
 +};
 +
++static const char dm_name[] = "pnfs_vol_%u";
++
++static unsigned int dev_count;
++
 +static inline struct bl_dm_table *bl_dm_table_alloc(void)
 +{
 +	return (struct bl_dm_table *)calloc(1, sizeof(struct bl_dm_table));
 +}
 +
-+void bl_dm_table_free(struct bl_dm_table *bl_table_head)
++static void bl_dm_table_free(struct bl_dm_table *bl_table_head)
 +{
-+	struct bl_dm_table *p = bl_table_head;
++	struct bl_dm_table *p;
++
 +	while (bl_table_head) {
 +		p = bl_table_head->next;
 +		free(bl_table_head);
@@ -1463,41 +1511,39 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	}
 +}
 +
-+void add_to_bl_dm_table(struct bl_dm_table **bl_table_head,
++static void add_to_bl_dm_table(struct bl_dm_table **bl_table_head,
 +			struct bl_dm_table *table)
 +{
-+	struct bl_dm_table *pre;
++	struct bl_dm_table *p;
++
 +	if (!*bl_table_head) {
 +		*bl_table_head = table;
 +		return;
 +	}
-+	pre = *bl_table_head;
-+	while (pre->next)
-+		pre = pre->next;
-+	pre->next = table;
-+	return;
++	p = *bl_table_head;
++	while (p->next)
++		p = p->next;
++	p->next = table;
 +}
 +
 +struct bl_dm_tree *bl_tree_head;
 +
-+struct bl_dm_tree *find_bl_dm_tree(uint64_t dev)
++static struct bl_dm_tree *find_bl_dm_tree(uint64_t dev)
 +{
-+	struct bl_dm_tree *p = bl_tree_head;
-+	while (p) {
++	struct bl_dm_tree *p;
++
++	for (p = bl_tree_head; p; p = p->next) {
 +		if (p->dev == dev)
-+			return p;
-+		p = p->next;
++			break;
 +	}
-+	return NULL;
++	return p;
 +}
 +
-+void del_from_bl_dm_tree(uint64_t dev)
++static void del_from_bl_dm_tree(uint64_t dev)
 +{
-+	struct bl_dm_tree *pre = bl_tree_head;
-+	struct bl_dm_tree *p;
++	struct bl_dm_tree *p, *pre = bl_tree_head;
 +
-+	p = pre;
-+	while (p) {
++	for (p = pre; p; p = p->next) {
 +		if (p->dev == dev) {
 +			pre->next = p->next;
 +			if (p == bl_tree_head)
@@ -1506,29 +1552,31 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +			break;
 +		}
 +		pre = p;
-+		p = pre->next;
 +	}
 +}
 +
-+void add_to_bl_dm_tree(struct bl_dm_tree *tree)
++static void add_to_bl_dm_tree(struct bl_dm_tree *tree)
 +{
-+	struct bl_dm_tree *pre;
++	struct bl_dm_tree *p;
++
 +	if (!bl_tree_head) {
 +		bl_tree_head = tree;
 +		return;
 +	}
-+	pre = bl_tree_head;
-+	while (pre->next)
-+		pre = pre->next;
-+	pre->next = tree;
++	p = bl_tree_head;
++	while (p->next)
++		p = p->next;
++	p->next = tree;
 +	return;
 +}
 +
-+/* Create device via device mapper
++/*
++ * Create device via device mapper
 + * return 0 when creation failed
 + * return dev no for created device
 + */
-+uint64_t dm_single_device_create(const char *dev_name, struct bl_dm_table * p)
++static uint64_t
++dm_device_create_mapped(const char *dev_name, struct bl_dm_table *p)
 +{
 +	struct dm_task *dmt;
 +	struct dm_info dminfo;
@@ -1544,15 +1592,16 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +		goto err_out;
 +
 +	while (p) {
-+		ret = dm_task_add_target(dmt, p->offset, p->size,
-+					 p->target_type, p->params);
++		ret =
++		    dm_task_add_target(dmt, p->offset, p->size, p->target_type,
++				       p->params);
 +		if (!ret)
 +			goto err_out;
 +		p = p->next;
 +	}
 +
-+	ret = dm_task_run(dmt) &&
-+	    dm_task_get_info(dmt, &dminfo) && dminfo.exists;
++	ret = dm_task_run(dmt) && dm_task_get_info(dmt, &dminfo)
++	    && dminfo.exists;
 +
 +	if (!ret)
 +		goto err_out;
@@ -1569,21 +1618,21 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	return MKDEV(dminfo.major, dminfo.minor);
 +}
 +
-+int dm_device_remove_byname(const char *dev_name)
++static int dm_device_remove_byname(const char *dev_name)
 +{
 +	struct dm_task *dmt;
 +	int ret = 0;
 +
++	BL_LOG_INFO("%s: %s\n", __func__, dev_name);
++
 +	dmt = dm_task_create(DM_DEVICE_REMOVE);
 +	if (!dmt)
-+		return -ENODEV;
++		return 0;
 +
 +	ret = dm_task_set_name(dmt, dev_name) && dm_task_run(dmt);
 +
 +	dm_task_update_nodes();
-+
-+	if (dmt)
-+		dm_task_destroy(dmt);
++	dm_task_destroy(dmt);
 +
 +	return ret;
 +}
@@ -1592,72 +1641,75 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +{
 +	struct dm_task *dmt;
 +	struct dm_names *dmnames;
-+	char *names = NULL;
-+	int ret = -1;
++	char *name = NULL;
++	int ret = 0;
 +
 +	/* Look for dev_name via dev, if dev_name could be transferred here,
 +	   we could jump to DM_DEVICE_REMOVE directly */
++
 +	dmt = dm_task_create(DM_DEVICE_LIST);
 +	if (!dmt) {
 +		BL_LOG_ERR("dm_task creation failed\n");
-+		return -ENODEV;
++		goto out;
 +	}
 +
 +	ret = dm_task_run(dmt);
 +	if (!ret) {
 +		BL_LOG_ERR("dm_task_run failed\n");
-+		goto error;
++		goto out;
 +	}
 +
 +	dmnames = dm_task_get_names(dmt);
 +	if (!dmnames || !dmnames->dev) {
 +		BL_LOG_ERR("dm_task_get_names failed\n");
-+		goto error;
++		goto out;
 +	}
 +
-+	do {
++	while (dmnames) {
 +		if (dmnames->dev == dev) {
-+			names = dmnames->name;
++			name = strdup(dmnames->name);
 +			break;
 +		}
 +		dmnames = (void *)dmnames + dmnames->next;
-+	} while (dmnames);
++	}
 +
-+	if (!names) {
++	if (!name) {
 +		BL_LOG_ERR("Could not find device\n");
-+		goto error;
++		goto out;
 +	}
 +
 +	dm_task_update_nodes();
 +
-+ error:
-+	dm_task_destroy(dmt);
++ out:
++	if (dmt)
++		dm_task_destroy(dmt);
 +
 +	/* Start to remove device */
-+	if (names)
-+		ret = dm_device_remove_byname(names);
++	if (name) {
++		ret = dm_device_remove_byname(name);
++		free(name);
++	}
++
 +	return ret;
 +}
 +
-+static unsigned long dev_count;
-+
-+void dm_devicelist_remove(unsigned long start, unsigned long end)
++static void dm_devicelist_remove(unsigned int start, unsigned int end)
 +{
 +	char dev_name[DM_DEV_NAME_LEN];
-+	unsigned long count;
++	unsigned int count;
 +
-+	if ((start >= dev_count) || (end <= 1) || (start >= end - 1))
++	if (start >= dev_count || end <= 1 || start >= end - 1)
 +		return;
 +
 +	for (count = end - 1; count > start; count--) {
-+		sprintf(dev_name, "pnfs_vol_%lu", count - 1);
++		snprintf(dev_name, sizeof dev_name, dm_name, count - 1);
 +		dm_device_remove_byname(dev_name);
 +	}
 +
 +	return;
 +}
 +
-+void bl_dm_remove_tree(uint64_t dev)
++static void bl_dm_remove_tree(uint64_t dev)
 +{
 +	struct bl_dm_tree *p;
 +
@@ -1669,28 +1721,28 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	del_from_bl_dm_tree(dev);
 +}
 +
-+void bl_dm_create_tree(uint64_t dev)
++static int bl_dm_create_tree(uint64_t dev)
 +{
 +	struct dm_tree *tree;
 +	struct bl_dm_tree *bl_tree;
 +
 +	bl_tree = find_bl_dm_tree(dev);
 +	if (bl_tree)
-+		return;		/* XXX: error? */
++		return 1;
 +
 +	tree = dm_tree_create();
 +	if (!tree)
-+		return;
++		return 0;
 +
 +	if (!dm_tree_add_dev(tree, MAJOR(dev), MINOR(dev))) {
 +		dm_tree_free(tree);
-+		return;
++		return 0;
 +	}
 +
 +	bl_tree = malloc(sizeof(struct bl_dm_tree));
 +	if (!bl_tree) {
 +		dm_tree_free(tree);
-+		return;
++		return 0;
 +	}
 +
 +	bl_tree->dev = dev;
@@ -1698,29 +1750,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	bl_tree->next = NULL;
 +	add_to_bl_dm_tree(bl_tree);
 +
-+	return;
-+}
-+
-+uint64_t dm_device_nametodev(char *dev_name)
-+{
-+	struct dm_task *dmt;
-+	int ret = 0;
-+	struct dm_info dminfo;
-+
-+	dmt = dm_task_create(DM_DEVICE_INFO);
-+	if (!dmt)
-+		return -ENODEV;
-+
-+	ret = dm_task_set_name(dmt, dev_name) &&
-+	    dm_task_run(dmt) && dm_task_get_info(dmt, &dminfo);
-+
-+	if (dmt)
-+		dm_task_destroy(dmt);
-+
-+	if (!ret)
-+		return 0;
-+
-+	return MKDEV(dminfo.major, dminfo.minor);
++	return 1;
 +}
 +
 +int dm_device_remove_all(uint64_t *dev)
@@ -1751,15 +1781,24 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	ret = dm_tree_deactivate_children(node, uuid, strlen(uuid));
 +	dm_task_update_nodes();
 +	bl_dm_remove_tree(bl_dev);
++
 +	return ret;
 +}
 +
++static int dm_device_exists(char *dev_name)
++{
++	char fullname[DM_DEV_NAME_LEN];
++
++	snprintf(fullname, sizeof fullname, "/dev/mapper/%s", dev_name);
++	return (access(fullname, F_OK) >= 0);
++}
++
 +/* TODO: check the value for DM_DEV_NAME_LEN, DM_TYPE_LEN, DM_PARAMS_LEN */
 +uint64_t dm_device_create(struct bl_volume *vols, int num_vols)
 +{
-+	uint64_t size, dev = 0;
-+	unsigned long count = dev_count;
-+	int number = 0, i, pos;
++	uint64_t size, stripe_unit, stripe_size, nstripes, dev = 0;
++	unsigned int count = dev_count;
++	int volnum, i, pos;
 +	struct bl_volume *node;
 +	char *tmp;
 +	struct bl_dm_table *table = NULL;
@@ -1768,8 +1807,8 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +	char *dev_name = NULL;
 +
 +	/* Create pseudo device here */
-+	while (number < num_vols) {
-+		node = &vols[number];
++	for (volnum = 0; volnum < num_vols; volnum++) {
++		node = &vols[volnum];
 +		switch (node->bv_type) {
 +		case BLOCK_VOLUME_SIMPLE:
 +			/* Do not need to create device here */
@@ -1802,11 +1841,25 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +			if (!table)
 +				goto out;
 +			table->offset = 0;
-+			table->size = node->bv_size;
++			stripe_unit = node->param.bv_stripe_unit << 9;
++			stripe_size = stripe_unit * node->bv_vol_n;
++			nstripes = node->bv_size * node->bv_vol_n / stripe_size;
++			/* Make sure total size is a multiple of stripe size */
++			size = node->bv_size * node->bv_vol_n;
++			if (size % stripe_size != 0) {
++				/* XXX Should this be an error? */
++				BL_LOG_WARNING(
++					"%s: %d units of %llu bytes is not a multiple of %lld stripe size\n",
++					__func__, node->bv_vol_n,
++					(long long unsigned) node->bv_size,
++					(long long unsigned) stripe_size);
++				size = nstripes * stripe_size;
++			}
++			table->size = size;
 +			strcpy(table->target_type, "striped");
-+			sprintf(table->params, "%d %lu %n", node->bv_vol_n,
-+				node->param.bv_stripe_unit, &pos);
-+			/* Repeatedly copy subdev to params */
++			sprintf(table->params, "%d %llu %n", node->bv_vol_n,
++				(long long unsigned) stripe_unit, &pos);
++			/* Copy subdev major:minor to params */
 +			tmp = table->params + pos;
 +			len = DM_PARAMS_LEN - pos;
 +			for (i = 0; i < node->bv_vol_n; i++) {
@@ -1868,9 +1921,14 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +			BL_LOG_ERR("%s: Out of memory\n", __func__);
 +			goto out;
 +		}
-+		sprintf(dev_name, "pnfs_vol_%lu", dev_count++);
++		do {
++			snprintf(dev_name, DM_DEV_NAME_LEN, dm_name,
++				 dev_count++);
++		} while (dm_device_exists(dev_name));
 +
-+		dev = dm_single_device_create(dev_name, bl_table_head);
++		dev = dm_device_create_mapped(dev_name, bl_table_head);
++		BL_LOG_INFO("%s: %d %s %d:%d\n", __func__, volnum, dev_name,
++			    (int) MAJOR(dev), (int) MINOR(dev));
 +		if (!dev) {
 +			/* Delete previous temporary devices */
 +			dm_devicelist_remove(count, dev_count);
@@ -1879,39 +1937,26 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/dm-device.c.orig nfs-utils-1.2.3/utils/bl
 +		node->param.bv_dev = dev;
 +		/* TODO: extend use with PSEUDO later */
 +		node->bv_type = BLOCK_VOLUME_PSEUDO;
++
 + continued:
-+		number++;
 +		if (bl_table_head)
 +			bl_dm_table_free(bl_table_head);
 +		bl_table_head = NULL;
 +	}
 + out:
-+	if (bl_table_head)
++	if (bl_table_head) {
 +		bl_dm_table_free(bl_table_head);
-+	bl_table_head = NULL;
++		bl_table_head = NULL;
++	}
 +	if (dev)
 +		bl_dm_create_tree(dev);
 +	if (dev_name)
 +		free(dev_name);
 +	return dev;
 +}
-diff -up nfs-utils-1.2.3/utils/blkmapd/etc/blkmapd.conf.orig nfs-utils-1.2.3/utils/blkmapd/etc/blkmapd.conf
---- nfs-utils-1.2.3/utils/blkmapd/etc/blkmapd.conf.orig	2010-11-09 11:45:37.289112000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/etc/blkmapd.conf	2010-11-09 11:45:37.291107000 -0500
-@@ -0,0 +1,10 @@
-+# This is an example config file
-+
-+# Look at all /dev/sd* devices
-+# /dev/sd or /dev/sd*
-+/dev/sd*
-+
-+# Look at all /dev/mapper/* devices
-+# /dev/mapper/* or
-+# /dev/mapper/
-+/dev/mapper/*
 diff -up nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat.orig nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat
---- nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat.orig	2010-11-09 11:45:37.295103000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat	2010-11-09 11:45:37.296112000 -0500
+--- nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat.orig	2011-01-28 14:54:34.577096053 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat	2011-01-28 14:54:34.577096053 -0500
 @@ -0,0 +1,76 @@
 +#!/bin/sh
 +#
@@ -1990,8 +2035,8 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/etc/initd/initd.redhat.orig nfs-utils-1.2
 +
 +exit $RETVAL
 diff -up nfs-utils-1.2.3/utils/blkmapd/Makefile.am.orig nfs-utils-1.2.3/utils/blkmapd/Makefile.am
---- nfs-utils-1.2.3/utils/blkmapd/Makefile.am.orig	2010-11-09 11:45:37.262108000 -0500
-+++ nfs-utils-1.2.3/utils/blkmapd/Makefile.am	2010-11-09 11:45:37.264103000 -0500
+--- nfs-utils-1.2.3/utils/blkmapd/Makefile.am.orig	2011-01-28 14:54:34.572096108 -0500
++++ nfs-utils-1.2.3/utils/blkmapd/Makefile.am	2011-01-28 14:54:34.572096108 -0500
 @@ -0,0 +1,19 @@
 +## Process this file with automake to produce Makefile.in
 +
@@ -2014,7 +2059,7 @@ diff -up nfs-utils-1.2.3/utils/blkmapd/Makefile.am.orig nfs-utils-1.2.3/utils/bl
 +
 diff -up nfs-utils-1.2.3/utils/exportfs/exportfs.c.orig nfs-utils-1.2.3/utils/exportfs/exportfs.c
 --- nfs-utils-1.2.3/utils/exportfs/exportfs.c.orig	2010-09-28 08:24:16.000000000 -0400
-+++ nfs-utils-1.2.3/utils/exportfs/exportfs.c	2010-11-09 11:45:37.301107000 -0500
++++ nfs-utils-1.2.3/utils/exportfs/exportfs.c	2011-01-28 14:54:34.578096031 -0500
 @@ -577,6 +577,8 @@ dump(int verbose)
  #endif
  			}
@@ -2025,20 +2070,23 @@ diff -up nfs-utils-1.2.3/utils/exportfs/exportfs.c.orig nfs-utils-1.2.3/utils/ex
  		}
  	}
 diff -up nfs-utils-1.2.3/utils/Makefile.am.orig nfs-utils-1.2.3/utils/Makefile.am
---- nfs-utils-1.2.3/utils/Makefile.am.orig	2010-09-28 08:24:16.000000000 -0400
-+++ nfs-utils-1.2.3/utils/Makefile.am	2010-11-09 11:45:37.258105000 -0500
-@@ -4,6 +4,8 @@ OPTDIRS =
+--- nfs-utils-1.2.3/utils/Makefile.am.orig	2011-01-28 14:52:39.571134406 -0500
++++ nfs-utils-1.2.3/utils/Makefile.am	2011-01-28 14:54:34.572096108 -0500
+@@ -9,6 +9,11 @@ OPTDIRS += nfsidmap
+ endif
+ endif
  
- if CONFIG_NFSV4
- OPTDIRS += idmapd
++if CONFIG_NFSV4
 +OPTDIRS += spnfsd
 +OPTDIRS += blkmapd
- endif
- 
++endif
++
  if CONFIG_GSS
+ OPTDIRS += gssd
+ endif
 diff -up nfs-utils-1.2.3/utils/mountd/cache.c.orig nfs-utils-1.2.3/utils/mountd/cache.c
 --- nfs-utils-1.2.3/utils/mountd/cache.c.orig	2010-09-28 08:24:16.000000000 -0400
-+++ nfs-utils-1.2.3/utils/mountd/cache.c	2010-11-09 11:45:37.307104000 -0500
++++ nfs-utils-1.2.3/utils/mountd/cache.c	2011-01-28 14:54:34.578096031 -0500
 @@ -653,6 +653,8 @@ static int dump_to_cache(FILE *f, char *
  		qword_printint(f, exp->e_anonuid);
  		qword_printint(f, exp->e_anongid);
@@ -2049,8 +2097,8 @@ diff -up nfs-utils-1.2.3/utils/mountd/cache.c.orig nfs-utils-1.2.3/utils/mountd/
  		write_secinfo(f, exp, flag_mask);
   		if (exp->e_uuid == NULL || different_fs) {
 diff -up nfs-utils-1.2.3/utils/spnfsd/atomicio.c.orig nfs-utils-1.2.3/utils/spnfsd/atomicio.c
---- nfs-utils-1.2.3/utils/spnfsd/atomicio.c.orig	2010-11-09 11:45:37.316104000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/atomicio.c	2010-11-09 11:45:37.317110000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/atomicio.c.orig	2011-01-28 14:54:34.579096022 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/atomicio.c	2011-01-28 14:54:34.580096018 -0500
 @@ -0,0 +1,63 @@
 +/*
 + * Copyright (c) 2002 Marius Aamodt Eriksen <marius at monkey.org>
@@ -2116,8 +2164,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/atomicio.c.orig nfs-utils-1.2.3/utils/spnf
 +	return (pos);
 +}
 diff -up nfs-utils-1.2.3/utils/spnfsd/cfg.c.orig nfs-utils-1.2.3/utils/spnfsd/cfg.c
---- nfs-utils-1.2.3/utils/spnfsd/cfg.c.orig	2010-11-09 11:45:37.320106000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/cfg.c	2010-11-09 11:45:37.322106000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/cfg.c.orig	2011-01-28 14:54:34.580096018 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/cfg.c	2011-01-28 14:54:34.581096012 -0500
 @@ -0,0 +1,893 @@
 +/*	$OpenBSD: conf.c,v 1.55 2003/06/03 14:28:16 ho Exp $	*/
 +/*	$EOM: conf.c,v 1.48 2000/12/04 02:04:29 angelos Exp $	*/
@@ -3013,8 +3061,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/cfg.c.orig nfs-utils-1.2.3/utils/spnfsd/cf
 +  return;
 +}
 diff -up nfs-utils-1.2.3/utils/spnfsd/cfg.h.orig nfs-utils-1.2.3/utils/spnfsd/cfg.h
---- nfs-utils-1.2.3/utils/spnfsd/cfg.h.orig	2010-11-09 11:45:37.324108000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/cfg.h	2010-11-09 11:45:37.326105000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/cfg.h.orig	2011-01-28 14:54:34.581096012 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/cfg.h	2011-01-28 14:54:34.581096012 -0500
 @@ -0,0 +1,67 @@
 +/* $OpenBSD: conf.h,v 1.30 2004/06/25 20:25:34 hshoexer Exp $	 */
 +/* $EOM: conf.h,v 1.13 2000/09/18 00:01:47 ho Exp $	 */
@@ -3084,8 +3132,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/cfg.h.orig nfs-utils-1.2.3/utils/spnfsd/cf
 +
 +#endif				/* _CONF_H_ */
 diff -up nfs-utils-1.2.3/utils/spnfsd/Makefile.am.orig nfs-utils-1.2.3/utils/spnfsd/Makefile.am
---- nfs-utils-1.2.3/utils/spnfsd/Makefile.am.orig	2010-11-09 11:45:37.311109000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/Makefile.am	2010-11-09 11:45:37.313108000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/Makefile.am.orig	2011-01-28 14:54:34.579096022 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/Makefile.am	2011-01-28 14:54:34.579096022 -0500
 @@ -0,0 +1,30 @@
 +## Process this file with automake to produce Makefile.in
 +
@@ -3118,8 +3166,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/Makefile.am.orig nfs-utils-1.2.3/utils/spn
 +
 +MAINTAINERCLEANFILES = Makefile.in
 diff -up nfs-utils-1.2.3/utils/spnfsd/makestatic.orig nfs-utils-1.2.3/utils/spnfsd/makestatic
---- nfs-utils-1.2.3/utils/spnfsd/makestatic.orig	2010-11-09 11:45:37.328108000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/makestatic	2010-11-09 11:45:37.330105000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/makestatic.orig	2011-01-28 14:54:34.582096005 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/makestatic	2011-01-28 14:54:34.582096005 -0500
 @@ -0,0 +1,23 @@
 +/******************************************************************************
 +
@@ -3145,8 +3193,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/makestatic.orig nfs-utils-1.2.3/utils/spnf
 +
 +gcc -static -Wall -pipe -g -O2 -o spnfsd atomicio.o spnfsd_ops.o cfg.o spnfsd.o strlcat.o strlcpy.o  /usr/lib/libevent.a ../../support/nfs/libnfs.a
 diff -up nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h.orig nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h
---- nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h.orig	2010-11-09 11:45:37.332108000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h	2010-11-09 11:45:37.334106000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h.orig	2011-01-28 14:54:34.582096005 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h	2011-01-28 14:54:34.582096005 -0500
 @@ -0,0 +1,334 @@
 +/*
 + * include/linux/nfsd4_spnfs.h
@@ -3483,8 +3531,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/nfsd4_spnfs.h.orig nfs-utils-1.2.3/utils/s
 +
 +#endif /* NFS_SPNFS_H */
 diff -up nfs-utils-1.2.3/utils/spnfsd/queue.h.orig nfs-utils-1.2.3/utils/spnfsd/queue.h
---- nfs-utils-1.2.3/utils/spnfsd/queue.h.orig	2010-11-09 11:45:37.338104000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/queue.h	2010-11-09 11:45:37.340106000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/queue.h.orig	2011-01-28 14:54:34.583095992 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/queue.h	2011-01-28 14:54:34.583095992 -0500
 @@ -0,0 +1,499 @@
 +/*	$OpenBSD: queue.h,v 1.22 2001/06/23 04:39:35 angelos Exp $	*/
 +/*	$NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $	*/
@@ -3986,8 +4034,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/queue.h.orig nfs-utils-1.2.3/utils/spnfsd/
 +
 +#endif	/* !_SYS_QUEUE_H_ */
 diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf.orig nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf
---- nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf.orig	2010-11-09 11:45:37.347108000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf	2010-11-09 11:45:37.349108000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf.orig	2011-01-28 14:54:34.585095960 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf	2011-01-28 14:54:34.585095960 -0500
 @@ -0,0 +1,21 @@
 +[General]
 +
@@ -4011,8 +4059,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd.conf.orig nfs-utils-1.2.3/utils/spn
 +DS2_ROOT = /pnfs
 +DS2_ID = 2
 diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd.c.orig nfs-utils-1.2.3/utils/spnfsd/spnfsd.c
---- nfs-utils-1.2.3/utils/spnfsd/spnfsd.c.orig	2010-11-09 11:45:37.343104000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/spnfsd.c	2010-11-09 11:45:37.344111000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/spnfsd.c.orig	2011-01-28 14:54:34.584095977 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/spnfsd.c	2011-01-28 14:54:34.584095977 -0500
 @@ -0,0 +1,578 @@
 +/*
 + *  spnfsd.c
@@ -4593,8 +4641,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd.c.orig nfs-utils-1.2.3/utils/spnfsd
 +	}
 +}
 diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd.h.orig nfs-utils-1.2.3/utils/spnfsd/spnfsd.h
---- nfs-utils-1.2.3/utils/spnfsd/spnfsd.h.orig	2010-11-09 11:45:37.351109000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/spnfsd.h	2010-11-09 11:45:37.353106000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/spnfsd.h.orig	2011-01-28 14:54:34.585095960 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/spnfsd.h	2011-01-28 14:54:34.585095960 -0500
 @@ -0,0 +1,70 @@
 +/*
 + * spnfsd.h
@@ -4667,8 +4715,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd.h.orig nfs-utils-1.2.3/utils/spnfsd
 +int spnfsd_write(struct spnfs_msg *);
 +int spnfsd_getfh(char *, unsigned char *, unsigned int *);
 diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c.orig nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c
---- nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c.orig	2010-11-09 11:45:37.368106000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c	2010-11-09 11:45:37.370107000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c.orig	2011-01-28 14:54:34.586095941 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c	2011-01-28 14:54:34.586095941 -0500
 @@ -0,0 +1,439 @@
 +/******************************************************************************
 +
@@ -5110,8 +5158,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/spnfsd_ops.c.orig nfs-utils-1.2.3/utils/sp
 +	return 0;
 +}
 diff -up nfs-utils-1.2.3/utils/spnfsd/strlcat.c.orig nfs-utils-1.2.3/utils/spnfsd/strlcat.c
---- nfs-utils-1.2.3/utils/spnfsd/strlcat.c.orig	2010-11-09 11:45:37.373105000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/strlcat.c	2010-11-09 11:45:37.374112000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/strlcat.c.orig	2011-01-28 14:54:34.586095941 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/strlcat.c	2011-01-28 14:54:34.586095941 -0500
 @@ -0,0 +1,77 @@
 +/*	$OpenBSD: strlcat.c,v 1.8 2001/05/13 15:40:15 deraadt Exp $	*/
 +
@@ -5191,8 +5239,8 @@ diff -up nfs-utils-1.2.3/utils/spnfsd/strlcat.c.orig nfs-utils-1.2.3/utils/spnfs
 +	return(dlen + (s - src));	/* count does not include NUL */
 +}
 diff -up nfs-utils-1.2.3/utils/spnfsd/strlcpy.c.orig nfs-utils-1.2.3/utils/spnfsd/strlcpy.c
---- nfs-utils-1.2.3/utils/spnfsd/strlcpy.c.orig	2010-11-09 11:45:37.377105000 -0500
-+++ nfs-utils-1.2.3/utils/spnfsd/strlcpy.c	2010-11-09 11:45:37.378112000 -0500
+--- nfs-utils-1.2.3/utils/spnfsd/strlcpy.c.orig	2011-01-28 14:54:34.587095917 -0500
++++ nfs-utils-1.2.3/utils/spnfsd/strlcpy.c	2011-01-28 14:54:34.587095917 -0500
 @@ -0,0 +1,73 @@
 +/*	$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $	*/
 +


More information about the scm-commits mailing list