Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Aug 2017 01:34:38 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r322642 - projects/pnfs-planb-server/usr.sbin/nfsd
Message-ID:  <201708180134.v7I1YcFo049244@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Fri Aug 18 01:34:38 2017
New Revision: 322642
URL: https://svnweb.freebsd.org/changeset/base/322642

Log:
  Add the '#' delimiter for use with the "-p" option to indicate that the
  next DS is a mirror of the current one.
  This is not yet documented in the man page, since mirroring is only for
  testing at this time. There is no code to handle mirror failures yet.

Modified:
  projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c

Modified: projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c
==============================================================================
--- projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c	Fri Aug 18 01:31:34 2017	(r322641)
+++ projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c	Fri Aug 18 01:34:38 2017	(r322642)
@@ -1175,7 +1175,7 @@ static void
 parse_dsserver(const char *optarg, struct nfsd_nfsd_args *nfsdargp)
 {
 	char *ad, *cp, *cp2, *dsaddr, *dshost, *dspath, *dsvol, nfsprt[9];
-	char *mirror, mirrorstr[NFSDEV_MIRRORSTR + 1];
+	char *mirror, mirrorstr[NFSDEV_MIRRORSTR + 1], *cp3;
 	int adsiz, dsaddrcnt, dshostcnt, dspathcnt, ecode, hostsiz, pathsiz;
 	int mirrorcnt, mirrorstrsiz, mirrorindex;
 	size_t dsaddrsiz, dshostsiz, dspathsiz, nfsprtsiz, mirrorsiz;
@@ -1216,12 +1216,26 @@ parse_dsserver(const char *optarg, struct nfsd_nfsd_ar
 	mirrorindex = 0;
 	/* Loop around for each DS server name. */
 	do {
+		/*
+		 * If the next DS is separated from the current one with a '#',
+		 * it is a mirror. If the next DS is separated from the current
+		 * one with a ',', it is not a mirror of the previous DS.
+		 */
 		cp2 = strchr(cp, ',');
+		cp3 = strchr(cp, '#');
+		if (cp3 != NULL && (cp2 == NULL || cp3 < cp2))
+			cp2 = cp3;	/* A mirror of the previous DS. */
+		else
+			cp3 = NULL;	/* Not a mirror of the previous DS. */
 		if (cp2 != NULL) {
+			/* Not the last DS in the list. */
 			*cp2++ = '\0';
 			if (*cp2 == '\0')
 				usage();
+			if (cp3 == NULL)
+				mirrorindex++;	/* Increment if not a mirror. */
 		}
+
 		dsvol = strchr(cp, ':');
 		if (dsvol == NULL || *(dsvol + 1) == '\0')
 			usage();
@@ -1282,7 +1296,7 @@ printf("pnfs path=%s\n", dsvol);
 
 		/* Append this mirrorindex to mirror. */
 		if (snprintf(mirrorstr, NFSDEV_MIRRORSTR + 1, "%d",
-		    mirrorindex++) > NFSDEV_MIRRORSTR)
+		    mirrorindex) > NFSDEV_MIRRORSTR)
 			errx(1, "Too many mirrors");
 		mirrorstrsiz = strlen(mirrorstr);
 		if (mirrorcnt + mirrorstrsiz + 1 > mirrorsiz) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201708180134.v7I1YcFo049244>