[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