From owner-svn-src-projects@freebsd.org Sun Aug 6 22:14:55 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A2DDDCD631 for ; Sun, 6 Aug 2017 22:14:55 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 53FFA708C0; Sun, 6 Aug 2017 22:14:55 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v76MEsQD038169; Sun, 6 Aug 2017 22:14:54 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v76MEs7M038166; Sun, 6 Aug 2017 22:14:54 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201708062214.v76MEs7M038166@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sun, 6 Aug 2017 22:14:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r322126 - in projects/pnfs-planb-server/sys/fs: nfs nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/pnfs-planb-server/sys/fs: nfs nfsserver X-SVN-Commit-Revision: 322126 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Aug 2017 22:14:55 -0000 Author: rmacklem Date: Sun Aug 6 22:14:54 2017 New Revision: 322126 URL: https://svnweb.freebsd.org/changeset/base/322126 Log: Add some code for Flex Files layout. No semantic change. Modified: projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sun Aug 6 22:09:30 2017 (r322125) +++ projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sun Aug 6 22:14:54 2017 (r322126) @@ -58,7 +58,7 @@ #define NFS_MAXNAMLEN 255 /* * Calculating the maximum XDR overhead for an NFS RPC isn't easy. - * NFS_MAXPKTHDR is antiquated and assume AUTH_SYS over UDP. + * NFS_MAXPKTHDR is antiquated and assumes AUTH_SYS over UDP. * NFS_MAXXDR should be sufficient for all NFS versions over TCP. * It includes: * - Maximum RPC message header. It can include 2 400byte authenticators plus @@ -261,7 +261,9 @@ #define NFSX_V4PNFSFH (sizeof(fhandle_t) + 1) #define NFSX_V4FILELAYOUT (4 * NFSX_UNSIGNED + NFSX_V4DEVICEID + \ NFSX_HYPER + NFSM_RNDUP(NFSX_V4PNFSFH)) -#define NFSX_V4MAXLAYOUT NFSX_V4FILELAYOUT +#define NFSX_V4FLEXLAYOUT(m) (NFSX_HYPER + 3 * NFSX_UNSIGNED + \ + ((m) * (NFSX_V4DEVICEID + NFSX_STATEID + NFSM_RNDUP(NFSX_V4PNFSFH) + \ + 6 * NFSX_UNSIGNED))) /* sizes common to multiple NFS versions */ #define NFSX_FHMAX (NFSX_V4FHMAX) @@ -641,6 +643,7 @@ #define NFSLAYOUT_NFSV4_1_FILES 0x1 #define NFSLAYOUT_OSD2_OBJECTS 0x2 #define NFSLAYOUT_BLOCK_VOLUME 0x3 +#define NFSLAYOUT_FLEXFILE 0x4 #define NFSLAYOUTIOMODE_READ 1 #define NFSLAYOUTIOMODE_RW 2 Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Sun Aug 6 22:09:30 2017 (r322125) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c Sun Aug 6 22:14:54 2017 (r322126) @@ -60,6 +60,7 @@ extern struct nfsdevicehead nfsrv_devidhead; extern int nfsd_debuglevel; extern u_long sb_max_adj; extern int nfsrv_pnfsatime; +extern int nfsrv_maxpnfsmirror; #endif /* !APPLEKEXT */ static int nfs_async = 0; @@ -4325,7 +4326,7 @@ nfsrvd_layoutget(struct nfsrv_descript *nd, __unused i nfsv4stateid_t stateid; int error = 0, layoutlen, layouttype, iomode, maxcnt, retonclose; uint64_t offset, len, minlen; - char *layp = NULL; + char *layp; if (nfs_rootfhset == 0 || nfsd_checkrootexp(nd) != 0) { nd->nd_repstat = NFSERR_WRONGSEC; @@ -4368,13 +4369,18 @@ nfsrvd_layoutget(struct nfsrv_descript *nd, __unused i } } + layp = NULL; if (layouttype == NFSLAYOUT_NFSV4_1_FILES) layp = malloc(NFSX_V4FILELAYOUT, M_TEMP, M_WAITOK); + else if (layouttype == NFSLAYOUT_FLEXFILE) + layp = malloc(NFSX_V4FLEXLAYOUT(nfsrv_maxpnfsmirror), M_TEMP, + M_WAITOK); else - layp = malloc(NFSX_V4MAXLAYOUT, M_TEMP, M_WAITOK); - nd->nd_repstat = nfsrv_layoutget(nd, vp, exp, layouttype, &iomode, - &offset, &len, minlen, &stateid, maxcnt, &retonclose, &layoutlen, - layp, nd->nd_cred, p); + nd->nd_repstat = NFSERR_UNKNLAYOUTTYPE; + if (layp != NULL) + nd->nd_repstat = nfsrv_layoutget(nd, vp, exp, layouttype, + &iomode, &offset, &len, minlen, &stateid, maxcnt, + &retonclose, &layoutlen, layp, nd->nd_cred, p); NFSD_DEBUG(4, "nfsrv_layoutget stat=%u layoutlen=%d\n", nd->nd_repstat, layoutlen); if (nd->nd_repstat == 0) { Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sun Aug 6 22:09:30 2017 (r322125) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sun Aug 6 22:14:54 2017 (r322126) @@ -36,6 +36,7 @@ int nfsrv_issuedelegs = 0; int nfsrv_dolocallocks = 0; struct nfsv4lock nfsv4rootfs_lock; time_t nfsdev_time = 0; +int nfsrv_maxpnfsmirror = 1; extern int newnfs_numnfsd; extern struct nfsstatsv1 nfsstatsv1;