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>