From owner-svn-src-projects@freebsd.org Sun May 27 12:06:04 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 60009F706B6 for ; Sun, 27 May 2018 12:06:04 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0B8D77DB92; Sun, 27 May 2018 12:06:04 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C2F161E44C; Sun, 27 May 2018 12:06:03 +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 w4RC63N2068148; Sun, 27 May 2018 12:06:03 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4RC63MG068147; Sun, 27 May 2018 12:06:03 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805271206.w4RC63MG068147@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sun, 27 May 2018 12:06:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334255 - projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Commit-Revision: 334255 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.26 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, 27 May 2018 12:06:04 -0000 Author: rmacklem Date: Sun May 27 12:06:03 2018 New Revision: 334255 URL: https://svnweb.freebsd.org/changeset/base/334255 Log: Update the comment for nfsrv_copymr() to more accurately describe the algorithm. This function is currently used for recovery of a file onto a recovered DS, but will soon be modified slightly so that it can also be used to migrate a file to a different DS. Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sun May 27 10:48:21 2018 (r334254) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Sun May 27 12:06:03 2018 (r334255) @@ -7794,18 +7794,31 @@ nfsrv_dontlayout(fhandle_t *fhp) #define PNFSDS_COPYSIZ 65536 /* - * Do the recovery of a file for a recovered mirror. + * Create a new file on a DS and copy the contents of an extant DS file to it. + * This can be used for recovery of a DS file onto a recovered DS. * The steps are: - * - Disable issuing of rw layouts for the file. - * - Recall and wait for return of all rw layouts for the file. + * - When called, the MDS file's vnode is locked, blocking LayoutGet operations. + * - Disable issuing of read/write layouts for the file via the nfsdontlist, + * so that they will be disabled after the MDS file's vnode is unlocked. + * - Set up the nfsrv_recalllist so that recall of read/write layouts can + * be done. + * - Unlock the MDS file's vnode, so that the client(s) can perform proxied + * writes, LayoutCommits and LayoutReturns for the file when completing the + * LayoutReturn requested by the LayoutRecall callback. + * - Issue a LayoutRecall callback for all read/write layouts and wait for + * them to be returned. (If the LayoutRecall callback replies + * NFSERR_NOMATCHLAYOUT, they are gone and no LayoutReturn is needed.) + * - Exclusively lock the MDS file's vnode. This ensures that no proxied + * writes are in progress or can occur during the DS file copy. + * It also blocks Setattr operations. * - Create the file on the recovered mirror. - * - Upgrade the vnode lock on the MDS file, so that proxied writes and - * VOP_SETACL()s are blocked until the copy is complete. * - Copy the file from the operational DS. * - Copy any ACL from the MDS file to the new DS file. * - Set the modify time of the new DS file to that of the MDS file. * - Update the extended attribute for the MDS file. - * - Enable issuing of rw layouts. + * - Enable issuing of rw layouts by deleting the nfsdontlist entry. + * - The caller will unlock the MDS file's vnode allowing operations + * to continue normally, since it is now on the mirror again. */ int nfsrv_copymr(vnode_t vp, vnode_t fvp, vnode_t dvp, struct nfsdevice *ds, From owner-svn-src-projects@freebsd.org Tue May 29 03:19:58 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7E470F7D22B for ; Tue, 29 May 2018 03:19:58 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 307DE72DBA; Tue, 29 May 2018 03:19:58 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EDFE216630; Tue, 29 May 2018 03:19:57 +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 w4T3JvRH023700; Tue, 29 May 2018 03:19:57 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4T3JuNC023690; Tue, 29 May 2018 03:19:56 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805290319.w4T3JuNC023690@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 29 May 2018 03:19:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334309 - in projects/pnfs-planb-server/sys/fs: nfs nfsclient nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/pnfs-planb-server/sys/fs: nfs nfsclient nfsserver X-SVN-Commit-Revision: 334309 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.26 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: Tue, 29 May 2018 03:19:59 -0000 Author: rmacklem Date: Tue May 29 03:19:56 2018 New Revision: 334309 URL: https://svnweb.freebsd.org/changeset/base/334309 Log: Change the pNFS server so that it does a distributed layout of mirrored storage files on the DSs instead of strict sets of mirrored DSs. This actually simplified the code in various places and made doing migration easy. It also implies that typically only one DS will run out of space at a time and can be disabled, allowing the service to continue to run until other DSs run out of space. It also adds the capability of migration, where a sysadmin can move data storage files between the DSs. The system call that does this could be used by a load/storage space balancer in the future. Patched versions of nfsd and pnfsdscopymr will be committed soon to make this work. Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs.h projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h projects/pnfs-planb-server/sys/fs/nfs/nfsrvstate.h projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clvfsops.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs.h Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs.h Tue May 29 03:19:56 2018 (r334309) @@ -185,18 +185,14 @@ struct nfsd_nfsd_args { int dnshostlen; /* Length of DNS names */ char *dspath; /* DS Mount path on MDS */ int dspathlen; /* Length of DS Mount path on MDS */ - char *mirror; /* DS with same mirrorindex are mirrors */ - int mirrorlen; /* Length of the mirrorindex array */ + int mirrorcnt; /* Number of mirrors to create on DSs */ }; /* - * NFSDEV_MIRRORSTR - string of digits that number the DSs 0->999. - * (To support more than 1000 DSs on an MDS, this needs to be increased.) * NFSDEV_MAXMIRRORS - Maximum # of mirrors for a DS. * (Most will only have a single mirror, but this setting allows up to 3.) * NFSDEV_MAXVERS - maximum number of NFS versions supported by Flex File. */ -#define NFSDEV_MIRRORSTR 3 #define NFSDEV_MAXMIRRORS 4 #define NFSDEV_MAXVERS 4 Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Tue May 29 03:19:56 2018 (r334309) @@ -71,7 +71,6 @@ int nfsrv_lease = NFSRV_LEASE; int ncl_mbuf_mlen = MLEN; int nfsd_enable_stringtouid = 0; int nfsrv_doflexfile = 0; -int nfsrv_maxpnfsmirror = 1; static int nfs_enable_uidtostring = 0; NFSNAMEIDMUTEX; NFSSOCKMUTEX; @@ -85,6 +84,10 @@ SYSCTL_DECL(_vfs_nfs); SYSCTL_INT(_vfs_nfs, OID_AUTO, enable_uidtostring, CTLFLAG_RW, &nfs_enable_uidtostring, 0, "Make nfs always send numeric owner_names"); +int nfsrv_maxpnfsmirror = 1; +SYSCTL_INT(_vfs_nfs, OID_AUTO, pnfsmirror, CTLFLAG_RD, + &nfsrv_maxpnfsmirror, 0, "Mirror level for pNFS service"); + /* * This array of structures indicates, for V4: * retfh - which of 3 types of calling args are used @@ -4313,47 +4316,32 @@ nfsv4_freeslot(struct nfsclsession *sep, int slot) * Return one if found, NULL otherwise. */ struct nfsdevice * -nfsv4_findmirror(struct nfsmount *nmp, struct nfsdevice **fndpardsp) +nfsv4_findmirror(struct nfsmount *nmp) { - struct nfsdevice *ds, *mds, *fndds; + struct nfsdevice *ds, *fndds; + int fndmirror; mtx_assert(NFSDDSMUTEXPTR, MA_OWNED); /* - * Search the DS server list for a match with dvp. + * Search the DS server list for a match with nmp. * Remove the DS entry if found and there is a mirror. */ fndds = NULL; - if (fndpardsp != NULL) - *fndpardsp = NULL; + fndmirror = 0; if (nfsrv_devidcnt == 0) return (fndds); TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) { - if (fndds != NULL) - break; if (ds->nfsdev_nmp == nmp) { - /* If there are no mirrors, return NULL. */ - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) { - if (mds->nfsdev_nmp != NULL) - break; - } - if (mds == NULL) { - NFSCL_DEBUG(4, "no mirror for DS\n"); - return (NULL); - } NFSCL_DEBUG(4, "fnd main ds\n"); fndds = ds; + } else if (ds->nfsdev_nmp != NULL) + fndmirror = 1; + if (fndds != NULL && fndmirror != 0) break; - } else { - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) { - if (mds->nfsdev_nmp == nmp) { - NFSCL_DEBUG(4, "fnd mirror ds\n"); - fndds = mds; - if (fndpardsp != NULL) - *fndpardsp = ds; - break; - } - } - } + } + if (fndmirror == 0) { + NFSCL_DEBUG(4, "no mirror for DS\n"); + return (NULL); } return (fndds); } Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Tue May 29 03:19:56 2018 (r334309) @@ -162,10 +162,9 @@ struct nfsdevice *nfsrv_deldsnmp(struct nfsmount *, NF int nfsrv_createdevids(struct nfsd_nfsd_args *, NFSPROC_T *); int nfsrv_checkdsattr(struct nfsrv_descript *, vnode_t, NFSPROC_T *); int nfsrv_copymr(vnode_t, vnode_t, vnode_t, struct nfsdevice *, - struct pnfsdsfile *, struct pnfsdsfile *, int, struct ucred *, - NFSPROC_T *); -int nfsrv_mdscopymr(char *, char *, char *, char *, int *, NFSPROC_T *, - struct vnode **, struct vnode **, struct pnfsdsfile **, + struct pnfsdsfile *, struct pnfsdsfile *, int, struct ucred *, NFSPROC_T *); +int nfsrv_mdscopymr(char *, char *, char *, char *, int *, char *, NFSPROC_T *, + struct vnode **, struct vnode **, struct pnfsdsfile **, struct nfsdevice **, struct nfsdevice **); /* nfs_nfsdserv.c */ @@ -339,7 +338,7 @@ int nfsv4_sequencelookup(struct nfsmount *, struct nfs int *, uint32_t *, uint8_t *); void nfsv4_freeslot(struct nfsclsession *, int); struct ucred *nfsrv_getgrpscred(struct ucred *); -struct nfsdevice *nfsv4_findmirror(struct nfsmount *, struct nfsdevice **); +struct nfsdevice *nfsv4_findmirror(struct nfsmount *); /* nfs_clcomsubs.c */ void nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int); @@ -706,7 +705,7 @@ int nfsrv_dsgetdevandfh(struct vnode *, NFSPROC_T *, i char *); int nfsrv_dsgetsockmnt(struct vnode *, int, char *, int *, int *, NFSPROC_T *, struct vnode **, fhandle_t *, char *, char *, - struct vnode **, struct nfsmount *, struct nfsmount *, int *, int *); + struct vnode **, struct nfsmount **, struct nfsmount *, int *, int *); int nfsrv_dscreate(struct vnode *, struct vattr *, struct vattr *, fhandle_t *, struct pnfsdsfile *, struct pnfsdsattr *, char *, struct ucred *, NFSPROC_T *, struct vnode **); Modified: projects/pnfs-planb-server/sys/fs/nfs/nfsrvstate.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfsrvstate.h Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfs/nfsrvstate.h Tue May 29 03:19:56 2018 (r334309) @@ -343,11 +343,9 @@ void nfsrv_freedeleglist(struct nfsstatehead *); */ struct nfsdevice { TAILQ_ENTRY(nfsdevice) nfsdev_list; - struct nfsdevicehead nfsdev_mirrors; vnode_t nfsdev_dvp; struct nfsmount *nfsdev_nmp; char nfsdev_deviceid[NFSX_V4DEVICEID]; - char nfsdev_mirrorid[NFSDEV_MIRRORSTR + 1]; uint16_t nfsdev_hostnamelen; uint16_t nfsdev_fileaddrlen; uint16_t nfsdev_flexaddrlen; Modified: projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c Tue May 29 03:19:56 2018 (r334309) @@ -1385,8 +1385,7 @@ nfssvc_nfscl(struct thread *td, struct nfssvc_args *ua "nfs") == 0 && mp->mnt_data != NULL) { nmp = VFSTONFS(mp); NFSDDSLOCK(); - if (nfsv4_findmirror(nmp, NULL) != NULL - ) { + if (nfsv4_findmirror(nmp) != NULL) { NFSDDSUNLOCK(); error = ENXIO; nmp = NULL; Modified: projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clvfsops.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clvfsops.c Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clvfsops.c Tue May 29 03:19:56 2018 (r334309) @@ -1683,7 +1683,7 @@ nfs_unmount(struct mount *mp, int mntflags) /* In the forced case, cancel any outstanding requests. */ if (mntflags & MNT_FORCE) { NFSDDSLOCK(); - if (nfsv4_findmirror(nmp, NULL) != NULL) + if (nfsv4_findmirror(nmp) != NULL) error = ENXIO; NFSDDSUNLOCK(); if (error) Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Tue May 29 03:19:56 2018 (r334309) @@ -73,6 +73,7 @@ extern int nfs_pnfsiothreads; extern struct nfsdontlisthead nfsrv_dontlisthead; extern volatile int nfsrv_dontlistlen; extern volatile int nfsrv_devidcnt; +extern int nfsrv_maxpnfsmirror; struct vfsoptlist nfsv4root_opt, nfsv4root_newopt; NFSDLOCKMUTEX; NFSSTATESPINLOCK; @@ -129,6 +130,7 @@ static int nfsrv_pnfslookupds(struct vnode *, struct v struct pnfsdsfile *, struct vnode **, NFSPROC_T *); static void nfsrv_pnfssetfh(struct vnode *, struct pnfsdsfile *, struct vnode *, NFSPROC_T *); +static int nfsrv_dsremove(struct vnode *, char *, struct ucred *, NFSPROC_T *); int nfs_pnfsio(task_fn_t *, void *); @@ -3282,12 +3284,13 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap struct nfsd_nfsd_args nfsdarg; struct nfsd_nfsd_oargs onfsdarg; struct nfsd_pnfsd_args pnfsdarg; - struct vnode *vp, *nvp; + struct vnode *vp, *nvp, *curdvp; struct pnfsdsfile *pf; - struct nfsdevice *ds; + struct nfsdevice *ds, *fds; cap_rights_t rights; - int buflen, error; + int buflen, error, ret; char *buf, *cp, *cp2, *cp3; + char fname[PNFS_FILENAME_LEN + 1]; if (uap->flag & NFSSVC_NFSDADDSOCK) { error = copyin(uap->argp, (caddr_t)&sockarg, sizeof (sockarg)); @@ -3325,8 +3328,7 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap nfsdarg.addrlen = 0; nfsdarg.dnshost = NULL; nfsdarg.dnshostlen = 0; - nfsdarg.mirror = NULL; - nfsdarg.mirrorlen = 0; + nfsdarg.mirrorcnt = 1; } } else error = copyin(uap->argp, &nfsdarg, sizeof(nfsdarg)); @@ -3335,13 +3337,14 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap if (nfsdarg.addrlen > 0 && nfsdarg.addrlen < 10000 && nfsdarg.dnshostlen > 0 && nfsdarg.dnshostlen < 10000 && nfsdarg.dspathlen > 0 && nfsdarg.dspathlen < 10000 && - nfsdarg.mirrorlen > 0 && nfsdarg.mirrorlen < 10000 && + nfsdarg.mirrorcnt >= 1 && + nfsdarg.mirrorcnt <= NFSDEV_MAXMIRRORS && nfsdarg.addr != NULL && nfsdarg.dnshost != NULL && - nfsdarg.dspath != NULL && nfsdarg.mirror != NULL) { + nfsdarg.dspath != NULL) { NFSD_DEBUG(1, "addrlen=%d dspathlen=%d dnslen=%d" - " mirrorlen=%d\n", nfsdarg.addrlen, + " mirrorcnt=%d\n", nfsdarg.addrlen, nfsdarg.dspathlen, nfsdarg.dnshostlen, - nfsdarg.mirrorlen); + nfsdarg.mirrorcnt); cp = malloc(nfsdarg.addrlen + 1, M_TEMP, M_WAITOK); error = copyin(nfsdarg.addr, cp, nfsdarg.addrlen); if (error != 0) { @@ -3369,17 +3372,6 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap } cp[nfsdarg.dspathlen] = '\0'; /* Ensure nul term. */ nfsdarg.dspath = cp; - cp = malloc(nfsdarg.mirrorlen + 1, M_TEMP, M_WAITOK); - error = copyin(nfsdarg.mirror, cp, nfsdarg.mirrorlen); - if (error != 0) { - free(nfsdarg.addr, M_TEMP); - free(nfsdarg.dnshost, M_TEMP); - free(nfsdarg.dspath, M_TEMP); - free(cp, M_TEMP); - goto out; - } - cp[nfsdarg.mirrorlen] = '\0'; /* Ensure nul term. */ - nfsdarg.mirror = cp; } else { nfsdarg.addr = NULL; nfsdarg.addrlen = 0; @@ -3387,14 +3379,12 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap nfsdarg.dnshostlen = 0; nfsdarg.dspath = NULL; nfsdarg.dspathlen = 0; - nfsdarg.mirror = NULL; - nfsdarg.mirrorlen = 0; + nfsdarg.mirrorcnt = 1; } error = nfsrvd_nfsd(td, &nfsdarg); free(nfsdarg.addr, M_TEMP); free(nfsdarg.dnshost, M_TEMP); free(nfsdarg.dspath, M_TEMP); - free(nfsdarg.mirror, M_TEMP); } else if (uap->flag & NFSSVC_PNFSDS) { error = copyin(uap->argp, &pnfsdarg, sizeof(pnfsdarg)); if (error == 0 && pnfsdarg.op == PNFSDOP_DELDSSERVER) { @@ -3406,25 +3396,33 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap free(cp, M_TEMP); } else if (error == 0 && pnfsdarg.op == PNFSDOP_COPYMR) { cp = malloc(PATH_MAX + 1, M_TEMP, M_WAITOK); - cp2 = malloc(PATH_MAX + 1, M_TEMP, M_WAITOK); - cp3 = malloc(PATH_MAX + 1, M_TEMP, M_WAITOK); buflen = sizeof(*pf) * NFSDEV_MAXMIRRORS; buf = malloc(buflen, M_TEMP, M_WAITOK); error = copyinstr(pnfsdarg.mdspath, cp, PATH_MAX + 1, NULL); - NFSD_DEBUG(4, "pnfsdop_copymr cp mdspath=%d\n", error); - if (error == 0) + NFSD_DEBUG(4, "pnfsdcopymr cp mdspath=%d\n", error); + if (error == 0 && pnfsdarg.dspath != NULL) { + cp2 = malloc(PATH_MAX + 1, M_TEMP, M_WAITOK); error = copyinstr(pnfsdarg.dspath, cp2, PATH_MAX + 1, NULL); - NFSD_DEBUG(4, "pnfsdop_copymr cp dspath=%d\n", error); - if (error == 0) + NFSD_DEBUG(4, "pnfsdcopymr cp dspath=%d\n", + error); + } else + cp2 = NULL; + if (error == 0 && pnfsdarg.curdspath != NULL) { + cp3 = malloc(PATH_MAX + 1, M_TEMP, M_WAITOK); error = copyinstr(pnfsdarg.curdspath, cp3, PATH_MAX + 1, NULL); - NFSD_DEBUG(4, "pnfsdop_copymr cp curdspath=%d\n", - error); + NFSD_DEBUG(4, "pnfsdcopymr cp curdspath=%d\n", + error); + } else + cp3 = NULL; + curdvp = NULL; + fds = NULL; if (error == 0) error = nfsrv_mdscopymr(cp, cp2, cp3, buf, - &buflen, td, &vp, &nvp, &pf, &ds); + &buflen, fname, td, &vp, &nvp, &pf, &ds, + &fds); NFSD_DEBUG(4, "nfsrv_mdscopymr=%d\n", error); if (error == 0) { if (pf->dsf_dir >= nfsrv_dsdirsize) { @@ -3438,6 +3436,15 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap buflen / sizeof(*pf), td->td_ucred, td); vput(vp); vput(nvp); + if (fds != NULL && error == 0) { + curdvp = fds->nfsdev_dsdir[pf->dsf_dir]; + ret = vn_lock(curdvp, LK_SHARED); + if (ret == 0) { + nfsrv_dsremove(curdvp, fname, + td->td_ucred, td); + NFSVOPUNLOCK(curdvp, 0); + } + } NFSD_DEBUG(4, "nfsrv_copymr=%d\n", error); } free(cp, M_TEMP); @@ -3813,25 +3820,33 @@ nfsrv_pnfscreate(struct vnode *vp, struct vattr *vap, /* Get a DS server directory in a round-robin order. */ mirrorcnt = 1; NFSDDSLOCK(); - ds = TAILQ_FIRST(&nfsrv_devidhead); + TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) { + if (ds->nfsdev_nmp != NULL) + break; + } if (ds == NULL) { NFSDDSUNLOCK(); NFSD_DEBUG(4, "nfsrv_pnfscreate: no srv\n"); return; } - /* Put at end of list to implement round-robin usage. */ - TAILQ_REMOVE(&nfsrv_devidhead, ds, nfsdev_list); - TAILQ_INSERT_TAIL(&nfsrv_devidhead, ds, nfsdev_list); i = dsdir[0] = ds->nfsdev_nextdir; ds->nfsdev_nextdir = (ds->nfsdev_nextdir + 1) % nfsrv_dsdirsize; dvp[0] = ds->nfsdev_dsdir[i]; - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) { - if (mds->nfsdev_nmp != NULL) { - dsdir[mirrorcnt] = i; - dvp[mirrorcnt] = mds->nfsdev_dsdir[i]; - mirrorcnt++; + if (nfsrv_maxpnfsmirror > 1) { + mds = TAILQ_NEXT(ds, nfsdev_list); + TAILQ_FOREACH_FROM(mds, &nfsrv_devidhead, nfsdev_list) { + if (mds->nfsdev_nmp != NULL) { + dsdir[mirrorcnt] = i; + dvp[mirrorcnt] = mds->nfsdev_dsdir[i]; + mirrorcnt++; + if (mirrorcnt >= nfsrv_maxpnfsmirror) + break; + } } } + /* Put at end of list to implement round-robin usage. */ + TAILQ_REMOVE(&nfsrv_devidhead, ds, nfsdev_list); + TAILQ_INSERT_TAIL(&nfsrv_devidhead, ds, nfsdev_list); NFSDDSUNLOCK(); dsc = NULL; if (mirrorcnt > 1) @@ -4391,21 +4406,25 @@ tryagain: /* * Get the DS mount point, fh and directory from the "pnfsd.dsfile" extended * attribute. + * newnmpp - If it points to a non-NULL nmp, that is the destination and needs + * to be checked. If it points to a NULL nmp, then it returns + * a suitable destination. + * curnmp - If non-NULL, it is the source mount for the copy. */ int nfsrv_dsgetsockmnt(struct vnode *vp, int lktype, char *buf, int *buflenp, int *mirrorcntp, NFSPROC_T *p, struct vnode **dvpp, fhandle_t *fhp, - char *devid, char *fnamep, struct vnode **nvpp, struct nfsmount *newnmp, - struct nfsmount *curnmp, int *zeroippos, int *dsdirp) + char *devid, char *fnamep, struct vnode **nvpp, struct nfsmount **newnmpp, + struct nfsmount *curnmp, int *ippos, int *dsdirp) { struct vnode *dvp, *nvp, **tdvpp; - struct nfsmount *nmp; + struct nfsmount *nmp, *newnmp; struct sockaddr *sad; struct sockaddr_in *sin; - struct nfsdevice *ds, *mds; + struct nfsdevice *ds, *fndds; struct pnfsdsfile *pf; uint32_t dsdir; - int done, error, fnd, fhiszero, gotone, i, mirrorcnt; + int error, fhiszero, fnd, gotone, i, mirrorcnt; ASSERT_VOP_LOCKED(vp, "nfsrv_dsgetsockmnt vp"); *mirrorcntp = 1; @@ -4416,8 +4435,12 @@ nfsrv_dsgetsockmnt(struct vnode *vp, int lktype, char *nvpp = NULL; if (dvpp != NULL) *dvpp = NULL; - if (zeroippos != NULL) - *zeroippos = -1; + if (ippos != NULL) + *ippos = -1; + if (newnmpp != NULL) + newnmp = *newnmpp; + else + newnmp = NULL; error = vn_extattr_get(vp, IO_NODELOCKED, EXTATTR_NAMESPACE_SYSTEM, "pnfsd.dsfile", buflenp, buf, p); mirrorcnt = *buflenp / sizeof(*pf); @@ -4432,13 +4455,14 @@ nfsrv_dsgetsockmnt(struct vnode *vp, int lktype, char for (i = 0; i < mirrorcnt; i++, pf++) { sad = (struct sockaddr *)&pf->dsf_sin; if (nfsaddr2_match(sad, curnmp->nm_nam)) { + if (ippos != NULL) + *ippos = i; fnd = 1; break; } } - /* Set EEXIST so that pnfsdscopymr won't report an error. */ if (fnd == 0) - error = EEXIST; + error = ENXIO; } gotone = 0; @@ -4453,50 +4477,46 @@ nfsrv_dsgetsockmnt(struct vnode *vp, int lktype, char if (dsdir >= nfsrv_dsdirsize) { printf("nfsrv_dsgetsockmnt: dsdir=%d\n", dsdir); error = ENOATTR; - } else if (nvpp != NULL && nfsaddr2_match(sad, newnmp->nm_nam)) + } else if (nvpp != NULL && newnmp != NULL && + nfsaddr2_match(sad, newnmp->nm_nam)) error = EEXIST; if (error == 0) { - if (zeroippos != NULL && sad->sa_family == AF_INET && + if (ippos != NULL && curnmp == NULL && + sad->sa_family == AF_INET && sin->sin_addr.s_addr == 0) - *zeroippos = i; + *ippos = i; if (NFSBCMP(&zerofh, &pf->dsf_fh, sizeof(zerofh)) == 0) fhiszero = 1; /* Use the socket address to find the mount point. */ - done = 0; + fndds = NULL; NFSDDSLOCK(); TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) { - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, - nfsdev_list) { - if (mds->nfsdev_nmp != NULL) { - dvp = mds->nfsdev_dvp; - nmp = VFSTONFS(dvp->v_mount); - if (nmp != mds->nfsdev_nmp) - printf("different nmp " - "%p %p\n", nmp, - mds->nfsdev_nmp); - if (nfsaddr2_match(sad, - nmp->nm_nam)) { - ds = mds; - done = 1; - break; - } - } + if (ds->nfsdev_nmp != NULL) { + dvp = ds->nfsdev_dvp; + nmp = VFSTONFS(dvp->v_mount); + if (nmp != ds->nfsdev_nmp) + printf("different2 nmp %p %p\n", + nmp, ds->nfsdev_nmp); + if (nfsaddr2_match(sad, nmp->nm_nam)) + fndds = ds; + else if (newnmpp != NULL && + newnmp == NULL && + (*newnmpp == NULL || fndds == NULL)) + /* + * Return a destination for the + * copy in newnmpp. Choose the + * last valid one before the + * source mirror, so it isn't + * always the first one. + */ + *newnmpp = nmp; } - if (done != 0) - break; - dvp = ds->nfsdev_dvp; - nmp = VFSTONFS(dvp->v_mount); - if (nmp != ds->nfsdev_nmp) - printf("different2 nmp %p %p\n", - nmp, ds->nfsdev_nmp); - if (nfsaddr2_match(sad, nmp->nm_nam)) - break; } NFSDDSUNLOCK(); - if (ds != NULL) { + if (fndds != NULL) { if (dvpp != NULL || fhiszero != 0 || (nvpp != NULL && *nvpp == NULL)) { - dvp = ds->nfsdev_dsdir[dsdir]; + dvp = fndds->nfsdev_dsdir[dsdir]; error = vn_lock(dvp, lktype); /* * If the file handle is all 0's, try to @@ -4529,7 +4549,7 @@ nfsrv_dsgetsockmnt(struct vnode *vp, int lktype, char gotone++; NFSD_DEBUG(4, "gotone=%d\n", gotone); if (devid != NULL) { - NFSBCOPY(ds->nfsdev_deviceid, + NFSBCOPY(fndds->nfsdev_deviceid, devid, NFSX_V4DEVICEID); devid += NFSX_V4DEVICEID; } Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Tue May 29 02:41:32 2018 (r334308) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c Tue May 29 03:19:56 2018 (r334309) @@ -208,10 +208,10 @@ static void nfsrv_freelayouts(nfsquad_t *clid, fsid_t int iomode); static void nfsrv_freealllayouts(void); static void nfsrv_freedevid(struct nfsdevice *ds); -static int nfsrv_setdsserver(char *dspathp, char *mirrorp, NFSPROC_T *p, +static int nfsrv_setdsserver(char *dspathp, NFSPROC_T *p, struct nfsdevice **dsp); static int nfsrv_delds(char *devid, NFSPROC_T *p); -static void nfsrv_deleteds(struct nfsdevice *fndds, struct nfsdevice *pards); +static void nfsrv_deleteds(struct nfsdevice *fndds); static void nfsrv_allocdevid(struct nfsdevice *ds, char *addr, char *dnshost); static void nfsrv_freealldevids(void); static void nfsrv_flexlayouterr(struct nfsrv_descript *nd, uint32_t *layp, @@ -6965,8 +6965,7 @@ int nfsrv_getdevinfo(char *devid, int layouttype, uint32_t *maxcnt, uint32_t *notify, int *devaddrlen, char **devaddr) { - struct nfsdevice *ds, *mds; - int done; + struct nfsdevice *ds; if ((layouttype != NFSLAYOUT_NFSV4_1_FILES && layouttype != NFSLAYOUT_FLEXFILE) || @@ -6978,21 +6977,11 @@ nfsrv_getdevinfo(char *devid, int layouttype, uint32_t * away, but the order changes in the list. As such, the lock only * needs to be held during the search through the list. */ - done = 0; NFSDDSLOCK(); TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) { - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) { - if (mds->nfsdev_nmp != NULL && NFSBCMP(devid, - mds->nfsdev_deviceid, NFSX_V4DEVICEID) == 0) { - ds = mds; - done = 1; - break; - } - } - if (done != 0) + if (NFSBCMP(devid, ds->nfsdev_deviceid, NFSX_V4DEVICEID) == 0 && + ds->nfsdev_nmp != NULL) break; - if (NFSBCMP(devid, ds->nfsdev_deviceid, NFSX_V4DEVICEID) == 0) - break; } NFSDDSUNLOCK(); if (ds == NULL) @@ -7083,11 +7072,8 @@ nfsrv_freeonedevid(struct nfsdevice *ds) static void nfsrv_freedevid(struct nfsdevice *ds) { - struct nfsdevice *mds, *nds; TAILQ_REMOVE(&nfsrv_devidhead, ds, nfsdev_list); - TAILQ_FOREACH_SAFE(mds, &ds->nfsdev_mirrors, nfsdev_list, nds) - nfsrv_freeonedevid(mds); nfsrv_freeonedevid(ds); } @@ -7195,11 +7181,10 @@ nfsrv_freealllayouts(void) * Look up the mount path for the DS server. */ static int -nfsrv_setdsserver(char *dspathp, char *mirrorp, NFSPROC_T *p, - struct nfsdevice **dsp) +nfsrv_setdsserver(char *dspathp, NFSPROC_T *p, struct nfsdevice **dsp) { struct nameidata nd; - struct nfsdevice *ds, *mds, *tds; + struct nfsdevice *ds; int error, i; char *dsdirpath; size_t dsdirsize; @@ -7230,8 +7215,6 @@ nfsrv_setdsserver(char *dspathp, char *mirrorp, NFSPRO */ *dsp = ds = malloc(sizeof(*ds) + nfsrv_dsdirsize * sizeof(vnode_t), M_NFSDSTATE, M_WAITOK | M_ZERO); - TAILQ_INIT(&ds->nfsdev_mirrors); - strcpy(ds->nfsdev_mirrorid, mirrorp); ds->nfsdev_dvp = nd.ni_vp; ds->nfsdev_nmp = VFSTONFS(nd.ni_vp->v_mount); NFSVOPUNLOCK(nd.ni_vp, 0); @@ -7264,33 +7247,8 @@ nfsrv_setdsserver(char *dspathp, char *mirrorp, NFSPRO } free(dsdirpath, M_TEMP); - /* - * Since this is done before the nfsd threads are running, locking - * isn't required. - * First, look for a mirror. If none found, link into main list. - */ - TAILQ_FOREACH(mds, &nfsrv_devidhead, nfsdev_list) { - if (strcmp(mds->nfsdev_mirrorid, mirrorp) == 0) { - TAILQ_INSERT_TAIL(&mds->nfsdev_mirrors, ds, - nfsdev_list); - atomic_add_int(&nfsrv_devidcnt, 1); - ds = NULL; - i = 1; - TAILQ_FOREACH(tds, &mds->nfsdev_mirrors, nfsdev_list) - i++; - if (i > NFSDEV_MAXMIRRORS) - error = ENXIO; - else if (i > nfsrv_maxpnfsmirror) { - nfsrv_maxpnfsmirror = i; - nfsrv_doflexfile = 1; /* Force Flex File. */ - } - break; - } - } - if (ds != NULL) { - TAILQ_INSERT_TAIL(&nfsrv_devidhead, ds, nfsdev_list); - atomic_add_int(&nfsrv_devidcnt, 1); - } + TAILQ_INSERT_TAIL(&nfsrv_devidhead, ds, nfsdev_list); + atomic_add_int(&nfsrv_devidcnt, 1); return (error); } @@ -7364,13 +7322,13 @@ nfsrv_deldsserver(char *dspathp, NFSPROC_T *p) struct nfsdevice * nfsrv_deldsnmp(struct nfsmount *nmp, NFSPROC_T *p) { - struct nfsdevice *fndds, *fndpards; + struct nfsdevice *fndds; NFSD_DEBUG(4, "deldsdvp\n"); NFSDDSLOCK(); - fndds = nfsv4_findmirror(nmp, &fndpards); + fndds = nfsv4_findmirror(nmp); if (fndds != NULL) - nfsrv_deleteds(fndds, fndpards); + nfsrv_deleteds(fndds); NFSDDSUNLOCK(); if (fndds != NULL) { nfsrv_flexmirrordel(fndds->nfsdev_deviceid, p); @@ -7388,8 +7346,9 @@ nfsrv_deldsnmp(struct nfsmount *nmp, NFSPROC_T *p) static int nfsrv_delds(char *devid, NFSPROC_T *p) { - struct nfsdevice *ds, *mds, *fndds, *fndpards; + struct nfsdevice *ds, *fndds; struct nfsmount *nmp; + int fndmirror; NFSD_DEBUG(4, "delds\n"); /* @@ -7397,48 +7356,27 @@ nfsrv_delds(char *devid, NFSPROC_T *p) * Remove the DS entry if found and there is a mirror. */ fndds = NULL; - fndpards = NULL; nmp = NULL; + fndmirror = 0; NFSDDSLOCK(); TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) { - if (fndds != NULL) - break; if (NFSBCMP(ds->nfsdev_deviceid, devid, NFSX_V4DEVICEID) == 0 && ds->nfsdev_nmp != NULL) { - /* If there are no mirrors, return error. */ - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) { - if (mds->nfsdev_nmp != NULL) - break; - } - if (mds == NULL) { - NFSDDSUNLOCK(); - NFSD_DEBUG(4, "no mirror for DS\n"); - return (ENXIO); - } NFSD_DEBUG(4, "fnd main ds\n"); fndds = ds; + } else if (ds->nfsdev_nmp != NULL) + fndmirror = 1; + if (fndds != NULL && fndmirror != 0) break; - } else { - TAILQ_FOREACH(mds, &ds->nfsdev_mirrors, nfsdev_list) { - if (NFSBCMP(mds->nfsdev_deviceid, devid, - NFSX_V4DEVICEID) == 0 && - mds->nfsdev_nmp != NULL) { - NFSD_DEBUG(4, "fnd mirror ds\n"); - fndds = mds; - fndpards = ds; - break; - } - } - } } - if (fndds != NULL) { + if (fndds != NULL && fndmirror != 0) { nmp = fndds->nfsdev_nmp; NFSLOCKMNT(nmp); if ((nmp->nm_privflag & (NFSMNTP_FORCEDISM | NFSMNTP_CANCELRPCS)) == 0) { nmp->nm_privflag |= NFSMNTP_CANCELRPCS; NFSUNLOCKMNT(nmp); - nfsrv_deleteds(fndds, fndpards); + nfsrv_deleteds(fndds); } else { NFSUNLOCKMNT(nmp); nmp = NULL; @@ -7459,56 +7397,14 @@ nfsrv_delds(char *devid, NFSPROC_T *p) } /* - * Remove a mirror from the list, moving a mirror up to be the first one, - * as required. - * The mirror is removed by setting nfsdev_nmp = NULL. + * Mark a DS as disabled by setting nfsdev_nmp = NULL. */ static void -nfsrv_deleteds(struct nfsdevice *fndds, struct nfsdevice *pards) +nfsrv_deleteds(struct nfsdevice *fndds) { - struct nfsdevice *mds, *nds; - if (pards != NULL) { - NFSD_DEBUG(4, "deleteds: deleting a mirror\n"); - fndds->nfsdev_nmp = NULL; - return; - } - - NFSD_DEBUG(4, "deleteds: deleting main ds\n"); - /* Search for a usable mirror. If none found, return. */ - TAILQ_FOREACH(mds, &fndds->nfsdev_mirrors, nfsdev_list) { - if (mds->nfsdev_nmp != NULL) - break; - } - if (mds == NULL) { - printf("nfsrv_deleteds: empty mirror\n"); - return; - } - - /* - * The fndds is the first one, so make the first valid entry in the - * mirror list the first one. - */ - TAILQ_REMOVE(&nfsrv_devidhead, fndds, nfsdev_list); - TAILQ_REMOVE(&fndds->nfsdev_mirrors, mds, nfsdev_list); - TAILQ_INIT(&mds->nfsdev_mirrors); - - /* Now, move the rest of the mirrors over to mds->nfsdev_mirrors. */ - nds = TAILQ_FIRST(&fndds->nfsdev_mirrors); - while (nds != NULL) { - NFSD_DEBUG(4, "shifting mirror up\n"); - TAILQ_REMOVE(&fndds->nfsdev_mirrors, nds, nfsdev_list); - TAILQ_INSERT_TAIL(&mds->nfsdev_mirrors, nds, nfsdev_list); - nds = TAILQ_FIRST(&fndds->nfsdev_mirrors); - } - - /* And insert mds in the first/main list. */ - TAILQ_INSERT_HEAD(&nfsrv_devidhead, mds, nfsdev_list); - - /* Put fndds in the mirror list with nfsdev_nmp == NULL. */ + NFSD_DEBUG(4, "deleteds: deleting a mirror\n"); fndds->nfsdev_nmp = NULL; - TAILQ_INIT(&fndds->nfsdev_mirrors); - TAILQ_INSERT_TAIL(&mds->nfsdev_mirrors, fndds, nfsdev_list); } /* @@ -7594,31 +7490,24 @@ int nfsrv_createdevids(struct nfsd_nfsd_args *args, NFSPROC_T *p) { struct nfsdevice *ds; - char *addrp, *dnshostp, *dspathp, *mirrorp; + char *addrp, *dnshostp, *dspathp; int error, i; addrp = args->addr; dnshostp = args->dnshost; dspathp = args->dspath; - mirrorp = args->mirror; - nfsrv_maxpnfsmirror = 1; - if (addrp == NULL || dnshostp == NULL || dspathp == NULL || - mirrorp == NULL) + nfsrv_maxpnfsmirror = args->mirrorcnt; + if (addrp == NULL || dnshostp == NULL || dspathp == NULL) return (0); /* * Loop around for each nul-terminated string in args->addr, - * args->dnshost, args->dnspath and args->mirror. + * args->dnshost and args->dnspath. */ while (addrp < (args->addr + args->addrlen) && dnshostp < (args->dnshost + args->dnshostlen) && - dspathp < (args->dspath + args->dspathlen) && - mirrorp < (args->mirror + args->mirrorlen)) { - error = 0; - if (*mirrorp == '\0' || strlen(mirrorp) > NFSDEV_MIRRORSTR) - error = ENXIO; - if (error == 0) - error = nfsrv_setdsserver(dspathp, mirrorp, p, &ds); + dspathp < (args->dspath + args->dspathlen)) { + error = nfsrv_setdsserver(dspathp, p, &ds); if (error != 0) { /* Free all DS servers. */ nfsrv_freealldevids(); @@ -7629,8 +7518,14 @@ nfsrv_createdevids(struct nfsd_nfsd_args *args, NFSPRO addrp += (strlen(addrp) + 1); dnshostp += (strlen(dnshostp) + 1); dspathp += (strlen(dspathp) + 1); - mirrorp += (strlen(mirrorp) + 1); } + if (nfsrv_devidcnt < nfsrv_maxpnfsmirror) { + /* Free all DS servers. */ + nfsrv_freealldevids(); + nfsrv_devidcnt = 0; + nfsrv_maxpnfsmirror = 1; + return (ENXIO); + } /* * Allocate the nfslayout hash table now, since this is a pNFS server. @@ -8084,7 +7979,7 @@ nfsrv_createdsfile(vnode_t vp, fhandle_t *fhp, struct } /* - * Look up the MDS file exclusively locked, and then get the extended attribute + * Look up the MDS file shared locked, and then get the extended attribute * to find the extant DS file to be copied to the new mirror. * If successful, *vpp is set to the MDS file's vp and *nvpp is * set to a DS data file for the MDS file, both exclusively locked. @@ -8093,19 +7988,24 @@ nfsrv_createdsfile(vnode_t vp, fhandle_t *fhp, struct */ int nfsrv_mdscopymr(char *mdspathp, char *dspathp, char *curdspathp, char *buf, - int *buflenp, NFSPROC_T *p, struct vnode **vpp, struct vnode **nvpp, - struct pnfsdsfile **pfp, struct nfsdevice **dsp) + int *buflenp, char *fname, NFSPROC_T *p, struct vnode **vpp, + struct vnode **nvpp, struct pnfsdsfile **pfp, struct nfsdevice **dsp, + struct nfsdevice **fdsp) { struct nameidata nd; struct vnode *vp, *curvp; struct pnfsdsfile *pf; struct nfsmount *nmp, *curnmp; - int dsdir, error, mirrorcnt, zeroippos; - char fname[PNFS_FILENAME_LEN + 1]; + int dsdir, error, mirrorcnt, ippos; vp = NULL; curvp = NULL; + curnmp = NULL; *dsp = NULL; + *fdsp = NULL; + if (dspathp == NULL && curdspathp != NULL) + return (EPERM); + /* * Look up the MDS file shared locked. The lock will be upgraded * to an exclusive lock after any rw layouts have been returned. @@ -8124,84 +8024,99 @@ nfsrv_mdscopymr(char *mdspathp, char *dspathp, char *c } vp = nd.ni_vp; - /* - * Look up the current DS path and find the nfsdev structure for it. - */ - NFSD_DEBUG(4, "curmdsdev path=%s\n", curdspathp); - NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF, UIO_SYSSPACE, - curdspathp, p); - error = namei(&nd); - NFSD_DEBUG(4, "ds lookup=%d\n", error); - if (error != 0) { - vput(vp); - return (error); + if (curdspathp != NULL) { + /* + * Look up the current DS path and find the nfsdev structure for + * it. + */ + NFSD_DEBUG(4, "curmdsdev path=%s\n", curdspathp); + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF, + UIO_SYSSPACE, curdspathp, p); + error = namei(&nd); + NFSD_DEBUG(4, "ds lookup=%d\n", error); + if (error != 0) { + vput(vp); + return (error); + } + if (nd.ni_vp->v_type != VDIR) { + vput(nd.ni_vp); + vput(vp); + NFSD_DEBUG(4, "curdspath not dir\n"); + return (ENOTDIR); + } + if (strcmp(nd.ni_vp->v_mount->mnt_vfc->vfc_name, "nfs") != 0) { + vput(nd.ni_vp); + vput(vp); + NFSD_DEBUG(4, "curdspath not an NFS mount\n"); + return (ENXIO); + } + curnmp = VFSTONFS(nd.ni_vp->v_mount); + + /* Search the nfsdev list for a match. */ + NFSDDSLOCK(); + *fdsp = nfsv4_findmirror(curnmp); + NFSDDSUNLOCK(); + if (*fdsp == NULL) + curnmp = NULL; + if (curnmp == NULL) { + vput(nd.ni_vp); + vput(vp); + NFSD_DEBUG(4, "mdscopymr: no current ds\n"); + return (ENXIO); + } + curvp = nd.ni_vp; } - if (nd.ni_vp->v_type != VDIR) { - vput(nd.ni_vp); - vput(vp); - NFSD_DEBUG(4, "curdspath not dir\n"); - return (ENOTDIR); - } - if (strcmp(nd.ni_vp->v_mount->mnt_vfc->vfc_name, "nfs") != 0) { - vput(nd.ni_vp); - vput(vp); - NFSD_DEBUG(4, "curdspath not an NFS mount\n"); - return (ENXIO); - } - curnmp = VFSTONFS(nd.ni_vp->v_mount); - /* Search the nfsdev list for a match. */ - NFSDDSLOCK(); - if (nfsv4_findmirror(curnmp, NULL) == NULL) - curnmp = NULL; - NFSDDSUNLOCK(); - if (curnmp == NULL) { - vput(nd.ni_vp); - vput(vp); - NFSD_DEBUG(4, "mdscopymr: no current ds\n"); - return (ENXIO); + if (dspathp != NULL) { + /* Look up the nfsdev path and find the nfsdev structure. */ + NFSD_DEBUG(4, "mdsdev path=%s\n", dspathp); + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF, + UIO_SYSSPACE, dspathp, p); + error = namei(&nd); + NFSD_DEBUG(4, "ds lookup=%d\n", error); + if (error != 0) { + vput(vp); + if (curvp != NULL) + vput(curvp); + return (error); + } + if (nd.ni_vp->v_type != VDIR || nd.ni_vp == curvp) { + vput(nd.ni_vp); + vput(vp); + if (curvp != NULL) + vput(curvp); + NFSD_DEBUG(4, "dspath not dir\n"); + if (nd.ni_vp == curvp) + return (EPERM); + return (ENOTDIR); + } + if (strcmp(nd.ni_vp->v_mount->mnt_vfc->vfc_name, "nfs") != 0) { + vput(nd.ni_vp); + vput(vp); + if (curvp != NULL) + vput(curvp); + NFSD_DEBUG(4, "dspath not an NFS mount\n"); + return (ENXIO); + } + nmp = VFSTONFS(nd.ni_vp->v_mount); + + /* Search the nfsdev list for a match. */ + NFSDDSLOCK(); + *dsp = nfsv4_findmirror(nmp); + NFSDDSUNLOCK(); + if (*dsp == NULL) { + vput(nd.ni_vp); + vput(vp); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue May 29 12:19:30 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7441DF77C2C for ; Tue, 29 May 2018 12:19:30 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 293A986B5A; Tue, 29 May 2018 12:19:30 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0A5011BD7B; Tue, 29 May 2018 12:19:30 +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 w4TCJTKK095941; Tue, 29 May 2018 12:19:29 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4TCJT29095940; Tue, 29 May 2018 12:19:29 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805291219.w4TCJT29095940@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 29 May 2018 12:19:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334321 - projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Commit-Revision: 334321 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.26 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: Tue, 29 May 2018 12:19:30 -0000 Author: rmacklem Date: Tue May 29 12:19:29 2018 New Revision: 334321 URL: https://svnweb.freebsd.org/changeset/base/334321 Log: Fix up nfsd.c for distributed mirror handling. A new "-m" option is added to enable mirroring. The man page still needs to be updated. 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 Tue May 29 11:59:02 2018 (r334320) +++ projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c Tue May 29 12:19:29 2018 (r334321) @@ -59,7 +59,6 @@ static const char rcsid[] = #include #include #include -#include #include #include @@ -111,6 +110,7 @@ static struct option longopts[] = { { "minthreads", required_argument, &minthreads_set, 1 }, { "maxthreads", required_argument, &maxthreads_set, 1 }, { "pnfs", required_argument, NULL, 'p' }, + { "mirror", required_argument, NULL, 'm' }, { NULL, 0, NULL, 0} }; @@ -157,6 +157,8 @@ static void parse_dsserver(const char *, struct nfsd_n * -t - support tcp nfs clients * -u - support udp nfs clients * -e - forces it to run a server that supports nfsv4 + * -p - enable a pNFS service + * -m - set the mirroring level for a pNFS service * followed by "n" which is the number of nfsds' to fork off */ int @@ -185,16 +187,17 @@ main(int argc, char **argv) pid_t pid; struct nfsd_nfsd_args nfsdargs; + nfsdargs.mirrorcnt = 1; nfsdcnt = DEFNFSDCNT; unregister = reregister = tcpflag = maxsock = 0; bindanyflag = udpflag = connect_type_cnt = bindhostc = 0; - getopt_shortopts = "ah:n:rdtuep:"; + getopt_shortopts = "ah:n:rdtuep:m:"; getopt_usage = "usage:\n" " nfsd [-ardtue] [-h bindip]\n" " [-n numservers] [--minthreads #] [--maxthreads #]\n" " [-p/--pnfs dsserver0:/dsserver0-mounted-on-dir,...," - "dsserverN:/dsserverN-mounted-on-dir\n"; + "dsserverN:/dsserverN-mounted-on-dir] [-m mirrorlevel]\n"; while ((ch = getopt_long(argc, argv, getopt_shortopts, longopts, &longindex)) != -1) switch (ch) { @@ -232,6 +235,14 @@ main(int argc, char **argv) /* Parse out the DS server host names and mount pts. */ parse_dsserver(optarg, &nfsdargs); break; + case 'm': + /* Set the mirror level for a pNFS service. */ + i = atoi(optarg); + if (i < 2 || i > NFSDEV_MAXMIRRORS) + errx(1, "Mirror level out of range 2<-->%d", + NFSDEV_MAXMIRRORS); + nfsdargs.mirrorcnt = i; + break; case 0: lopt = longopts[longindex].name; if (!strcmp(lopt, "minthreads")) { @@ -1175,10 +1186,8 @@ 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], *cp3; int adsiz, dsaddrcnt, dshostcnt, dspathcnt, ecode, hostsiz, pathsiz; - int mirrorcnt, mirrorstrsiz, mirrorindex; - size_t dsaddrsiz, dshostsiz, dspathsiz, nfsprtsiz, mirrorsiz; + size_t dsaddrsiz, dshostsiz, dspathsiz, nfsprtsiz; struct addrinfo hints, *ai_tcp; struct sockaddr_in *sin; @@ -1202,38 +1211,20 @@ parse_dsserver(const char *optarg, struct nfsd_nfsd_ar dsaddr = malloc(dsaddrsiz); if (dsaddr == NULL) errx(1, "Out of memory"); - mirrorsiz = 1024; - mirrorcnt = 0; - mirror = malloc(mirrorsiz); - if (mirror == NULL) - errx(1, "Out of memory"); /* Put the NFS port# in "." form. */ snprintf(nfsprt, 9, ".%d.%d", 2049 >> 8, 2049 & 0xff); nfsprtsiz = strlen(nfsprt); ai_tcp = NULL; - 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, ':'); @@ -1294,20 +1285,6 @@ printf("pnfs path=%s\n", dsvol); strcpy(&dshost[dshostcnt], ai_tcp->ai_canonname); dshostcnt += hostsiz + 1; - /* Append this mirrorindex to mirror. */ - if (snprintf(mirrorstr, NFSDEV_MIRRORSTR + 1, "%d", - mirrorindex) > NFSDEV_MIRRORSTR) - errx(1, "Too many mirrors"); - mirrorstrsiz = strlen(mirrorstr); - if (mirrorcnt + mirrorstrsiz + 1 > mirrorsiz) { - mirrorsiz *= 2; - mirror = realloc(mirror, mirrorsiz); - if (mirror == NULL) - errx(1, "Out of memory"); - } - strcpy(&mirror[mirrorcnt], mirrorstr); - mirrorcnt += mirrorstrsiz + 1; - cp = cp2; } while (cp != NULL); @@ -1323,8 +1300,6 @@ printf("pnfs path=%s\n", dsvol); nfsdargp->dnshostlen = dshostcnt; nfsdargp->dspath = dspath; nfsdargp->dspathlen = dspathcnt; - nfsdargp->mirror = mirror; - nfsdargp->mirrorlen = mirrorcnt; freeaddrinfo(ai_tcp); } From owner-svn-src-projects@freebsd.org Tue May 29 12:25:34 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 153A0F78570 for ; Tue, 29 May 2018 12:25:34 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BE69687149; Tue, 29 May 2018 12:25:33 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9BF9D1BF0B; Tue, 29 May 2018 12:25:33 +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 w4TCPXvM000933; Tue, 29 May 2018 12:25:33 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4TCPXZp000932; Tue, 29 May 2018 12:25:33 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805291225.w4TCPXZp000932@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 29 May 2018 12:25:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334322 - projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Commit-Revision: 334322 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.26 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: Tue, 29 May 2018 12:25:34 -0000 Author: rmacklem Date: Tue May 29 12:25:33 2018 New Revision: 334322 URL: https://svnweb.freebsd.org/changeset/base/334322 Log: Get rid of an unused structure in nfsd.c that isn't in the head version. 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 Tue May 29 12:19:29 2018 (r334321) +++ projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c Tue May 29 12:25:33 2018 (r334322) @@ -114,14 +114,6 @@ static struct option longopts[] = { { NULL, 0, NULL, 0} }; -struct nfhret { - u_long stat; - long vers; - long auth; - long fhsize; - u_char nfh[NFS3_FHSIZE]; -}; - static void cleanup(int); static void child_cleanup(int); static void killchildren(void); From owner-svn-src-projects@freebsd.org Tue May 29 12:30:42 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 084CBF78A15 for ; Tue, 29 May 2018 12:30:42 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AE8A18757D; Tue, 29 May 2018 12:30:41 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8FB121BF1B; Tue, 29 May 2018 12:30:41 +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 w4TCUfWd001376; Tue, 29 May 2018 12:30:41 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4TCUfuL001375; Tue, 29 May 2018 12:30:41 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805291230.w4TCUfuL001375@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 29 May 2018 12:30:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334323 - projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Commit-Revision: 334323 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.26 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: Tue, 29 May 2018 12:30:42 -0000 Author: rmacklem Date: Tue May 29 12:30:41 2018 New Revision: 334323 URL: https://svnweb.freebsd.org/changeset/base/334323 Log: Get rid of two unused variables in nfsd.c. 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 Tue May 29 12:25:33 2018 (r334322) +++ projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.c Tue May 29 12:30:41 2018 (r334323) @@ -99,8 +99,6 @@ static int stablefd = -1; /* Fd for the stable restart static int backupfd; /* Fd for the backup stable restart file */ static const char *getopt_shortopts; static const char *getopt_usage; -static char *dshost = NULL; -static int dshostc = 0; static int minthreads_set; static int maxthreads_set; From owner-svn-src-projects@freebsd.org Tue May 29 12:43:04 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 74FECF7983D for ; Tue, 29 May 2018 12:43:04 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493C66805A; Tue, 29 May 2018 12:43:04 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2B0E41C24D; Tue, 29 May 2018 12:43:04 +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 w4TCh4uG010852; Tue, 29 May 2018 12:43:04 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4TCh4nA010851; Tue, 29 May 2018 12:43:04 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805291243.w4TCh4nA010851@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 29 May 2018 12:43:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334325 - projects/pnfs-planb-server/usr.bin/pnfsdscopymr X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/usr.bin/pnfsdscopymr X-SVN-Commit-Revision: 334325 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.26 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: Tue, 29 May 2018 12:43:04 -0000 Author: rmacklem Date: Tue May 29 12:43:03 2018 New Revision: 334325 URL: https://svnweb.freebsd.org/changeset/base/334325 Log: Fix up pnfsdscopymr.c for the distributed mirror handling. Also change the default to mirror to any other DS and add a "-r" option to specify the destination mirror DS. Add a new "-m" option to migrate data storage files between DSs. The man page still needs to be updated. Modified: projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c Modified: projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c ============================================================================== --- projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c Tue May 29 12:32:08 2018 (r334324) +++ projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c Tue May 29 12:43:03 2018 (r334325) @@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -40,6 +41,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include #include @@ -51,6 +54,12 @@ __FBSDID("$FreeBSD$"); static void usage(void); +static struct option longopts[] = { + { "migrate", required_argument, NULL, 'm' }, + { "mirror", required_argument, NULL, 'r' }, + { NULL, 0, NULL, 0 } +}; + /* * This program creates a copy of the file's (first argument) data on the * new/recovering DS mirror. If the file is already on the new/recovering @@ -67,152 +76,218 @@ main(int argc, char *argv[]) struct sockaddr_in *sin; struct sockaddr_in6 *sin6; ssize_t xattrsize; - int fnd, i, mirrorcnt, ret; + size_t mirlen; + int ch, fnd, fndzero, i, migrateit, mirrorcnt, mirrorit, ret; + int mirrorlevel; char host[MNAMELEN + NI_MAXHOST + 2], *cp; - if (argc != 4) - usage(); if (geteuid() != 0) errx(1, "Must be run as root/su"); + mirrorit = migrateit = 0; + pnfsdarg.dspath = pnfsdarg.curdspath = NULL; + while ((ch = getopt_long(argc, argv, "m:r:", longopts, NULL)) != -1) { + switch (ch) { + case 'm': + /* Migrate the file from the second DS to the first. */ + if (mirrorit != 0) + errx(1, "-r and -m are mutually exclusive"); + migrateit = 1; + pnfsdarg.curdspath = optarg; + break; + case 'r': + /* Mirror the file on the specified DS. */ + if (migrateit != 0) + errx(1, "-r and -m are mutually exclusive"); + mirrorit = 1; + pnfsdarg.dspath = optarg; + break; + default: + usage(); + } + } + argc -= optind; + argv += optind; + if (migrateit != 0) { + if (argc != 2) + usage(); + pnfsdarg.dspath = *argv++; + } else if (argc != 1) + usage(); + + /* Get the pNFS service's mirror level. */ + mirlen = sizeof(mirrorlevel); + ret = sysctlbyname("vfs.nfs.pnfsmirror", &mirrorlevel, &mirlen, + NULL, 0); + if (ret < 0) + errx(1, "Can't get vfs.nfs.pnfsmirror"); + + if (pnfsdarg.dspath != NULL && pnfsdarg.curdspath != NULL && + strcmp(pnfsdarg.dspath, pnfsdarg.curdspath) == 0) + errx(1, "Can't migrate to same server"); + /* * The host address and directory where the data storage file is * located is in the extended attribute "pnfsd.dsfile". */ - xattrsize = extattr_get_file(argv[1], EXTATTR_NAMESPACE_SYSTEM, + xattrsize = extattr_get_file(*argv, EXTATTR_NAMESPACE_SYSTEM, "pnfsd.dsfile", dsfile, sizeof(dsfile)); mirrorcnt = xattrsize / sizeof(struct pnfsdsfile); if (mirrorcnt < 1 || xattrsize != mirrorcnt * sizeof(struct pnfsdsfile)) - errx(1, "Can't get extattr pnfsd.dsfile for %s", argv[1]); + errx(1, "Can't get extattr pnfsd.dsfile for %s", *argv); - /* Check the second argument to see that it is an NFS mount point. */ - if (stat(argv[2], &sb) < 0) - errx(1, "Can't stat %s", argv[2]); - if (!S_ISDIR(sb.st_mode)) - errx(1, "%s is not a directory", argv[2]); - if (statfs(argv[2], &sf) < 0) - errx(1, "Can't fsstat %s", argv[2]); - if (strcmp(sf.f_fstypename, "nfs") != 0) - errx(1, "%s is not an NFS mount", argv[2]); - if (strcmp(sf.f_mntonname, argv[2]) != 0) - errx(1, "%s is not the mounted-on dir for the new DS", argv[2]); - - /* - * Check the IP address of the NFS server against the entrie(s) in - * the extended attribute. - */ - strlcpy(host, sf.f_mntfromname, sizeof(host)); - cp = strchr(host, ':'); - if (cp == NULL) - errx(1, "No : in mount %s", host); - *cp = '\0'; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - if (getaddrinfo(host, NULL, &hints, &res) != 0) - errx(1, "Can't get address for %s", host); + /* See if there is a 0.0.0.0 entry. */ + fndzero = 0; for (i = 0; i < mirrorcnt; i++) { - nres = res; - while (nres != NULL) { - if (dsfile[i].dsf_sin.sin_family == nres->ai_family) { - /* - * If there is already an entry for this - * DS, just exit(0), since copying isn't - * required. - */ - if (nres->ai_family == AF_INET) { - sin = (struct sockaddr_in *) - nres->ai_addr; - if (sin->sin_addr.s_addr == - dsfile[i].dsf_sin.sin_addr.s_addr) - exit(0); - } else if (nres->ai_family == AF_INET6) { - sin6 = (struct sockaddr_in6 *) - nres->ai_addr; - if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, - &dsfile[i].dsf_sin6.sin6_addr)) - exit(0); + if (dsfile[i].dsf_sin.sin_family == AF_INET && + dsfile[i].dsf_sin.sin_addr.s_addr == 0) + fndzero = 1; + } + + /* If already mirrored for default case, just exit(0); */ + if (mirrorit == 0 && migrateit == 0 && (mirrorlevel < 2 || + (fndzero == 0 && mirrorcnt >= mirrorlevel) || + (fndzero != 0 && mirrorcnt > mirrorlevel))) + exit(0); + + /* For the "-r" case, there must be a 0.0.0.0 entry. */ + if (mirrorit != 0 && (fndzero == 0 || mirrorlevel < 2 || + mirrorcnt < 2 || mirrorcnt > mirrorlevel)) + exit(0); + + /* For pnfsdarg.dspath set, if it is already in list, just exit(0); */ + if (pnfsdarg.dspath != NULL) { + /* Check the dspath to see that it's an NFS mount. */ + if (stat(pnfsdarg.dspath, &sb) < 0) + errx(1, "Can't stat %s", pnfsdarg.dspath); + if (!S_ISDIR(sb.st_mode)) + errx(1, "%s is not a directory", pnfsdarg.dspath); + if (statfs(pnfsdarg.dspath, &sf) < 0) + errx(1, "Can't fsstat %s", pnfsdarg.dspath); + if (strcmp(sf.f_fstypename, "nfs") != 0) + errx(1, "%s is not an NFS mount", pnfsdarg.dspath); + if (strcmp(sf.f_mntonname, pnfsdarg.dspath) != 0) + errx(1, "%s is not the mounted-on dir for the new DS", + pnfsdarg.dspath); + + /* + * Check the IP address of the NFS server against the entrie(s) + * in the extended attribute. + */ + strlcpy(host, sf.f_mntfromname, sizeof(host)); + cp = strchr(host, ':'); + if (cp == NULL) + errx(1, "No : in mount %s", host); + *cp = '\0'; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + if (getaddrinfo(host, NULL, &hints, &res) != 0) + errx(1, "Can't get address for %s", host); + for (i = 0; i < mirrorcnt; i++) { + nres = res; + while (nres != NULL) { + if (dsfile[i].dsf_sin.sin_family == + nres->ai_family) { + /* + * If there is already an entry for this + * DS, just exit(0), since copying isn't + * required. + */ + if (nres->ai_family == AF_INET) { + sin = (struct sockaddr_in *) + nres->ai_addr; + if (sin->sin_addr.s_addr == + dsfile[i].dsf_sin.sin_addr.s_addr) + exit(0); + } else if (nres->ai_family == AF_INET6) { + sin6 = (struct sockaddr_in6 *) + nres->ai_addr; + if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, + &dsfile[i].dsf_sin6.sin6_addr)) + exit(0); + } } + nres = nres->ai_next; } - nres = nres->ai_next; } + freeaddrinfo(res); } - freeaddrinfo(res); - /* Check the third argument to see that it is an NFS mount point. */ - if (stat(argv[3], (struct stat *)&sb) < 0) - errx(1, "Can't stat %s", argv[3]); - if (!S_ISDIR(sb.st_mode)) - errx(1, "%s is not a directory", argv[3]); - if (statfs(argv[3], (struct statfs *)&sf) < 0) - errx(1, "Can't fsstat %s", argv[3]); - if (strcmp(sf.f_fstypename, "nfs") != 0) - errx(1, "%s is not an NFS mount", argv[3]); - if (strcmp(sf.f_mntonname, argv[3]) != 0) - errx(1, "%s is not the mounted-on dir of the cur DS", argv[3]); - - /* - * Check the IP address of the NFS server against the entrie(s) in - * the extended attribute. - */ - strlcpy(host, sf.f_mntfromname, sizeof(host)); - cp = strchr(host, ':'); - if (cp == NULL) - errx(1, "No : in mount %s", host); - *cp = '\0'; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - if (getaddrinfo(host, NULL, &hints, &res) != 0) - errx(1, "Can't get address for %s", host); - fnd = 0; - for (i = 0; i < mirrorcnt && fnd == 0; i++) { - nres = res; - while (nres != NULL) { - if (dsfile[i].dsf_sin.sin_family == nres->ai_family) { - /* - * If there is already an entry for this - * DS, just exit(0), since copying isn't - * required. - */ - if (nres->ai_family == AF_INET) { - sin = (struct sockaddr_in *) - nres->ai_addr; - if (sin->sin_addr.s_addr == - dsfile[i].dsf_sin.sin_addr.s_addr) { - fnd = 1; - break; + /* For "-m", the pnfsdarg.curdspath must be in the list. */ + if (pnfsdarg.curdspath != NULL) { + /* Check pnfsdarg.curdspath to see that it's an NFS mount. */ + if (stat(pnfsdarg.curdspath, &sb) < 0) + errx(1, "Can't stat %s", pnfsdarg.curdspath); + if (!S_ISDIR(sb.st_mode)) + errx(1, "%s is not a directory", pnfsdarg.curdspath); + if (statfs(pnfsdarg.curdspath, &sf) < 0) + errx(1, "Can't fsstat %s", pnfsdarg.curdspath); + if (strcmp(sf.f_fstypename, "nfs") != 0) + errx(1, "%s is not an NFS mount", pnfsdarg.curdspath); + if (strcmp(sf.f_mntonname, pnfsdarg.curdspath) != 0) + errx(1, "%s is not the mounted-on dir of the cur DS", + pnfsdarg.curdspath); + + /* + * Check the IP address of the NFS server against the entrie(s) + * in the extended attribute. + */ + strlcpy(host, sf.f_mntfromname, sizeof(host)); + cp = strchr(host, ':'); + if (cp == NULL) + errx(1, "No : in mount %s", host); + *cp = '\0'; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + if (getaddrinfo(host, NULL, &hints, &res) != 0) + errx(1, "Can't get address for %s", host); + fnd = 0; + for (i = 0; i < mirrorcnt && fnd == 0; i++) { + nres = res; + while (nres != NULL) { + if (dsfile[i].dsf_sin.sin_family == + nres->ai_family) { + /* + * Note if the entry is found. + */ + if (nres->ai_family == AF_INET) { + sin = (struct sockaddr_in *) + nres->ai_addr; + if (sin->sin_addr.s_addr == + dsfile[i].dsf_sin.sin_addr.s_addr) { + fnd = 1; + break; + } + } else if (nres->ai_family == AF_INET6) { + sin6 = (struct sockaddr_in6 *) + nres->ai_addr; + if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, + &dsfile[i].dsf_sin6.sin6_addr)) { + fnd = 1; + break; + } } - } else if (nres->ai_family == AF_INET6) { - sin6 = (struct sockaddr_in6 *) - nres->ai_addr; - if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, - &dsfile[i].dsf_sin6.sin6_addr)) { - fnd = 1; - break; - } } + nres = nres->ai_next; } - nres = nres->ai_next; } + freeaddrinfo(res); + /* + * If not found just exit(0), since it is not on the + * source DS. + */ + if (fnd == 0) + exit(0); } - freeaddrinfo(res); - /* - * If not found, just exit(0) since this file isn't stored on the - * current mirror and, therefore, isn't stored on this mirror set. - */ - if (fnd == 0) - exit(0); /* Do the copy via the nfssvc() syscall. */ pnfsdarg.op = PNFSDOP_COPYMR; - pnfsdarg.mdspath = argv[1]; - pnfsdarg.dspath = argv[2]; - pnfsdarg.curdspath = argv[3]; + pnfsdarg.mdspath = *argv; ret = nfssvc(NFSSVC_PNFSDS, &pnfsdarg); if (ret < 0 && errno != EEXIST) - err(1, "Copymr failed args %s, %s, %s", argv[1], argv[2], - argv[3]); + err(1, "Copymr failed args %s, %s", argv[1], argv[2]); exit(0); } @@ -220,8 +295,9 @@ static void usage(void) { - fprintf(stderr, "pnfsdscopymr " - " \n"); + fprintf(stderr, "pnfsdscopymr [-r recovered-DS-mounted-on-path] " + "[-m soure-DS-mounted-on-path destination-DS-mounted-on-path] " + "mds-filename"); exit(1); } From owner-svn-src-projects@freebsd.org Tue May 29 20:39:55 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EF246F74371 for ; Tue, 29 May 2018 20:39:54 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9A41D7DBA1; Tue, 29 May 2018 20:39:54 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7BEDF20F14; Tue, 29 May 2018 20:39:54 +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 w4TKds0j050085; Tue, 29 May 2018 20:39:54 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4TKdsWk050084; Tue, 29 May 2018 20:39:54 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805292039.w4TKdsWk050084@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 29 May 2018 20:39:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334352 - projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Commit-Revision: 334352 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.26 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: Tue, 29 May 2018 20:39:55 -0000 Author: rmacklem Date: Tue May 29 20:39:54 2018 New Revision: 334352 URL: https://svnweb.freebsd.org/changeset/base/334352 Log: Lock the directory LK_EXCLUSIVE for the DS file removal. Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Tue May 29 20:30:46 2018 (r334351) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Tue May 29 20:39:54 2018 (r334352) @@ -3438,7 +3438,7 @@ nfssvc_nfsd(struct thread *td, struct nfssvc_args *uap vput(nvp); if (fds != NULL && error == 0) { curdvp = fds->nfsdev_dsdir[pf->dsf_dir]; - ret = vn_lock(curdvp, LK_SHARED); + ret = vn_lock(curdvp, LK_EXCLUSIVE); if (ret == 0) { nfsrv_dsremove(curdvp, fname, td->td_ucred, td); From owner-svn-src-projects@freebsd.org Thu May 31 02:25:48 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9AECBEF6F4C for ; Thu, 31 May 2018 02:25:48 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4976068DDD; Thu, 31 May 2018 02:25:48 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2A94913E06; Thu, 31 May 2018 02:25:48 +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 w4V2PmF9058045; Thu, 31 May 2018 02:25:48 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4V2Pk1w058039; Thu, 31 May 2018 02:25:46 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805310225.w4V2Pk1w058039@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Thu, 31 May 2018 02:25:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334411 - in projects/pnfs-planb-server/sys/fs: nfs nfsclient nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/pnfs-planb-server/sys/fs: nfs nfsclient nfsserver X-SVN-Commit-Revision: 334411 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.26 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: Thu, 31 May 2018 02:25:48 -0000 Author: rmacklem Date: Thu May 31 02:25:46 2018 New Revision: 334411 URL: https://svnweb.freebsd.org/changeset/base/334411 Log: Fix the handling of statfs so that the pNFS service reports the sum of the blocks for the DSs to the NFS clients instead of the block counts for the MDS file system. Reported by: james.rose@framestore.com Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clrpcops.c projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clstate.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Thu May 31 02:22:40 2018 (r334410) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Thu May 31 02:25:46 2018 (r334411) @@ -2068,7 +2068,8 @@ APPLESTATIC int nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp, NFSACL_T *saclp, struct vattr *vap, fhandle_t *fhp, int rderror, nfsattrbit_t *attrbitp, struct ucred *cred, NFSPROC_T *p, int isdgram, - int reterr, int supports_nfsv4acls, int at_root, uint64_t mounted_on_fileno) + int reterr, int supports_nfsv4acls, int at_root, uint64_t mounted_on_fileno, + struct statfs *pnfssf) { int bitpos, retnum = 0; u_int32_t *tl; @@ -2470,25 +2471,45 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount break; case NFSATTRBIT_SPACEAVAIL: NFSM_BUILD(tl, u_int32_t *, NFSX_HYPER); - if (priv_check_cred(cred, PRIV_VFS_BLOCKRESERVE, 0)) - uquad = (u_int64_t)fs->f_bfree; + if (priv_check_cred(cred, PRIV_VFS_BLOCKRESERVE, 0)) { + if (pnfssf != NULL) + uquad = (u_int64_t)pnfssf->f_bfree; + else + uquad = (u_int64_t)fs->f_bfree; + } else { + if (pnfssf != NULL) + uquad = (u_int64_t)pnfssf->f_bavail; + else + uquad = (u_int64_t)fs->f_bavail; + } + if (pnfssf != NULL) + uquad *= pnfssf->f_bsize; else - uquad = (u_int64_t)fs->f_bavail; - uquad *= fs->f_bsize; + uquad *= fs->f_bsize; txdr_hyper(uquad, tl); retnum += NFSX_HYPER; break; case NFSATTRBIT_SPACEFREE: NFSM_BUILD(tl, u_int32_t *, NFSX_HYPER); - uquad = (u_int64_t)fs->f_bfree; - uquad *= fs->f_bsize; + if (pnfssf != NULL) { + uquad = (u_int64_t)pnfssf->f_bfree; + uquad *= pnfssf->f_bsize; + } else { + uquad = (u_int64_t)fs->f_bfree; + uquad *= fs->f_bsize; + } txdr_hyper(uquad, tl); retnum += NFSX_HYPER; break; case NFSATTRBIT_SPACETOTAL: NFSM_BUILD(tl, u_int32_t *, NFSX_HYPER); - uquad = (u_int64_t)fs->f_blocks; - uquad *= fs->f_bsize; + if (pnfssf != NULL) { + uquad = (u_int64_t)pnfssf->f_blocks; + uquad *= pnfssf->f_bsize; + } else { + uquad = (u_int64_t)fs->f_blocks; + uquad *= fs->f_bsize; + } txdr_hyper(uquad, tl); retnum += NFSX_HYPER; break; Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Thu May 31 02:22:40 2018 (r334410) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h Thu May 31 02:25:46 2018 (r334411) @@ -372,7 +372,7 @@ void nfsrv_wcc(struct nfsrv_descript *, int, struct nf struct nfsvattr *); int nfsv4_fillattr(struct nfsrv_descript *, struct mount *, vnode_t, NFSACL_T *, struct vattr *, fhandle_t *, int, nfsattrbit_t *, - struct ucred *, NFSPROC_T *, int, int, int, int, uint64_t); + struct ucred *, NFSPROC_T *, int, int, int, int, uint64_t, struct statfs *); void nfsrv_fillattr(struct nfsrv_descript *, struct nfsvattr *); void nfsrv_adj(mbuf_t, int, int); void nfsrv_postopattr(struct nfsrv_descript *, int, struct nfsvattr *); Modified: projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c Thu May 31 02:22:40 2018 (r334410) +++ projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clport.c Thu May 31 02:25:46 2018 (r334411) @@ -931,7 +931,7 @@ nfscl_fillsattr(struct nfsrv_descript *nd, struct vatt if (vap->va_mtime.tv_sec != VNOVAL) NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_TIMEMODIFYSET); (void) nfsv4_fillattr(nd, vp->v_mount, vp, NULL, vap, NULL, 0, - &attrbits, NULL, NULL, 0, 0, 0, 0, (uint64_t)0); + &attrbits, NULL, NULL, 0, 0, 0, 0, (uint64_t)0, NULL); break; } } Modified: projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clrpcops.c Thu May 31 02:22:40 2018 (r334410) +++ projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clrpcops.c Thu May 31 02:25:46 2018 (r334411) @@ -4619,7 +4619,7 @@ nfsrpc_setaclrpc(vnode_t vp, struct ucred *cred, NFSPR NFSZERO_ATTRBIT(&attrbits); NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_ACL); (void) nfsv4_fillattr(nd, vnode_mount(vp), vp, aclp, NULL, NULL, 0, - &attrbits, NULL, NULL, 0, 0, 0, 0, (uint64_t)0); + &attrbits, NULL, NULL, 0, 0, 0, 0, (uint64_t)0, NULL); error = nfscl_request(nd, vp, p, cred, stuff); if (error) return (error); Modified: projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clstate.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clstate.c Thu May 31 02:22:40 2018 (r334410) +++ projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clstate.c Thu May 31 02:25:46 2018 (r334411) @@ -3374,7 +3374,7 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p) if (!error) (void) nfsv4_fillattr(nd, NULL, NULL, NULL, &va, NULL, 0, &rattrbits, NULL, p, 0, 0, 0, 0, - (uint64_t)0); + (uint64_t)0, NULL); break; case NFSV4OP_CBRECALL: NFSCL_DEBUG(4, "cbrecall\n"); Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Thu May 31 02:22:40 2018 (r334410) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Thu May 31 02:25:46 2018 (r334411) @@ -131,6 +131,7 @@ static int nfsrv_pnfslookupds(struct vnode *, struct v static void nfsrv_pnfssetfh(struct vnode *, struct pnfsdsfile *, struct vnode *, NFSPROC_T *); static int nfsrv_dsremove(struct vnode *, char *, struct ucred *, NFSPROC_T *); +static int nfsrv_pnfsstatfs(struct statfs *); int nfs_pnfsio(task_fn_t *, void *); @@ -1567,10 +1568,27 @@ nfsvno_fsync(struct vnode *vp, u_int64_t off, int cnt, int nfsvno_statfs(struct vnode *vp, struct statfs *sf) { + struct statfs *tsf; int error; + tsf = NULL; + if (nfsrv_devidcnt > 0) { + /* For a pNFS service, get the DS numbers. */ + tsf = malloc(sizeof(*tsf), M_TEMP, M_WAITOK | M_ZERO); + error = nfsrv_pnfsstatfs(tsf); + if (error != 0) { + free(tsf, M_TEMP); + tsf = NULL; + } + } error = VFS_STATFS(vp->v_mount, sf); if (error == 0) { + if (tsf != NULL) { + sf->f_blocks = tsf->f_blocks; + sf->f_bavail = tsf->f_bavail; + sf->f_bfree = tsf->f_bfree; + sf->f_bsize = tsf->f_bsize; + } /* * Since NFS handles these values as unsigned on the * wire, there is no way to represent negative values, @@ -1583,6 +1601,7 @@ nfsvno_statfs(struct vnode *vp, struct statfs *sf) if (sf->f_ffree < 0) sf->f_ffree = 0; } + free(tsf, M_TEMP); NFSEXITCODE(error); return (error); } @@ -1728,11 +1747,25 @@ nfsvno_fillattr(struct nfsrv_descript *nd, struct moun struct ucred *cred, struct thread *p, int isdgram, int reterr, int supports_nfsv4acls, int at_root, uint64_t mounted_on_fileno) { + struct statfs *sf; int error; + sf = NULL; + if (nfsrv_devidcnt > 0 && + (NFSISSET_ATTRBIT(attrbitp, NFSATTRBIT_SPACEAVAIL) || + NFSISSET_ATTRBIT(attrbitp, NFSATTRBIT_SPACEFREE) || + NFSISSET_ATTRBIT(attrbitp, NFSATTRBIT_SPACETOTAL))) { + sf = malloc(sizeof(*sf), M_TEMP, M_WAITOK | M_ZERO); + error = nfsrv_pnfsstatfs(sf); + if (error != 0) { + free(sf, M_TEMP); + sf = NULL; + } + } error = nfsv4_fillattr(nd, mp, vp, NULL, &nvap->na_vattr, fhp, rderror, attrbitp, cred, p, isdgram, reterr, supports_nfsv4acls, at_root, - mounted_on_fileno); + mounted_on_fileno, sf); + free(sf, M_TEMP); NFSEXITCODE2(0, nd); return (error); } @@ -5168,7 +5201,7 @@ nfsrv_setacldsdorpc(fhandle_t *fhp, struct ucred *cred * the same type (VREG). */ nfsv4_fillattr(nd, NULL, vp, aclp, NULL, NULL, 0, &attrbits, NULL, - NULL, 0, 0, 0, 0, 0); + NULL, 0, 0, 0, 0, 0, NULL); error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL); if (error != 0) { @@ -5436,6 +5469,78 @@ nfsrv_killrpcs(struct nfsmount *nmp) * called. */ newnfs_nmcancelreqs(nmp); +} + +/* + * Sum up the statfs info for each of the DSs, so that the client will + * receive the total for all DSs. + */ +static int +nfsrv_pnfsstatfs(struct statfs *sf) +{ + struct statfs *tsf; + struct nfsdevice *ds; + struct vnode **dvpp, **tdvpp, *dvp; + uint64_t tot; + int cnt, error = 0, i; + + if (nfsrv_devidcnt <= 0) + return (ENXIO); + dvpp = mallocarray(nfsrv_devidcnt, sizeof(*dvpp), M_TEMP, M_WAITOK); + tsf = malloc(sizeof(*tsf), M_TEMP, M_WAITOK); + + /* Get an array of the dvps for the DSs. */ + tdvpp = dvpp; + i = 0; + NFSDDSLOCK(); + TAILQ_FOREACH(ds, &nfsrv_devidhead, nfsdev_list) { + if (ds->nfsdev_nmp != NULL) { + if (++i > nfsrv_devidcnt) + break; + *tdvpp++ = ds->nfsdev_dvp; + } + } + NFSDDSUNLOCK(); + cnt = i; + + /* Do a VFS_STATFS() for each of the DSs and sum them up. */ + tdvpp = dvpp; + for (i = 0; i < cnt && error == 0; i++) { + dvp = *tdvpp++; + error = VFS_STATFS(dvp->v_mount, tsf); + if (error == 0) { + if (sf->f_bsize == 0) { + if (tsf->f_bsize > 0) + sf->f_bsize = tsf->f_bsize; + else + sf->f_bsize = 8192; + } + if (tsf->f_blocks > 0) { + if (sf->f_bsize != tsf->f_bsize) { + tot = tsf->f_blocks * tsf->f_bsize; + sf->f_blocks += (tot / sf->f_bsize); + } else + sf->f_blocks += tsf->f_blocks; + } + if (tsf->f_bfree > 0) { + if (sf->f_bsize != tsf->f_bsize) { + tot = tsf->f_bfree * tsf->f_bsize; + sf->f_bfree += (tot / sf->f_bsize); + } else + sf->f_bfree += tsf->f_bfree; + } + if (tsf->f_bavail > 0) { + if (sf->f_bsize != tsf->f_bsize) { + tot = tsf->f_bavail * tsf->f_bsize; + sf->f_bavail += (tot / sf->f_bsize); + } else + sf->f_bavail += tsf->f_bavail; + } + } + } + free(tsf, M_TEMP); + free(dvpp, M_TEMP); + return (error); } extern int (*nfsd_call_nfsd)(struct thread *, struct nfssvc_args *); From owner-svn-src-projects@freebsd.org Thu May 31 21:22:10 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3638EEFD2DB for ; Thu, 31 May 2018 21:22:10 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DC6BE806B5; Thu, 31 May 2018 21:22:09 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BEA321FA5F; Thu, 31 May 2018 21:22:09 +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 w4VLM9KD034342; Thu, 31 May 2018 21:22:09 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4VLM9hu034341; Thu, 31 May 2018 21:22:09 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805312122.w4VLM9hu034341@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Thu, 31 May 2018 21:22:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334446 - projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Commit-Revision: 334446 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.26 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: Thu, 31 May 2018 21:22:10 -0000 Author: rmacklem Date: Thu May 31 21:22:09 2018 New Revision: 334446 URL: https://svnweb.freebsd.org/changeset/base/334446 Log: Update nfsd.8 to reflect the recent change to a distributed mirroring model. Modified: projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.8 Modified: projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.8 ============================================================================== --- projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.8 Thu May 31 20:22:47 2018 (r334445) +++ projects/pnfs-planb-server/usr.sbin/nfsd/nfsd.8 Thu May 31 21:22:09 2018 (r334446) @@ -28,7 +28,7 @@ .\" @(#)nfsd.8 8.4 (Berkeley) 3/29/95 .\" $FreeBSD$ .\" -.Dd April 25, 2015 +.Dd May 31, 2018 .Dt NFSD 8 .Os .Sh NAME @@ -42,6 +42,7 @@ server .Op Fl n Ar num_servers .Op Fl h Ar bindip .Op Fl p Ar pnfs_setup +.Op Fl m Ar mirror_level .Op Fl Fl maxthreads Ar max_threads .Op Fl Fl minthreads Ar min_threads .Sh DESCRIPTION @@ -114,7 +115,7 @@ as a Data Server (DS) for it to use. .Pp The .Ar pnfs_setup -string is a set of fields separated by ',' and '#' characters: +string is a set of fields separated by ',' characters: .Bl -tag -width Ds Each of these fields specifies one Data Server. It consists of a server hostname, followed by a ':' @@ -131,25 +132,24 @@ Would specify two DS servers called nfsv4-data0 and nf the data storage component of the pNFS service. The directories "/data0" and "/data1" are where the data storage servers exported storage directories are mounted on this system (which will act as the MDS). +.El +.It Fl m Ar mirror_level +This option is only meaningful when used with the +.Fl p +option. +It specifies the ``mirror_level'', which defines how many of the DSs will +have a copy of a file's data storage file. +The default of one implies no mirroring of data storage files on the DSs. +The ``mirror_level'' would normally be set to 2 to enable mirroring, but +can be as high as NFSDEV_MAXMIRRORS. .Pp -If the fields are separated by the '#' character, it indicates that these -DSs are to be configured as a mirrored set. -For example: -.sp -nfsv4-data0:/data0#nfsv4-data1:/data1,nfsv4-data2:/data2#nfsv4-data3:/data3 -.sp -Would specify two mirrored pairs of DSs, with nfsv4-data0 plus nfsv4-data1 -comprising one mirrored pair and nfsv4-data2 plus nfsv4-data3 comprising -the other mirrored pair. -.Pp -If there are mirrored sets of DSs, the server must use the Flexible File +If mirroring is enabled, the server must use the Flexible File layout. -If there are no mirrored sets of DSs, the server will use the File layout +If mirroring is not enabled, the server will use the File layout by default, but this default can be changed to the Flexible File layout if the .Xr sysctl 1 vfs.nfsd.default_flexfile is set non-zero. -.El .It Fl t Serve .Tn TCP NFS @@ -288,3 +288,12 @@ you must kill and then restart it, after the .Xr gssd 8 is running. +.Pp +If mirroring is enabled via the +.Fl m +option and there are Linux clients doing NFSv4.1 mounts, those clients +need to be patched to support the ``tightly coupled'' variant of +the Flexible File layout or the +.Xr sysctl 1 +vfs.nfsd.flexlinuxhack +must be set on the MDS as a workaround. From owner-svn-src-projects@freebsd.org Sat Jun 2 20:11:30 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D9A81FE0D7C for ; Sat, 2 Jun 2018 20:11:29 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8BE4375484; Sat, 2 Jun 2018 20:11:29 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6D1AA14876; Sat, 2 Jun 2018 20:11:29 +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 w52KBTEE064287; Sat, 2 Jun 2018 20:11:29 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w52KBTni064286; Sat, 2 Jun 2018 20:11:29 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201806022011.w52KBTni064286@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sat, 2 Jun 2018 20:11:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334536 - projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/usr.sbin/nfsd X-SVN-Commit-Revision: 334536 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.26 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: Sat, 02 Jun 2018 20:11:30 -0000 Author: rmacklem Date: Sat Jun 2 20:11:28 2018 New Revision: 334536 URL: https://svnweb.freebsd.org/changeset/base/334536 Log: Update the nfsv4 man page to include a paragraph on pNFS. Modified: projects/pnfs-planb-server/usr.sbin/nfsd/nfsv4.4 Modified: projects/pnfs-planb-server/usr.sbin/nfsd/nfsv4.4 ============================================================================== --- projects/pnfs-planb-server/usr.sbin/nfsd/nfsv4.4 Sat Jun 2 19:17:11 2018 (r334535) +++ projects/pnfs-planb-server/usr.sbin/nfsd/nfsv4.4 Sat Jun 2 20:11:28 2018 (r334536) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 1, 2013 +.Dd June 2, 2018 .Dt NFSV4 4 .Os .Sh NAME @@ -34,7 +34,8 @@ The NFS client and server provides support for the .Tn NFSv4 specification; see -.%T "Network File System (NFS) Version 4 Protocol RFC 3530" . +.%T "Network File System (NFS) Version 4 Protocol RFC 7530" and +.%T "Network File System (NFS) Version 4 Minor Version 1 Protocol RFC 5661" . The protocol is somewhat similar to NFS Version 3, but differs in significant ways. It uses a single compound RPC that concatenates operations to-gether. @@ -74,6 +75,7 @@ It provides several optional features not present in N - Referrals, which redirect subtrees to other servers (not yet implemented) - Delegations, which allow a client to operate on a file locally +- pNFS, where I/O operations are separated from Metadata operations .Ed .Pp The @@ -115,8 +117,8 @@ multiple server file systems, although not all clients this. .Pp .Nm -uses names for users and groups instead of numbers. -On the wire, they +uses strings for users and groups instead of numbers. +On the wire, these strings can either have the numbers in the string or take the form: .sp .Bd -literal -offset indent -compact @@ -136,15 +138,37 @@ Under FreeBSD, the mapping daemon is called .Xr nfsuserd 8 and has a command line option that overrides the domain component of the machine's hostname. -For use of +For use of this form of string on .Nm , either client or server, this daemon must be running. -If this ``'' is not set correctly or the daemon is not running, ``ls -l'' will typically +.Pp +The form where the numbers are in the strings can only be used for AUTH_SYS. +To configure your systems this way, the +.Xr nfsuserd 8 +daemon does not need to be running on the server, but the following sysctls need to be +set to 1 on the server. +.sp +.Bd -literal -offset indent -compact +vfs.nfs.enable_uidtostring +vfs.nfsd.enable_stringtouid +.Ed +.sp +On the client, the sysctl +.sp +.Bd -literal -offset indent -compact +vfs.nfs.enable_uidtostring +.Ed +.sp +must be set to 1 and the +.Xr nfsuserd 8 +daemon does not need to be running. +.Pp +If these strings are not configured correctly, ``ls -l'' will typically report a lot of ``nobody'' and ``nogroup'' ownerships. .Pp Although uid/gid numbers are no longer used in the .Nm -protocol, they will still be in the RPC authentication fields when +protocol except optionally in the above strings, they will still be in the RPC authentication fields when using AUTH_SYS (sec=sys), which is the default. As such, in this case both the user/group name and number spaces must be consistent between the client and server. @@ -156,24 +180,24 @@ will go on the wire. .Sh SERVER SETUP To set up the NFS server that supports .Nm , -you will need to either set the variables in +you will need to set the variables in .Xr rc.conf 5 as follows: .sp .Bd -literal -offset indent -compact nfs_server_enable="YES" nfsv4_server_enable="YES" +.Ed +.sp +plus +.sp +.Bd -literal -offset indent -compact nfsuserd_enable="YES" .Ed .sp -or start -.Xr mountd 8 -and -.Xr nfsd 8 -without the ``-o'' option, which would force use of the old server. -The -.Xr nfsuserd 8 -daemon must also be running. +if the server is using the ``@'' form of user/group strings or +is using the ``-manage-gids'' option for +.Xr nfsuserd 8 . .Pp You will also need to add at least one ``V4:'' line to the .Xr exports 5 @@ -232,7 +256,7 @@ plus set ``tcp'' and .Pp The .Xr nfsuserd 8 -must be running, as above. +must be running if name<->uid/gid mapping is being used, as above. Also, since an .Nm mount uses the host uuid to identify the client uniquely to the server, @@ -255,7 +279,7 @@ daemon to handle client side callbacks. This will occur if .sp .Bd -literal -offset indent -compact -nfsuserd_enable="YES" +nfsuserd_enable="YES" <-- If name<->uid/gid mapping is being used. nfscbd_enable="YES" .Ed .sp @@ -265,7 +289,7 @@ are set in Without a functioning callback path, a server will never issue Delegations to a client. .sp -By default, the callback address will be set to the IP address acquired via +For NFSv4.0, by default, the callback address will be set to the IP address acquired via rtalloc() in the kernel and port# 7745. To override the default port#, a command line option for .Xr nfscbd 8 @@ -282,6 +306,10 @@ N.N.N.N.N.N where the first 4 Ns are the host IP address and the last two are the port# in network byte order (all decimal #s in the range 0-255). .Pp +For NFSv4.1, the callback path (called a backchannel) uses the same TCP connection as the mount, +so none of the above applies and should work through gateways without +any issues. +.Pp To build a kernel with the client that supports .Nm linked into it, the option @@ -308,6 +336,23 @@ It occurs when an nfsd thread tries to do an NFSv4 VOP as part of acquiring a new vnode. If all other nfsd threads are blocked waiting for lock(s) held by this nfsd thread, then there isn't an nfsd thread to service the Close RPC. +.Pp +The NFSv4.1 protocol includes an optional feature referred to as pNFS, +that permits Read/Write operations to be done directly to Data Servers (DS) +bypassing the NFSv4.1 server. +For this case, the NFSv4.1 server only performs metadata operations for +pNFS aware NFSv4.1 clients. +For other NFS clients, the NFSv4.1 server, referred to as a Metadata Server (MDS) +acts as a proxy for the appropriate DS(s) for Read/Write operations. +The FreeBSD implementation of pNFS supports the File and Flexible File Layouts. +For the Flexible File Layout, it is possible to configure mirroring on the DSs +so that data files are stored on multiple DSs (usually two), providing +redundant storage of file data. +However, the MDS remains a single point of failure, similar to a non-pNFS +NFS server. +See +.Xr pnfs 4 +for more information. .Sh FILES .Bl -tag -width /var/db/nfs-stablerestart.bak -compact .It Pa /var/db/nfs-stablerestart @@ -316,6 +361,7 @@ NFS V4 stable restart file backup copy of the file .El .Sh SEE ALSO +.Xr pnfs 4 , .Xr stablerestart 5 , .Xr mountd 8 , .Xr nfscbd 8 , From owner-svn-src-projects@freebsd.org Sat Jun 2 21:16:26 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C8F62FE8559 for ; Sat, 2 Jun 2018 21:16:25 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 71BA578AC9; Sat, 2 Jun 2018 21:16:25 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 525ED152CC; Sat, 2 Jun 2018 21:16:25 +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 w52LGP6O095828; Sat, 2 Jun 2018 21:16:25 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w52LGMcV095814; Sat, 2 Jun 2018 21:16:22 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201806022116.w52LGMcV095814@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sat, 2 Jun 2018 21:16:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r334539 - in projects/pnfs-planb-server/sys: amd64/amd64 amd64/conf amd64/include amd64/linux amd64/linux32 amd64/vmm amd64/vmm/amd amd64/vmm/intel amd64/vmm/io arm/allwinner arm/allwin... X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/pnfs-planb-server/sys: amd64/amd64 amd64/conf amd64/include amd64/linux amd64/linux32 amd64/vmm amd64/vmm/amd amd64/vmm/intel amd64/vmm/io arm/allwinner arm/allwinner/clkng arm/arm arm/at9... X-SVN-Commit-Revision: 334539 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.26 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: Sat, 02 Jun 2018 21:16:26 -0000 Author: rmacklem Date: Sat Jun 2 21:16:20 2018 New Revision: 334539 URL: https://svnweb.freebsd.org/changeset/base/334539 Log: Merge in an up to date kernel from head. Added: projects/pnfs-planb-server/sys/arm/allwinner/aw_spi.c - copied unchanged from r334538, head/sys/arm/allwinner/aw_spi.c projects/pnfs-planb-server/sys/arm64/linux/ - copied from r334538, head/sys/arm64/linux/ projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_clk_armclk.c - copied unchanged from r334538, head/sys/arm64/rockchip/clk/rk_clk_armclk.c projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_clk_armclk.h - copied unchanged from r334538, head/sys/arm64/rockchip/clk/rk_clk_armclk.h projects/pnfs-planb-server/sys/arm64/rockchip/rk_gpio.c - copied unchanged from r334538, head/sys/arm64/rockchip/rk_gpio.c projects/pnfs-planb-server/sys/arm64/rockchip/rk_grf.c - copied unchanged from r334538, head/sys/arm64/rockchip/rk_grf.c projects/pnfs-planb-server/sys/arm64/rockchip/rk_pinctrl.c - copied unchanged from r334538, head/sys/arm64/rockchip/rk_pinctrl.c projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t4fw-1.19.1.0.bin.uu - copied unchanged from r334538, head/sys/dev/cxgbe/firmware/t4fw-1.19.1.0.bin.uu projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t5fw-1.19.1.0.bin.uu - copied unchanged from r334538, head/sys/dev/cxgbe/firmware/t5fw-1.19.1.0.bin.uu projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t5fw_cfg_hashfilter.txt - copied unchanged from r334538, head/sys/dev/cxgbe/firmware/t5fw_cfg_hashfilter.txt projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t6fw-1.19.1.0.bin.uu - copied unchanged from r334538, head/sys/dev/cxgbe/firmware/t6fw-1.19.1.0.bin.uu projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t6fw_cfg_hashfilter.txt - copied unchanged from r334538, head/sys/dev/cxgbe/firmware/t6fw_cfg_hashfilter.txt projects/pnfs-planb-server/sys/dev/cxgbe/t4_filter.c - copied unchanged from r334538, head/sys/dev/cxgbe/t4_filter.c projects/pnfs-planb-server/sys/dev/cxgbe/t4_smt.c - copied unchanged from r334538, head/sys/dev/cxgbe/t4_smt.c projects/pnfs-planb-server/sys/dev/cxgbe/t4_smt.h - copied unchanged from r334538, head/sys/dev/cxgbe/t4_smt.h projects/pnfs-planb-server/sys/dev/flash/cqspi.c - copied unchanged from r334538, head/sys/dev/flash/cqspi.c projects/pnfs-planb-server/sys/dev/flash/cqspi.h - copied unchanged from r334538, head/sys/dev/flash/cqspi.h projects/pnfs-planb-server/sys/dev/flash/n25q.c - copied unchanged from r334538, head/sys/dev/flash/n25q.c projects/pnfs-planb-server/sys/dev/flash/qspi_if.m - copied unchanged from r334538, head/sys/dev/flash/qspi_if.m projects/pnfs-planb-server/sys/dev/ixl/i40e_dcb.c - copied unchanged from r334538, head/sys/dev/ixl/i40e_dcb.c projects/pnfs-planb-server/sys/dev/ixl/i40e_dcb.h - copied unchanged from r334538, head/sys/dev/ixl/i40e_dcb.h projects/pnfs-planb-server/sys/dev/ixl/virtchnl.h - copied unchanged from r334538, head/sys/dev/ixl/virtchnl.h projects/pnfs-planb-server/sys/dev/mlx5/mlx5_core/mlx5_rl.c - copied unchanged from r334538, head/sys/dev/mlx5/mlx5_core/mlx5_rl.c projects/pnfs-planb-server/sys/dev/mlx5/mlx5_en/en_rl.h - copied unchanged from r334538, head/sys/dev/mlx5/mlx5_en/en_rl.h projects/pnfs-planb-server/sys/dev/mlx5/mlx5_en/mlx5_en_rl.c - copied unchanged from r334538, head/sys/dev/mlx5/mlx5_en/mlx5_en_rl.c projects/pnfs-planb-server/sys/dev/smartpqi/ - copied from r334538, head/sys/dev/smartpqi/ projects/pnfs-planb-server/sys/dev/usb/input/uhid_snes.c - copied unchanged from r334538, head/sys/dev/usb/input/uhid_snes.c projects/pnfs-planb-server/sys/dev/usb/net/if_muge.c - copied unchanged from r334538, head/sys/dev/usb/net/if_muge.c projects/pnfs-planb-server/sys/dev/usb/net/if_mugereg.h - copied unchanged from r334538, head/sys/dev/usb/net/if_mugereg.h projects/pnfs-planb-server/sys/dev/usb/template/usb_template_multi.c - copied unchanged from r334538, head/sys/dev/usb/template/usb_template_multi.c projects/pnfs-planb-server/sys/gnu/dts/arm/am572x-idk-common.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/am572x-idk-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am574x-idk.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/am574x-idk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-bmc-opp-witherspoon.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/aspeed-bmc-opp-witherspoon.dts projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-bmc-opp-zaius.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/aspeed-bmc-opp-zaius.dts projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-bmc-quanta-q71l.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/aspeed-bmc-quanta-q71l.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-natte.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/at91-natte.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91-nattis-2-natte-2.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/at91-nattis-2-natte-2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d2_ptc_ek.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/at91-sama5d2_ptc_ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/gemini-dlink-dns-313.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/gemini-dlink-dns-313.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx28-ts4600.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx28-ts4600.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-cubox-i-emmc-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-cubox-i-emmc-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-cubox-i-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-cubox-i-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-hummingboard-emmc-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-hummingboard-emmc-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-hummingboard-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-hummingboard-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-hummingboard2-emmc-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-hummingboard2-emmc-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-hummingboard2-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-hummingboard2-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-hummingboard2.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-hummingboard2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-ts7970.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6dl-ts7970.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-cubox-i-emmc-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-cubox-i-emmc-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-cubox-i-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-cubox-i-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-hummingboard-emmc-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-hummingboard-emmc-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-hummingboard-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-hummingboard-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-hummingboard2-emmc-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-hummingboard2-emmc-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-hummingboard2-som-v15.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-hummingboard2-som-v15.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-hummingboard2.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-hummingboard2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-ts7970.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-ts7970.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-var-dt6customboard.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6q-var-dt6customboard.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-hummingboard2-emmc.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-hummingboard2-emmc.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-hummingboard2.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-hummingboard2.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-sr-som-brcm.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-sr-som-brcm.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-sr-som-emmc.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-sr-som-emmc.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-sr-som-ti.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-sr-som-ti.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-sr-som.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-sr-som.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-ts7970.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-ts7970.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-var-dart.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx6qdl-var-dart.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-colibri-emmc-eval-v3.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx7d-colibri-emmc-eval-v3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-colibri-emmc.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx7d-colibri-emmc.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-pico-pi.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/imx7d-pico-pi.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-pico.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/imx7d-pico.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-som-lv-35xx-devkit.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/logicpd-som-lv-35xx-devkit.dts projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-som-lv-baseboard.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/logicpd-som-lv-baseboard.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-torpedo-35xx-devkit.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/logicpd-torpedo-35xx-devkit.dts projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-torpedo-baseboard.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/logicpd-torpedo-baseboard.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/ls1021a-moxa-uc-8410a.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/ls1021a-moxa-uc-8410a.dts projects/pnfs-planb-server/sys/gnu/dts/arm/openbmc-flash-layout.dtsi - copied unchanged from r334538, head/sys/gnu/dts/arm/openbmc-flash-layout.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/owl-s500-sparky.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/owl-s500-sparky.dts projects/pnfs-planb-server/sys/gnu/dts/arm/ox810se-wd-mbwe.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/ox810se-wd-mbwe.dts projects/pnfs-planb-server/sys/gnu/dts/arm/ox820-cloudengines-pogoplug-series-3.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/ox820-cloudengines-pogoplug-series-3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7745-iwg22d-sodimm-dbhd-ca.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/r8a7745-iwg22d-sodimm-dbhd-ca.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h2-plus-orangepi-r1.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/sun8i-h2-plus-orangepi-r1.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3-libretech-all-h3-cc.dts - copied unchanged from r334538, head/sys/gnu/dts/arm/sun8i-h3-libretech-all-h3-cc.dts projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/bus/ - copied from r334538, head/sys/gnu/dts/include/dt-bindings/bus/ projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/am3.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/am3.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/am4.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/am4.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/aspeed-clock.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/aspeed-clock.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/axg-clkc.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/axg-clkc.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/dm814.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/dm814.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/dm816.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/dm816.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/dra7.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/dra7.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/jz4770-cgu.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/jz4770-cgu.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/omap5.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/omap5.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/sprd,sc9860-clk.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/clock/sprd,sc9860-clk.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/gpio/aspeed-gpio.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/gpio/aspeed-gpio.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/gpio/meson-axg-gpio.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/gpio/meson-axg-gpio.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/memory/tegra186-mc.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/memory/tegra186-mc.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/power/mt2712-power.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/power/mt2712-power.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/power/owl-s700-powergate.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/power/owl-s700-powergate.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/reset/amlogic,meson-axg-reset.h - copied unchanged from r334538, head/sys/gnu/dts/include/dt-bindings/reset/amlogic,meson-axg-reset.h projects/pnfs-planb-server/sys/i386/linux/linux_copyout.c - copied unchanged from r334538, head/sys/i386/linux/linux_copyout.c projects/pnfs-planb-server/sys/kern/subr_epoch.c - copied unchanged from r334538, head/sys/kern/subr_epoch.c projects/pnfs-planb-server/sys/libkern/bcopy.c - copied unchanged from r334538, head/sys/libkern/bcopy.c projects/pnfs-planb-server/sys/modules/allwinner/ - copied from r334538, head/sys/modules/allwinner/ projects/pnfs-planb-server/sys/modules/epoch_test/ - copied from r334538, head/sys/modules/epoch_test/ projects/pnfs-planb-server/sys/modules/smartpqi/ - copied from r334538, head/sys/modules/smartpqi/ projects/pnfs-planb-server/sys/modules/usb/muge/ - copied from r334538, head/sys/modules/usb/muge/ projects/pnfs-planb-server/sys/modules/usb/uhid_snes/ - copied from r334538, head/sys/modules/usb/uhid_snes/ projects/pnfs-planb-server/sys/net/iflib_clone.c - copied unchanged from r334538, head/sys/net/iflib_clone.c projects/pnfs-planb-server/sys/net/iflib_private.h - copied unchanged from r334538, head/sys/net/iflib_private.h projects/pnfs-planb-server/sys/netinet/netdump/ - copied from r334538, head/sys/netinet/netdump/ projects/pnfs-planb-server/sys/powerpc/powernv/opal_ipmi.c - copied unchanged from r334538, head/sys/powerpc/powernv/opal_ipmi.c projects/pnfs-planb-server/sys/powerpc/powernv/opal_sensor.c - copied unchanged from r334538, head/sys/powerpc/powernv/opal_sensor.c projects/pnfs-planb-server/sys/sys/ck.h - copied unchanged from r334538, head/sys/sys/ck.h projects/pnfs-planb-server/sys/sys/epoch.h - copied unchanged from r334538, head/sys/sys/epoch.h projects/pnfs-planb-server/sys/tests/epoch/ - copied from r334538, head/sys/tests/epoch/ projects/pnfs-planb-server/sys/x86/include/ifunc.h - copied unchanged from r334538, head/sys/x86/include/ifunc.h Deleted: projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t4fw-1.16.63.0.bin.uu projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t5fw-1.16.63.0.bin.uu projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t6fw-1.16.63.0.bin.uu projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_pentium.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_pentium.h projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_piv.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_piv.h projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_ppro.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_ppro.h projects/pnfs-planb-server/sys/dev/ixgb/ projects/pnfs-planb-server/sys/dev/ixl/i40e_virtchnl.h projects/pnfs-planb-server/sys/dev/lmc/ projects/pnfs-planb-server/sys/dev/nxge/ projects/pnfs-planb-server/sys/dev/vxge/ projects/pnfs-planb-server/sys/dts/arm/overlays/sun8i-a83t-bananapi-m3-emac.dtso projects/pnfs-planb-server/sys/dts/arm/overlays/sun8i-a83t-emac.dtso projects/pnfs-planb-server/sys/gnu/dts/arm/cloudengines-pogoplug-series-3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-microsom-ar8035.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-microsom.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-pico.dts projects/pnfs-planb-server/sys/gnu/dts/arm/wd-mbwe.dts projects/pnfs-planb-server/sys/i386/linux/linux_support.s projects/pnfs-planb-server/sys/libkern/memmove.c projects/pnfs-planb-server/sys/modules/dtb/overlays/ projects/pnfs-planb-server/sys/modules/ixgb/ projects/pnfs-planb-server/sys/modules/lmc/ projects/pnfs-planb-server/sys/modules/nxge/ projects/pnfs-planb-server/sys/modules/vxge/Makefile projects/pnfs-planb-server/sys/powerpc/powerpc/bcopy.c projects/pnfs-planb-server/sys/riscv/riscv/bcopy.c Modified: projects/pnfs-planb-server/sys/amd64/amd64/cpu_switch.S projects/pnfs-planb-server/sys/amd64/amd64/elf_machdep.c projects/pnfs-planb-server/sys/amd64/amd64/exception.S projects/pnfs-planb-server/sys/amd64/amd64/fpu.c projects/pnfs-planb-server/sys/amd64/amd64/genassym.c projects/pnfs-planb-server/sys/amd64/amd64/initcpu.c projects/pnfs-planb-server/sys/amd64/amd64/machdep.c projects/pnfs-planb-server/sys/amd64/amd64/minidump_machdep.c projects/pnfs-planb-server/sys/amd64/amd64/mp_machdep.c projects/pnfs-planb-server/sys/amd64/amd64/pmap.c projects/pnfs-planb-server/sys/amd64/amd64/prof_machdep.c projects/pnfs-planb-server/sys/amd64/amd64/support.S projects/pnfs-planb-server/sys/amd64/amd64/trap.c projects/pnfs-planb-server/sys/amd64/conf/GENERIC projects/pnfs-planb-server/sys/amd64/conf/NOTES projects/pnfs-planb-server/sys/amd64/include/asmacros.h projects/pnfs-planb-server/sys/amd64/include/clock.h projects/pnfs-planb-server/sys/amd64/include/db_machdep.h projects/pnfs-planb-server/sys/amd64/include/ieeefp.h projects/pnfs-planb-server/sys/amd64/include/md_var.h projects/pnfs-planb-server/sys/amd64/include/pcpu.h projects/pnfs-planb-server/sys/amd64/include/pmc_mdep.h projects/pnfs-planb-server/sys/amd64/include/profile.h projects/pnfs-planb-server/sys/amd64/include/vmm.h projects/pnfs-planb-server/sys/amd64/include/vmparam.h projects/pnfs-planb-server/sys/amd64/linux/linux_sysvec.c projects/pnfs-planb-server/sys/amd64/linux32/linux32_sysvec.c projects/pnfs-planb-server/sys/amd64/vmm/amd/svm.c projects/pnfs-planb-server/sys/amd64/vmm/intel/vmx.c projects/pnfs-planb-server/sys/amd64/vmm/io/ppt.c projects/pnfs-planb-server/sys/amd64/vmm/vmm.c projects/pnfs-planb-server/sys/amd64/vmm/vmm_dev.c projects/pnfs-planb-server/sys/amd64/vmm/vmm_host.c projects/pnfs-planb-server/sys/arm/allwinner/a10_ahci.c projects/pnfs-planb-server/sys/arm/allwinner/a10_ehci.c projects/pnfs-planb-server/sys/arm/allwinner/aw_machdep.c projects/pnfs-planb-server/sys/arm/allwinner/aw_mmc.c projects/pnfs-planb-server/sys/arm/allwinner/aw_mmc.h projects/pnfs-planb-server/sys/arm/allwinner/aw_syscon.c projects/pnfs-planb-server/sys/arm/allwinner/clkng/aw_clk.h projects/pnfs-planb-server/sys/arm/allwinner/clkng/ccu_a83t.c projects/pnfs-planb-server/sys/arm/allwinner/clkng/ccu_a83t.h projects/pnfs-planb-server/sys/arm/allwinner/if_emac.c projects/pnfs-planb-server/sys/arm/arm/minidump_machdep.c projects/pnfs-planb-server/sys/arm/arm/physmem.c projects/pnfs-planb-server/sys/arm/arm/trap-v4.c projects/pnfs-planb-server/sys/arm/arm/trap-v6.c projects/pnfs-planb-server/sys/arm/at91/at91_aic.c projects/pnfs-planb-server/sys/arm/at91/at91_common.c projects/pnfs-planb-server/sys/arm/at91/at91_gpio.h projects/pnfs-planb-server/sys/arm/at91/at91_mci.c projects/pnfs-planb-server/sys/arm/at91/at91_mcireg.h projects/pnfs-planb-server/sys/arm/at91/at91_ohci.c projects/pnfs-planb-server/sys/arm/at91/at91_ohci_fdt.c projects/pnfs-planb-server/sys/arm/at91/at91_pdcreg.h projects/pnfs-planb-server/sys/arm/at91/at91_pinctrl.c projects/pnfs-planb-server/sys/arm/at91/at91_pio.c projects/pnfs-planb-server/sys/arm/at91/at91_pioreg.h projects/pnfs-planb-server/sys/arm/at91/at91_piovar.h projects/pnfs-planb-server/sys/arm/at91/at91_pmc.c projects/pnfs-planb-server/sys/arm/at91/at91_pmcreg.h projects/pnfs-planb-server/sys/arm/at91/at91_pmcvar.h projects/pnfs-planb-server/sys/arm/at91/at91_rtc.c projects/pnfs-planb-server/sys/arm/at91/at91_rtcreg.h projects/pnfs-planb-server/sys/arm/at91/at91_sdramc.c projects/pnfs-planb-server/sys/arm/at91/at91_shdwc.c projects/pnfs-planb-server/sys/arm/at91/at91_smc.c projects/pnfs-planb-server/sys/arm/at91/at91_smc.h projects/pnfs-planb-server/sys/arm/at91/at91_spireg.h projects/pnfs-planb-server/sys/arm/at91/at91_ssc.c projects/pnfs-planb-server/sys/arm/at91/at91_sscreg.h projects/pnfs-planb-server/sys/arm/at91/at91_streg.h projects/pnfs-planb-server/sys/arm/at91/at91_tcb.c projects/pnfs-planb-server/sys/arm/at91/at91_twi.c projects/pnfs-planb-server/sys/arm/at91/at91_twiio.h projects/pnfs-planb-server/sys/arm/at91/at91_twireg.h projects/pnfs-planb-server/sys/arm/at91/at91board.h projects/pnfs-planb-server/sys/arm/at91/at91rm9200_devices.c projects/pnfs-planb-server/sys/arm/at91/at91rm9200var.h projects/pnfs-planb-server/sys/arm/at91/at91sam9x5.c projects/pnfs-planb-server/sys/arm/at91/at91soc.c projects/pnfs-planb-server/sys/arm/at91/at91soc.h projects/pnfs-planb-server/sys/arm/at91/board_bwct.c projects/pnfs-planb-server/sys/arm/at91/board_eb9200.c projects/pnfs-planb-server/sys/arm/at91/board_hl200.c projects/pnfs-planb-server/sys/arm/at91/board_hl201.c projects/pnfs-planb-server/sys/arm/at91/board_kb920x.c projects/pnfs-planb-server/sys/arm/at91/board_tsc4370.c projects/pnfs-planb-server/sys/arm/at91/if_ate.c projects/pnfs-planb-server/sys/arm/at91/if_atereg.h projects/pnfs-planb-server/sys/arm/at91/if_macb.c projects/pnfs-planb-server/sys/arm/broadcom/bcm2835/bcm2836.c projects/pnfs-planb-server/sys/arm/cavium/cns11xx/ehci_ebus.c projects/pnfs-planb-server/sys/arm/cavium/cns11xx/if_ece.c projects/pnfs-planb-server/sys/arm/conf/ARMADA38X projects/pnfs-planb-server/sys/arm/conf/CRB projects/pnfs-planb-server/sys/arm/conf/GENERIC projects/pnfs-planb-server/sys/arm/conf/SOCFPGA projects/pnfs-planb-server/sys/arm/conf/genboardid.awk projects/pnfs-planb-server/sys/arm/freescale/imx/imx6_ahci.c projects/pnfs-planb-server/sys/arm/freescale/imx/imx_gpio.c projects/pnfs-planb-server/sys/arm/freescale/vybrid/vf_ehci.c projects/pnfs-planb-server/sys/arm/include/_bus.h projects/pnfs-planb-server/sys/arm/include/at91_gpio.h projects/pnfs-planb-server/sys/arm/include/atags.h projects/pnfs-planb-server/sys/arm/include/atomic-v4.h projects/pnfs-planb-server/sys/arm/include/atomic-v6.h projects/pnfs-planb-server/sys/arm/include/board.h projects/pnfs-planb-server/sys/arm/include/physmem.h projects/pnfs-planb-server/sys/arm/mv/gpio.c projects/pnfs-planb-server/sys/arm/mv/mv_common.c projects/pnfs-planb-server/sys/arm/ralink/if_fv.c projects/pnfs-planb-server/sys/arm/samsung/exynos/exynos5_ehci.c projects/pnfs-planb-server/sys/arm/ti/am335x/am335x_prcm.c projects/pnfs-planb-server/sys/arm/ti/cpsw/if_cpsw.c projects/pnfs-planb-server/sys/arm/ti/usb/omap_ehci.c projects/pnfs-planb-server/sys/arm/xilinx/zy7_ehci.c projects/pnfs-planb-server/sys/arm/xscale/ixp425/if_npe.c projects/pnfs-planb-server/sys/arm64/arm64/efirt_machdep.c projects/pnfs-planb-server/sys/arm64/arm64/locore.S projects/pnfs-planb-server/sys/arm64/arm64/machdep.c projects/pnfs-planb-server/sys/arm64/arm64/minidump_machdep.c projects/pnfs-planb-server/sys/arm64/arm64/pmap.c projects/pnfs-planb-server/sys/arm64/arm64/trap.c projects/pnfs-planb-server/sys/arm64/arm64/vfp.c projects/pnfs-planb-server/sys/arm64/conf/GENERIC projects/pnfs-planb-server/sys/arm64/conf/GENERIC-NODEBUG projects/pnfs-planb-server/sys/arm64/include/atomic.h projects/pnfs-planb-server/sys/arm64/include/machdep.h projects/pnfs-planb-server/sys/arm64/include/proc.h projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk3328_cru.c projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_clk_composite.c projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_clk_pll.c projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_clk_pll.h projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_cru.c projects/pnfs-planb-server/sys/arm64/rockchip/clk/rk_cru.h projects/pnfs-planb-server/sys/cam/ata/ata_da.c projects/pnfs-planb-server/sys/cam/cam_iosched.c projects/pnfs-planb-server/sys/cam/cam_iosched.h projects/pnfs-planb-server/sys/cam/cam_periph.c projects/pnfs-planb-server/sys/cam/cam_xpt.c projects/pnfs-planb-server/sys/cam/cam_xpt_internal.h projects/pnfs-planb-server/sys/cam/ctl/ctl.c projects/pnfs-planb-server/sys/cam/ctl/ctl.h projects/pnfs-planb-server/sys/cam/ctl/ctl_backend.c projects/pnfs-planb-server/sys/cam/ctl/ctl_backend.h projects/pnfs-planb-server/sys/cam/ctl/ctl_backend_block.c projects/pnfs-planb-server/sys/cam/ctl/ctl_backend_ramdisk.c projects/pnfs-planb-server/sys/cam/ctl/ctl_frontend.c projects/pnfs-planb-server/sys/cam/ctl/ctl_frontend.h projects/pnfs-planb-server/sys/cam/ctl/ctl_frontend_ioctl.c projects/pnfs-planb-server/sys/cam/ctl/ctl_frontend_iscsi.c projects/pnfs-planb-server/sys/cam/ctl/ctl_ioctl.h projects/pnfs-planb-server/sys/cam/ctl/ctl_tpc.c projects/pnfs-planb-server/sys/cam/mmc/mmc_da.c projects/pnfs-planb-server/sys/cam/mmc/mmc_xpt.c projects/pnfs-planb-server/sys/cam/nvme/nvme_all.c projects/pnfs-planb-server/sys/cam/nvme/nvme_all.h projects/pnfs-planb-server/sys/cam/nvme/nvme_da.c projects/pnfs-planb-server/sys/cam/nvme/nvme_xpt.c projects/pnfs-planb-server/sys/cam/scsi/scsi_cd.c projects/pnfs-planb-server/sys/cam/scsi/scsi_da.c projects/pnfs-planb-server/sys/cam/scsi/scsi_pass.c projects/pnfs-planb-server/sys/cam/scsi/scsi_sa.c projects/pnfs-planb-server/sys/cam/scsi/scsi_sg.c projects/pnfs-planb-server/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c projects/pnfs-planb-server/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c projects/pnfs-planb-server/sys/cddl/compat/opensolaris/sys/atomic.h projects/pnfs-planb-server/sys/cddl/compat/opensolaris/sys/file.h projects/pnfs-planb-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c projects/pnfs-planb-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c projects/pnfs-planb-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_onexit.c projects/pnfs-planb-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c projects/pnfs-planb-server/sys/cddl/dev/dtmalloc/dtmalloc.c projects/pnfs-planb-server/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c projects/pnfs-planb-server/sys/cddl/dev/dtrace/powerpc/dtrace_isa.c projects/pnfs-planb-server/sys/cddl/dev/sdt/sdt.c projects/pnfs-planb-server/sys/cddl/dev/systrace/systrace.c projects/pnfs-planb-server/sys/compat/cloudabi/cloudabi_file.c projects/pnfs-planb-server/sys/compat/freebsd32/freebsd32_misc.c projects/pnfs-planb-server/sys/compat/freebsd32/freebsd32_syscall.h projects/pnfs-planb-server/sys/compat/freebsd32/freebsd32_syscalls.c projects/pnfs-planb-server/sys/compat/freebsd32/freebsd32_sysent.c projects/pnfs-planb-server/sys/compat/freebsd32/freebsd32_systrace_args.c projects/pnfs-planb-server/sys/compat/freebsd32/syscalls.master projects/pnfs-planb-server/sys/compat/linprocfs/linprocfs.c projects/pnfs-planb-server/sys/compat/linsysfs/linsysfs.c projects/pnfs-planb-server/sys/compat/linux/linux_errno.inc projects/pnfs-planb-server/sys/compat/linux/linux_event.c projects/pnfs-planb-server/sys/compat/linux/linux_file.c projects/pnfs-planb-server/sys/compat/linux/linux_futex.c projects/pnfs-planb-server/sys/compat/linux/linux_futex.h projects/pnfs-planb-server/sys/compat/linux/linux_ioctl.c projects/pnfs-planb-server/sys/compat/linux/linux_mmap.c projects/pnfs-planb-server/sys/compat/linux/linux_socket.c projects/pnfs-planb-server/sys/compat/linux/linux_stats.c projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/bitmap.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/compiler.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/completion.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/file.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/gfp.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/hrtimer.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/idr.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/inetdevice.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/pci.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/radix-tree.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/scatterlist.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/sched.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/slab.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/time.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/include/linux/wait.h projects/pnfs-planb-server/sys/compat/linuxkpi/common/src/linux_hrtimer.c projects/pnfs-planb-server/sys/compat/linuxkpi/common/src/linux_idr.c projects/pnfs-planb-server/sys/compat/linuxkpi/common/src/linux_radix.c projects/pnfs-planb-server/sys/compat/linuxkpi/common/src/linux_rcu.c projects/pnfs-planb-server/sys/compat/linuxkpi/common/src/linux_schedule.c projects/pnfs-planb-server/sys/conf/NOTES projects/pnfs-planb-server/sys/conf/files projects/pnfs-planb-server/sys/conf/files.amd64 projects/pnfs-planb-server/sys/conf/files.arm64 projects/pnfs-planb-server/sys/conf/files.i386 projects/pnfs-planb-server/sys/conf/files.mips projects/pnfs-planb-server/sys/conf/files.powerpc projects/pnfs-planb-server/sys/conf/files.riscv projects/pnfs-planb-server/sys/conf/files.sparc64 projects/pnfs-planb-server/sys/conf/kern.mk projects/pnfs-planb-server/sys/conf/kern.pre.mk projects/pnfs-planb-server/sys/conf/kmod.mk projects/pnfs-planb-server/sys/conf/ldscript.amd64 projects/pnfs-planb-server/sys/conf/makeLINT.mk projects/pnfs-planb-server/sys/conf/options projects/pnfs-planb-server/sys/conf/options.amd64 projects/pnfs-planb-server/sys/contrib/ck/include/ck_epoch.h projects/pnfs-planb-server/sys/contrib/ck/include/ck_queue.h projects/pnfs-planb-server/sys/contrib/ck/src/ck_epoch.c projects/pnfs-planb-server/sys/contrib/dev/acpica/changes.txt projects/pnfs-planb-server/sys/contrib/dev/acpica/common/adfile.c projects/pnfs-planb-server/sys/contrib/dev/acpica/common/dmtbinfo2.c projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslcompiler.h projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslglobal.h projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslhex.c projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslload.c projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslmessages.c projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslmessages.h projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/asloperands.c projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/asltypes.h projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslutils.c projects/pnfs-planb-server/sys/contrib/dev/acpica/compiler/aslxref.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/debugger/dbnames.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/debugger/dbtest.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/dispatcher/dswscope.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/executer/exconfig.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/namespace/nsinit.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/resources/rsdump.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/tables/tbinstal.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/utilities/utbuffer.c projects/pnfs-planb-server/sys/contrib/dev/acpica/components/utilities/utstring.c projects/pnfs-planb-server/sys/contrib/dev/acpica/include/acapps.h projects/pnfs-planb-server/sys/contrib/dev/acpica/include/aclocal.h projects/pnfs-planb-server/sys/contrib/dev/acpica/include/acnames.h projects/pnfs-planb-server/sys/contrib/dev/acpica/include/acnamesp.h projects/pnfs-planb-server/sys/contrib/dev/acpica/include/acpixf.h projects/pnfs-planb-server/sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h projects/pnfs-planb-server/sys/contrib/dev/ath/ath_hal/ar9300/ar9300eep.h projects/pnfs-planb-server/sys/contrib/ena-com/ena_plat.h projects/pnfs-planb-server/sys/contrib/ipfilter/netinet/fil.c projects/pnfs-planb-server/sys/contrib/ipfilter/netinet/ip_compat.h projects/pnfs-planb-server/sys/contrib/ipfilter/netinet/ip_dstlist.c projects/pnfs-planb-server/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c projects/pnfs-planb-server/sys/contrib/rdma/krping/krping.c projects/pnfs-planb-server/sys/crypto/skein/amd64/skein_block_asm.s projects/pnfs-planb-server/sys/ddb/db_main.c projects/pnfs-planb-server/sys/ddb/db_ps.c projects/pnfs-planb-server/sys/ddb/ddb.h projects/pnfs-planb-server/sys/dev/aac/aac_pci.c projects/pnfs-planb-server/sys/dev/acpica/Osd/OsdHardware.c projects/pnfs-planb-server/sys/dev/acpica/acpi.c projects/pnfs-planb-server/sys/dev/acpica/acpi_cpu.c projects/pnfs-planb-server/sys/dev/acpica/acpi_hpet.c projects/pnfs-planb-server/sys/dev/ae/if_ae.c projects/pnfs-planb-server/sys/dev/age/if_age.c projects/pnfs-planb-server/sys/dev/al_eth/al_eth.c projects/pnfs-planb-server/sys/dev/alc/if_alc.c projects/pnfs-planb-server/sys/dev/ale/if_ale.c projects/pnfs-planb-server/sys/dev/altera/atse/if_atse.c projects/pnfs-planb-server/sys/dev/amdsbwd/amd_chipset.h projects/pnfs-planb-server/sys/dev/amdsbwd/amdsbwd.c projects/pnfs-planb-server/sys/dev/asmc/asmc.c projects/pnfs-planb-server/sys/dev/ata/chipsets/ata-via.c projects/pnfs-planb-server/sys/dev/ath/ath_hal/ah.h projects/pnfs-planb-server/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/pnfs-planb-server/sys/dev/ath/if_ath.c projects/pnfs-planb-server/sys/dev/atkbdc/psm.c projects/pnfs-planb-server/sys/dev/bce/if_bce.c projects/pnfs-planb-server/sys/dev/bfe/if_bfe.c projects/pnfs-planb-server/sys/dev/bge/if_bge.c projects/pnfs-planb-server/sys/dev/bhnd/tools/nvram_map_gen.awk projects/pnfs-planb-server/sys/dev/bktr/bktr_card.c projects/pnfs-planb-server/sys/dev/bktr/bktr_card.h projects/pnfs-planb-server/sys/dev/bktr/bktr_tuner.c projects/pnfs-planb-server/sys/dev/bktr/bktr_tuner.h projects/pnfs-planb-server/sys/dev/bktr/msp34xx.c projects/pnfs-planb-server/sys/dev/bm/if_bm.c projects/pnfs-planb-server/sys/dev/bnxt/bnxt_hwrm.c projects/pnfs-planb-server/sys/dev/bnxt/bnxt_txrx.c projects/pnfs-planb-server/sys/dev/bxe/bxe.c projects/pnfs-planb-server/sys/dev/bxe/bxe.h projects/pnfs-planb-server/sys/dev/cas/if_cas.c projects/pnfs-planb-server/sys/dev/cpuctl/cpuctl.c projects/pnfs-planb-server/sys/dev/cs/if_cs.c projects/pnfs-planb-server/sys/dev/cx/machdep.h projects/pnfs-planb-server/sys/dev/cxgb/cxgb_adapter.h projects/pnfs-planb-server/sys/dev/cxgb/cxgb_main.c projects/pnfs-planb-server/sys/dev/cxgb/cxgb_sge.c projects/pnfs-planb-server/sys/dev/cxgbe/adapter.h projects/pnfs-planb-server/sys/dev/cxgbe/common/common.h projects/pnfs-planb-server/sys/dev/cxgbe/common/t4_hw.c projects/pnfs-planb-server/sys/dev/cxgbe/common/t4_msg.h projects/pnfs-planb-server/sys/dev/cxgbe/common/t4_regs_values.h projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t4fw_interface.h projects/pnfs-planb-server/sys/dev/cxgbe/firmware/t6fw_cfg_uwire.txt projects/pnfs-planb-server/sys/dev/cxgbe/offload.h projects/pnfs-planb-server/sys/dev/cxgbe/t4_ioctl.h projects/pnfs-planb-server/sys/dev/cxgbe/t4_l2t.c projects/pnfs-planb-server/sys/dev/cxgbe/t4_l2t.h projects/pnfs-planb-server/sys/dev/cxgbe/t4_main.c projects/pnfs-planb-server/sys/dev/cxgbe/t4_sched.c projects/pnfs-planb-server/sys/dev/cxgbe/t4_sge.c projects/pnfs-planb-server/sys/dev/cxgbe/tom/t4_connect.c projects/pnfs-planb-server/sys/dev/cxgbe/tom/t4_cpl_io.c projects/pnfs-planb-server/sys/dev/cxgbe/tom/t4_ddp.c projects/pnfs-planb-server/sys/dev/cxgbe/tom/t4_tls.c projects/pnfs-planb-server/sys/dev/cxgbe/tom/t4_tom.c projects/pnfs-planb-server/sys/dev/cxgbe/tom/t4_tom.h projects/pnfs-planb-server/sys/dev/dc/if_dc.c projects/pnfs-planb-server/sys/dev/de/if_de.c projects/pnfs-planb-server/sys/dev/drm/drm_ioctl.c projects/pnfs-planb-server/sys/dev/dwc/if_dwc.c projects/pnfs-planb-server/sys/dev/e1000/e1000_80003es2lan.c projects/pnfs-planb-server/sys/dev/e1000/e1000_82571.c projects/pnfs-planb-server/sys/dev/e1000/e1000_82575.c projects/pnfs-planb-server/sys/dev/e1000/e1000_hw.h projects/pnfs-planb-server/sys/dev/e1000/e1000_i210.c projects/pnfs-planb-server/sys/dev/e1000/e1000_i210.h projects/pnfs-planb-server/sys/dev/e1000/e1000_ich8lan.c projects/pnfs-planb-server/sys/dev/e1000/e1000_mac.c projects/pnfs-planb-server/sys/dev/e1000/e1000_mac.h projects/pnfs-planb-server/sys/dev/e1000/e1000_osdep.h projects/pnfs-planb-server/sys/dev/e1000/em_txrx.c projects/pnfs-planb-server/sys/dev/e1000/if_em.c projects/pnfs-planb-server/sys/dev/ed/if_ed.c projects/pnfs-planb-server/sys/dev/ena/ena.c projects/pnfs-planb-server/sys/dev/ena/ena.h projects/pnfs-planb-server/sys/dev/et/if_et.c projects/pnfs-planb-server/sys/dev/evdev/uinput.c projects/pnfs-planb-server/sys/dev/evdev/uinput.h projects/pnfs-planb-server/sys/dev/ex/if_ex.c projects/pnfs-planb-server/sys/dev/exca/exca.c projects/pnfs-planb-server/sys/dev/exca/excareg.h projects/pnfs-planb-server/sys/dev/exca/excavar.h projects/pnfs-planb-server/sys/dev/extres/clk/clk.c projects/pnfs-planb-server/sys/dev/extres/regulator/regulator.c projects/pnfs-planb-server/sys/dev/extres/syscon/syscon.c projects/pnfs-planb-server/sys/dev/extres/syscon/syscon.h projects/pnfs-planb-server/sys/dev/extres/syscon/syscon_generic.h projects/pnfs-planb-server/sys/dev/fdt/fdt_common.c projects/pnfs-planb-server/sys/dev/fdt/fdt_common.h projects/pnfs-planb-server/sys/dev/fe/if_fe.c projects/pnfs-planb-server/sys/dev/ffec/if_ffec.c projects/pnfs-planb-server/sys/dev/filemon/filemon.c projects/pnfs-planb-server/sys/dev/flash/mx25l.c projects/pnfs-planb-server/sys/dev/flash/mx25lreg.h projects/pnfs-planb-server/sys/dev/gem/if_gem.c projects/pnfs-planb-server/sys/dev/hme/if_hme.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_amd.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_core.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_core.h projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_e500.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_intel.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_logging.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_mod.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_mpc7xxx.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_ppc970.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_soft.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_uncore.c projects/pnfs-planb-server/sys/dev/hwpmc/hwpmc_uncore.h projects/pnfs-planb-server/sys/dev/hwpmc/pmc_events.h projects/pnfs-planb-server/sys/dev/hyperv/netvsc/if_hn.c projects/pnfs-planb-server/sys/dev/if_ndis/if_ndis.c projects/pnfs-planb-server/sys/dev/iicbus/icee.c projects/pnfs-planb-server/sys/dev/ixgbe/if_ixv.c projects/pnfs-planb-server/sys/dev/ixgbe/ix_txrx.c projects/pnfs-planb-server/sys/dev/ixgbe/ixgbe_x550.c projects/pnfs-planb-server/sys/dev/ixl/i40e_adminq.c projects/pnfs-planb-server/sys/dev/ixl/i40e_adminq.h projects/pnfs-planb-server/sys/dev/ixl/i40e_adminq_cmd.h projects/pnfs-planb-server/sys/dev/ixl/i40e_alloc.h projects/pnfs-planb-server/sys/dev/ixl/i40e_common.c projects/pnfs-planb-server/sys/dev/ixl/i40e_devids.h projects/pnfs-planb-server/sys/dev/ixl/i40e_hmc.c projects/pnfs-planb-server/sys/dev/ixl/i40e_hmc.h projects/pnfs-planb-server/sys/dev/ixl/i40e_lan_hmc.c projects/pnfs-planb-server/sys/dev/ixl/i40e_lan_hmc.h projects/pnfs-planb-server/sys/dev/ixl/i40e_nvm.c projects/pnfs-planb-server/sys/dev/ixl/i40e_osdep.c projects/pnfs-planb-server/sys/dev/ixl/i40e_osdep.h projects/pnfs-planb-server/sys/dev/ixl/i40e_prototype.h projects/pnfs-planb-server/sys/dev/ixl/i40e_register.h projects/pnfs-planb-server/sys/dev/ixl/i40e_status.h projects/pnfs-planb-server/sys/dev/ixl/i40e_type.h projects/pnfs-planb-server/sys/dev/ixl/if_ixl.c projects/pnfs-planb-server/sys/dev/ixl/if_ixlv.c projects/pnfs-planb-server/sys/dev/ixl/ixl.h projects/pnfs-planb-server/sys/dev/ixl/ixl_iw.c projects/pnfs-planb-server/sys/dev/ixl/ixl_iw.h projects/pnfs-planb-server/sys/dev/ixl/ixl_iw_int.h projects/pnfs-planb-server/sys/dev/ixl/ixl_pf.h projects/pnfs-planb-server/sys/dev/ixl/ixl_pf_i2c.c projects/pnfs-planb-server/sys/dev/ixl/ixl_pf_iov.c projects/pnfs-planb-server/sys/dev/ixl/ixl_pf_iov.h projects/pnfs-planb-server/sys/dev/ixl/ixl_pf_main.c projects/pnfs-planb-server/sys/dev/ixl/ixl_pf_qmgr.c projects/pnfs-planb-server/sys/dev/ixl/ixl_pf_qmgr.h projects/pnfs-planb-server/sys/dev/ixl/ixl_txrx.c projects/pnfs-planb-server/sys/dev/ixl/ixlv.h projects/pnfs-planb-server/sys/dev/ixl/ixlv_vc_mgr.h projects/pnfs-planb-server/sys/dev/ixl/ixlvc.c projects/pnfs-planb-server/sys/dev/jme/if_jme.c projects/pnfs-planb-server/sys/dev/le/lance.c projects/pnfs-planb-server/sys/dev/lge/if_lge.c projects/pnfs-planb-server/sys/dev/liquidio/lio_ioctl.c projects/pnfs-planb-server/sys/dev/malo/if_malo.c projects/pnfs-planb-server/sys/dev/mge/if_mge.c projects/pnfs-planb-server/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c projects/pnfs-planb-server/sys/dev/mlx5/driver.h projects/pnfs-planb-server/sys/dev/mlx5/mlx5_core/mlx5_main.c projects/pnfs-planb-server/sys/dev/mlx5/mlx5_en/en.h projects/pnfs-planb-server/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c projects/pnfs-planb-server/sys/dev/mlx5/mlx5_en/mlx5_en_main.c projects/pnfs-planb-server/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c projects/pnfs-planb-server/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c projects/pnfs-planb-server/sys/dev/mmc/host/dwmmc_rockchip.c projects/pnfs-planb-server/sys/dev/mmc/mmcreg.h projects/pnfs-planb-server/sys/dev/mmc/mmcsd.c projects/pnfs-planb-server/sys/dev/mpr/mpr_mapping.c projects/pnfs-planb-server/sys/dev/mrsas/mrsas_cam.c projects/pnfs-planb-server/sys/dev/msk/if_msk.c projects/pnfs-planb-server/sys/dev/mxge/if_mxge.c projects/pnfs-planb-server/sys/dev/my/if_my.c projects/pnfs-planb-server/sys/dev/nand/nfc_at91.h projects/pnfs-planb-server/sys/dev/netmap/if_ptnet.c projects/pnfs-planb-server/sys/dev/netmap/netmap.c projects/pnfs-planb-server/sys/dev/netmap/netmap_freebsd.c projects/pnfs-planb-server/sys/dev/netmap/netmap_generic.c projects/pnfs-planb-server/sys/dev/netmap/netmap_kern.h projects/pnfs-planb-server/sys/dev/netmap/netmap_legacy.c projects/pnfs-planb-server/sys/dev/netmap/netmap_mem2.c projects/pnfs-planb-server/sys/dev/netmap/netmap_monitor.c projects/pnfs-planb-server/sys/dev/netmap/netmap_pipe.c projects/pnfs-planb-server/sys/dev/netmap/netmap_pt.c projects/pnfs-planb-server/sys/dev/netmap/netmap_vale.c projects/pnfs-planb-server/sys/dev/nge/if_nge.c projects/pnfs-planb-server/sys/dev/null/null.c projects/pnfs-planb-server/sys/dev/nvme/nvme.c projects/pnfs-planb-server/sys/dev/nvme/nvme.h projects/pnfs-planb-server/sys/dev/nvme/nvme_ctrlr.c projects/pnfs-planb-server/sys/dev/nvme/nvme_ctrlr_cmd.c projects/pnfs-planb-server/sys/dev/nvme/nvme_ns.c projects/pnfs-planb-server/sys/dev/nvme/nvme_private.h projects/pnfs-planb-server/sys/dev/nvme/nvme_qpair.c projects/pnfs-planb-server/sys/dev/nvme/nvme_sim.c projects/pnfs-planb-server/sys/dev/oce/oce_hw.c projects/pnfs-planb-server/sys/dev/oce/oce_if.h projects/pnfs-planb-server/sys/dev/oce/oce_mbox.c projects/pnfs-planb-server/sys/dev/ocs_fc/ocs_os.c projects/pnfs-planb-server/sys/dev/ofw/ofw_fdt.c projects/pnfs-planb-server/sys/dev/otus/if_otus.c projects/pnfs-planb-server/sys/dev/pccbb/pccbbvar.h projects/pnfs-planb-server/sys/dev/pci/pci_pci.c projects/pnfs-planb-server/sys/dev/pci/vga_pci.c projects/pnfs-planb-server/sys/dev/pcn/if_pcn.c projects/pnfs-planb-server/sys/dev/qlnx/qlnxe/qlnx_os.c projects/pnfs-planb-server/sys/dev/qlxgb/qla_os.c projects/pnfs-planb-server/sys/dev/qlxgbe/ql_boot.c projects/pnfs-planb-server/sys/dev/qlxgbe/ql_fw.c projects/pnfs-planb-server/sys/dev/qlxgbe/ql_minidump.c projects/pnfs-planb-server/sys/dev/qlxgbe/ql_os.c projects/pnfs-planb-server/sys/dev/qlxgbe/ql_reset.c projects/pnfs-planb-server/sys/dev/qlxgbe/ql_ver.h projects/pnfs-planb-server/sys/dev/qlxge/qls_os.c projects/pnfs-planb-server/sys/dev/random/random_harvestq.c projects/pnfs-planb-server/sys/dev/re/if_re.c projects/pnfs-planb-server/sys/dev/rl/if_rl.c projects/pnfs-planb-server/sys/dev/rtwn/if_rtwn_rx.c projects/pnfs-planb-server/sys/dev/sdhci/sdhci_acpi.c projects/pnfs-planb-server/sys/dev/sdhci/sdhci_pci.c projects/pnfs-planb-server/sys/dev/sf/if_sf.c projects/pnfs-planb-server/sys/dev/sfxge/sfxge_port.c projects/pnfs-planb-server/sys/dev/sge/if_sge.c projects/pnfs-planb-server/sys/dev/sis/if_sis.c projects/pnfs-planb-server/sys/dev/sk/if_sk.c projects/pnfs-planb-server/sys/dev/sn/if_sn.c projects/pnfs-planb-server/sys/dev/sound/pci/hda/hdaa_patches.c projects/pnfs-planb-server/sys/dev/sound/pci/hda/hdac.h projects/pnfs-planb-server/sys/dev/ste/if_ste.c projects/pnfs-planb-server/sys/dev/stge/if_stge.c projects/pnfs-planb-server/sys/dev/syscons/syscons.c projects/pnfs-planb-server/sys/dev/ti/if_ti.c projects/pnfs-planb-server/sys/dev/tl/if_tl.c projects/pnfs-planb-server/sys/dev/tsec/if_tsec.c projects/pnfs-planb-server/sys/dev/tx/if_tx.c projects/pnfs-planb-server/sys/dev/txp/if_txp.c projects/pnfs-planb-server/sys/dev/uart/uart_dev_snps.c projects/pnfs-planb-server/sys/dev/uart/uart_tty.c projects/pnfs-planb-server/sys/dev/usb/controller/xhci.c projects/pnfs-planb-server/sys/dev/usb/controller/xhci.h projects/pnfs-planb-server/sys/dev/usb/controller/xhci_pci.c projects/pnfs-planb-server/sys/dev/usb/input/usb_rdesc.h projects/pnfs-planb-server/sys/dev/usb/net/if_aue.c projects/pnfs-planb-server/sys/dev/usb/net/if_axe.c projects/pnfs-planb-server/sys/dev/usb/net/if_axge.c projects/pnfs-planb-server/sys/dev/usb/net/if_cue.c projects/pnfs-planb-server/sys/dev/usb/net/if_kue.c projects/pnfs-planb-server/sys/dev/usb/net/if_mos.c projects/pnfs-planb-server/sys/dev/usb/net/if_rue.c projects/pnfs-planb-server/sys/dev/usb/net/if_smsc.c projects/pnfs-planb-server/sys/dev/usb/net/if_udav.c projects/pnfs-planb-server/sys/dev/usb/net/if_ure.c projects/pnfs-planb-server/sys/dev/usb/net/usb_ethernet.c projects/pnfs-planb-server/sys/dev/usb/net/usb_ethernet.h projects/pnfs-planb-server/sys/dev/usb/serial/uchcom.c projects/pnfs-planb-server/sys/dev/usb/serial/umodem.c projects/pnfs-planb-server/sys/dev/usb/serial/usb_serial.c projects/pnfs-planb-server/sys/dev/usb/serial/usb_serial.h projects/pnfs-planb-server/sys/dev/usb/serial/uslcom.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template.h projects/pnfs-planb-server/sys/dev/usb/template/usb_template_audio.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_cdce.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_kbd.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_midi.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_modem.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_mouse.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_msc.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_mtp.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_phone.c projects/pnfs-planb-server/sys/dev/usb/template/usb_template_serialnet.c projects/pnfs-planb-server/sys/dev/usb/usb_device.c projects/pnfs-planb-server/sys/dev/usb/usb_ioctl.h projects/pnfs-planb-server/sys/dev/usb/usb_request.c projects/pnfs-planb-server/sys/dev/usb/usbdevs projects/pnfs-planb-server/sys/dev/usb/wlan/if_rsu.c projects/pnfs-planb-server/sys/dev/usb/wlan/if_zyd.c projects/pnfs-planb-server/sys/dev/vge/if_vge.c projects/pnfs-planb-server/sys/dev/virtio/network/if_vtnet.c projects/pnfs-planb-server/sys/dev/vmware/vmxnet3/if_vmx.c projects/pnfs-planb-server/sys/dev/vr/if_vr.c projects/pnfs-planb-server/sys/dev/vt/colors/vt_termcolors.c projects/pnfs-planb-server/sys/dev/vt/colors/vt_termcolors.h projects/pnfs-planb-server/sys/dev/vt/hw/fb/vt_early_fb.c projects/pnfs-planb-server/sys/dev/vt/hw/ofwfb/ofwfb.c projects/pnfs-planb-server/sys/dev/vt/hw/vga/vt_vga.c projects/pnfs-planb-server/sys/dev/vt/vt.h projects/pnfs-planb-server/sys/dev/vt/vt_buf.c projects/pnfs-planb-server/sys/dev/vt/vt_core.c projects/pnfs-planb-server/sys/dev/vt/vt_cpulogos.c projects/pnfs-planb-server/sys/dev/vte/if_vte.c projects/pnfs-planb-server/sys/dev/wb/if_wb.c projects/pnfs-planb-server/sys/dev/wi/if_wi.c projects/pnfs-planb-server/sys/dev/wtap/if_wtap.c projects/pnfs-planb-server/sys/dev/xe/if_xe.c projects/pnfs-planb-server/sys/dev/xen/blkback/blkback.c projects/pnfs-planb-server/sys/dev/xen/evtchn/evtchn_dev.c projects/pnfs-planb-server/sys/dev/xen/gntdev/gntdev.c projects/pnfs-planb-server/sys/dev/xen/netfront/netfront.c projects/pnfs-planb-server/sys/dev/xen/xenstore/xenstore.c projects/pnfs-planb-server/sys/dev/xen/xenstore/xenstore_dev.c projects/pnfs-planb-server/sys/dev/xl/if_xl.c projects/pnfs-planb-server/sys/dts/arm/db78100.dts projects/pnfs-planb-server/sys/dts/arm/db88f5182.dts projects/pnfs-planb-server/sys/dts/arm/db88f5281.dts projects/pnfs-planb-server/sys/dts/arm/db88f6281.dts projects/pnfs-planb-server/sys/dts/arm/dockstar.dts projects/pnfs-planb-server/sys/dts/arm/overlays/sun8i-a83t-sid.dtso projects/pnfs-planb-server/sys/dts/arm/overlays/sun8i-h3-sid.dtso projects/pnfs-planb-server/sys/dts/arm/sheevaplug.dts projects/pnfs-planb-server/sys/dts/arm/socfpga_arria10_socdk_sdmmc.dts projects/pnfs-planb-server/sys/dts/bindings-gpio.txt projects/pnfs-planb-server/sys/fs/cuse/cuse.c projects/pnfs-planb-server/sys/fs/devfs/devfs_vfsops.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_alloc.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_bmap.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_csum.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_extents.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_extents.h projects/pnfs-planb-server/sys/fs/ext2fs/ext2_extern.h projects/pnfs-planb-server/sys/fs/ext2fs/ext2_hash.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_htree.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_inode.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_inode_cnv.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_lookup.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_subr.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_vfsops.c projects/pnfs-planb-server/sys/fs/ext2fs/ext2_vnops.c projects/pnfs-planb-server/sys/fs/ext2fs/fs.h projects/pnfs-planb-server/sys/fs/fdescfs/fdesc_vfsops.c projects/pnfs-planb-server/sys/fs/fdescfs/fdesc_vnops.c projects/pnfs-planb-server/sys/fs/fuse/fuse_vfsops.c projects/pnfs-planb-server/sys/fs/msdosfs/msdosfs_conv.c projects/pnfs-planb-server/sys/fs/msdosfs/msdosfs_denode.c projects/pnfs-planb-server/sys/fs/msdosfs/msdosfs_fat.c projects/pnfs-planb-server/sys/fs/msdosfs/msdosfs_vnops.c projects/pnfs-planb-server/sys/fs/nfs/nfs.h projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-planb-server/sys/fs/nfs/nfs_var.h projects/pnfs-planb-server/sys/fs/nfs/nfsport.h projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clcomsubs.c projects/pnfs-planb-server/sys/fs/nfsclient/nfs_clrpcops.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdserv.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdsocket.c projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdstate.c projects/pnfs-planb-server/sys/fs/nullfs/null_vfsops.c projects/pnfs-planb-server/sys/fs/procfs/procfs.c projects/pnfs-planb-server/sys/fs/procfs/procfs.h projects/pnfs-planb-server/sys/fs/pseudofs/pseudofs.h projects/pnfs-planb-server/sys/fs/tmpfs/tmpfs_vfsops.c projects/pnfs-planb-server/sys/geom/eli/g_eli.c projects/pnfs-planb-server/sys/geom/eli/g_eli.h projects/pnfs-planb-server/sys/geom/eli/g_eli_ctl.c projects/pnfs-planb-server/sys/geom/eli/g_eli_key.c projects/pnfs-planb-server/sys/geom/geom_dev.c projects/pnfs-planb-server/sys/geom/mirror/g_mirror.c projects/pnfs-planb-server/sys/geom/part/g_part.c projects/pnfs-planb-server/sys/geom/part/g_part.h projects/pnfs-planb-server/sys/geom/part/g_part_ebr.c projects/pnfs-planb-server/sys/geom/part/g_part_ldm.c projects/pnfs-planb-server/sys/geom/part/g_part_mbr.c projects/pnfs-planb-server/sys/gnu/dts/arm/am335x-bone-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am335x-boneblue.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am335x-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am335x-evmsk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am335x-pepper.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am33xx-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am33xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am3517.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am4372.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am437x-gp-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am437x-idk-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am437x-sk-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am43x-epos-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am43xx-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/am571x-idk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am572x-idk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/am57xx-beagle-x15-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/animeo_ip.dts projects/pnfs-planb-server/sys/gnu/dts/arm/arm-realview-eb-mp.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/armada-38x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-ast2500-evb.dts projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-bmc-opp-palmetto.dts projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-bmc-opp-romulus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-g4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/aspeed-g5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91-ariag25.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-ariettag25.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-cosino.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91-foxg20.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-kizbox.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-kizbox2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-kizboxmini.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-linea.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91-qil_a9260.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sam9_l9260.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d27_som1_ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d2_xplained.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d3_xplained.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d4_ma5d4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d4_xplained.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-sama5d4ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91-vinco.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91rm9200.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91rm9200ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9260.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9260ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9261.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9261ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9263.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9263ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9g20ek_common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9g25ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9g45.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9m10g45ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9n12.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9n12ek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9rl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9rlek.dts projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9x5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/at91sam9x5cm.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/axp81x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm11351.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm21664.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2835-rpi-a-plus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2835-rpi-a.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2835-rpi-b-plus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2835-rpi-b-rev2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2835-rpi-b.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2835.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2836-rpi-2-b.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2836.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2837-rpi-3-b.dts projects/pnfs-planb-server/sys/gnu/dts/arm/bcm2837.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm283x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/bcm958625hr.dts projects/pnfs-planb-server/sys/gnu/dts/arm/dm814x-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dm814x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dm816x-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dm816x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra62x-j5eco-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/dra7-evm-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra7-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/dra7.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra72-evm-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra72-evm-tps65917.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra72x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra74x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/dra76-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/dra7xx-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/efm32gg-dk3750.dts projects/pnfs-planb-server/sys/gnu/dts/arm/ethernut5.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos3250-artik5-eval.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos3250-artik5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos3250-monk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos3250-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos3250-rinato.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos3250.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4-cpu-thermal.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4210-origen.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4210-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4210-smdkv310.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4210-trats.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4210-universal_c210.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4210.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-itop-elite.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-itop-scp-core.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-odroid-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-odroidu3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-odroidx.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-odroidx2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-origen.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-ppmu-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-prime.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-smdk4412.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412-trats2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos4412.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-arndale.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-smdk5250.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-snow-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-snow-rev5.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-snow.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250-spring.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5250.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5260-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5260-xyref5260.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5260.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5410-odroidxu.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5410-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5410-smdk5410.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5410.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-arndale-octa.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-cpus.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-peach-pit.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-smdk5420.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-tmu-sensor-conf.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420-trip-points.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5420.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-cpus.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroid-core.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroidhc1.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroidxu3-audio.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroidxu3-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroidxu3-lite.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroidxu3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5422-odroidxu4.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5440-sd5v1.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5440-ssdk5440.dts projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5440-tmu-sensor-conf.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5440-trip-points.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos5440.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos54xx-odroidxu-leds.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/exynos54xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/ge863-pro3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/gemini-dlink-dir-685.dts projects/pnfs-planb-server/sys/gnu/dts/arm/gemini-nas4220b.dts projects/pnfs-planb-server/sys/gnu/dts/arm/gemini-rut1xx.dts projects/pnfs-planb-server/sys/gnu/dts/arm/gemini-wbd111.dts projects/pnfs-planb-server/sys/gnu/dts/arm/gemini-wbd222.dts projects/pnfs-planb-server/sys/gnu/dts/arm/gemini.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx25.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx27-pdk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx27-phytec-phycore-rdk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx27-phytec-phycore-som.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx28.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx35.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx51-babbage.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx51-eukrea-mbimxsd51-baseboard.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx51-ts4800.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx51-zii-rdu1.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx51.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx53-cx9020.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx53-m53.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx53-tx53-x03x.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx53-tx53.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx53.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-aristainetos_4.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-aristainetos_7.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-colibri-eval-v3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-cubox-i.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-hummingboard.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-icore-rqs.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl-pinfunc.h projects/pnfs-planb-server/sys/gnu/dts/arm/imx6dl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-apalis-eval.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-apalis-ixora-v1.1.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-apalis-ixora.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-b450v3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-b650v3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-b850v3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-bx50v3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-cubox-i.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-display5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-h100.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-hummingboard.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6q-pinfunc.h projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-apalis.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-apf6dev.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-aristainetos.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-aristainetos2.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-colibri.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-cubox-i.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-hummingboard.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-nitrogen6_max.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-nitrogen6x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-sabreauto.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-udoo.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-wandboard-revd1.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl-zii-rdu2.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6qdl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6sl-evk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6sl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6sx-sdb.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6sx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx6ul-14x14-evk.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx6ul.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7-colibri-eval-v3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7-colibri.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-colibri-eval-v3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-colibri.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d-sdb.dts projects/pnfs-planb-server/sys/gnu/dts/arm/imx7d.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/imx7s.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/iwg20d-q7-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/iwg20d-q7-dbcm-ca.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2e-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2e-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2e-netcp.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2e.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2g-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2g-ice.dts projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2g.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2hk-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2hk-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2hk-netcp.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2hk.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2l-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2l-evm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2l-netcp.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone-k2l.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/keystone.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/kirkwood-linksys-viper.dts projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-som-lv-37xx-devkit.dts projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-som-lv.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-torpedo-37xx-devkit.dts projects/pnfs-planb-server/sys/gnu/dts/arm/logicpd-torpedo-som.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/lpc3250-ea3250.dts projects/pnfs-planb-server/sys/gnu/dts/arm/lpc3250-phy3250.dts projects/pnfs-planb-server/sys/gnu/dts/arm/lpc4337-ciaa.dts projects/pnfs-planb-server/sys/gnu/dts/arm/lpc4350-hitex-eval.dts projects/pnfs-planb-server/sys/gnu/dts/arm/lpc4357-ea4357-devkit.dts projects/pnfs-planb-server/sys/gnu/dts/arm/ls1021a-qds.dts projects/pnfs-planb-server/sys/gnu/dts/arm/ls1021a-twr.dts projects/pnfs-planb-server/sys/gnu/dts/arm/ls1021a.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/meson8.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/meson8b.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/mpa1600.dts projects/pnfs-planb-server/sys/gnu/dts/arm/mt2701.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/mt7623.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/mt7623n-bananapi-bpi-r2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/mt7623n-rfb-nand.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap2420-n8x0-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-cm-t3x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-evm-37xx.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-gta04.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-igep.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-lilly-a83x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-n9.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-n900.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-n950-n9.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-n950.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap3-pandora-common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap3430-sdp.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap34xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap36xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap4-droid4-xt894.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap44xx-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap5-uevm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/omap5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/omap54xx-clocks.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/pm9g45.dts projects/pnfs-planb-server/sys/gnu/dts/arm/qcom-msm8974-fairphone-fp2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r7s72100-genmai.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a73a4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7740-armadillo800eva.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7740.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7743.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7745-iwg22d-sodimm.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7745.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7778.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7779.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7790-lager.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7790.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7791-koelsch.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7791.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7792.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7793.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7794-alt.dts projects/pnfs-planb-server/sys/gnu/dts/arm/r8a7794.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/rk3036.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/rk3066a-rayeager.dts projects/pnfs-planb-server/sys/gnu/dts/arm/rk322x.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/rk3288-phycore-som.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/rk3288.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c2416-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c2416-smdk2416.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s3c2416.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c24xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c6400.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c6410-mini6410.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s3c6410-smdk6410.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s3c6410.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c64xx-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s3c64xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210-aquila.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210-goni.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210-pinctrl.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210-smdkc110.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210-smdkv210.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210-torbreck.dts projects/pnfs-planb-server/sys/gnu/dts/arm/s5pv210.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d2.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d3_tcb1.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d3xcm.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d3xcm_cmp.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d3xmb.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d3xmb_cmp.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sama5d4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sh73a0.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/socfpga.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/socfpga_arria10_socdk.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/socfpga_cyclone5_vining_fpga.dts projects/pnfs-planb-server/sys/gnu/dts/arm/spear1310-evb.dts projects/pnfs-planb-server/sys/gnu/dts/arm/spear1340.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/spear13xx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/spear600.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/ste-nomadik-stn8815.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/stih407.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/stih410.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sun5i-a13-olinuxino.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun6i-a31s-sinovoip-bpi-m2.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun7i-a20-pcduino3-nano.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-a83t-bananapi-m3.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-a83t-cubietruck-plus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-a83t-tbs-a711.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-a83t.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3-bananapi-m2-plus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3-nanopi-m1-plus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3-nanopi-m1.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3-nanopi-neo.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3-orangepi-plus.dts projects/pnfs-planb-server/sys/gnu/dts/arm/sun8i-h3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/sunxi-h3-h5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/tegra20.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/tny_a9260_common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/tny_a9263.dts projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-ld4-ref.dts projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-ld4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-ld6b-ref.dts projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-pro4-ref.dts projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-pro4.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-pro5.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-pxs2.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-sld8-ref.dts projects/pnfs-planb-server/sys/gnu/dts/arm/uniphier-sld8.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/usb_a9260_common.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/usb_a9263.dts projects/pnfs-planb-server/sys/gnu/dts/arm/vf-colibri-eval-v3.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/vf500.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/vf610-zii-dev-rev-b.dts projects/pnfs-planb-server/sys/gnu/dts/arm/vf610-zii-dev-rev-c.dts projects/pnfs-planb-server/sys/gnu/dts/arm/vf610-zii-dev.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/vfxxx.dtsi projects/pnfs-planb-server/sys/gnu/dts/arm/zx296702.dtsi projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/hi3660-clock.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/clock/qcom,gcc-ipq8074.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/gpio/gpio.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/input/linux-event-codes.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/pinctrl/am43xx.h projects/pnfs-planb-server/sys/gnu/dts/include/dt-bindings/pinctrl/stm32-pinfunc.h projects/pnfs-planb-server/sys/i386/bios/apm.c projects/pnfs-planb-server/sys/i386/conf/GENERIC projects/pnfs-planb-server/sys/i386/conf/NOTES projects/pnfs-planb-server/sys/i386/i386/copyout.c projects/pnfs-planb-server/sys/i386/i386/elf_machdep.c projects/pnfs-planb-server/sys/i386/i386/exception.s projects/pnfs-planb-server/sys/i386/i386/genassym.c projects/pnfs-planb-server/sys/i386/i386/machdep.c projects/pnfs-planb-server/sys/i386/i386/minidump_machdep.c projects/pnfs-planb-server/sys/i386/i386/pmap.c projects/pnfs-planb-server/sys/i386/i386/prof_machdep.c projects/pnfs-planb-server/sys/i386/i386/support.s projects/pnfs-planb-server/sys/i386/i386/swtch.s projects/pnfs-planb-server/sys/i386/i386/trap.c projects/pnfs-planb-server/sys/i386/include/asmacros.h projects/pnfs-planb-server/sys/i386/include/atomic.h projects/pnfs-planb-server/sys/i386/include/clock.h projects/pnfs-planb-server/sys/i386/include/db_machdep.h projects/pnfs-planb-server/sys/i386/include/ieeefp.h projects/pnfs-planb-server/sys/i386/include/md_var.h projects/pnfs-planb-server/sys/i386/include/pcb_ext.h projects/pnfs-planb-server/sys/i386/include/pcpu.h projects/pnfs-planb-server/sys/i386/include/pmc_mdep.h projects/pnfs-planb-server/sys/i386/include/profile.h projects/pnfs-planb-server/sys/i386/linux/linux_sysvec.c projects/pnfs-planb-server/sys/kern/imgact_binmisc.c projects/pnfs-planb-server/sys/kern/imgact_elf.c projects/pnfs-planb-server/sys/kern/init_main.c projects/pnfs-planb-server/sys/kern/init_sysent.c projects/pnfs-planb-server/sys/kern/kern_clock.c projects/pnfs-planb-server/sys/kern/kern_clocksource.c projects/pnfs-planb-server/sys/kern/kern_conf.c projects/pnfs-planb-server/sys/kern/kern_cons.c projects/pnfs-planb-server/sys/kern/kern_cpu.c projects/pnfs-planb-server/sys/kern/kern_cpuset.c projects/pnfs-planb-server/sys/kern/kern_descrip.c projects/pnfs-planb-server/sys/kern/kern_dtrace.c projects/pnfs-planb-server/sys/kern/kern_dump.c projects/pnfs-planb-server/sys/kern/kern_event.c projects/pnfs-planb-server/sys/kern/kern_exec.c projects/pnfs-planb-server/sys/kern/kern_intr.c projects/pnfs-planb-server/sys/kern/kern_jail.c projects/pnfs-planb-server/sys/kern/kern_ktrace.c projects/pnfs-planb-server/sys/kern/kern_linker.c projects/pnfs-planb-server/sys/kern/kern_lock.c projects/pnfs-planb-server/sys/kern/kern_lockf.c projects/pnfs-planb-server/sys/kern/kern_lockstat.c projects/pnfs-planb-server/sys/kern/kern_loginclass.c projects/pnfs-planb-server/sys/kern/kern_malloc.c projects/pnfs-planb-server/sys/kern/kern_mbuf.c projects/pnfs-planb-server/sys/kern/kern_mib.c projects/pnfs-planb-server/sys/kern/kern_module.c projects/pnfs-planb-server/sys/kern/kern_physio.c projects/pnfs-planb-server/sys/kern/kern_pmc.c projects/pnfs-planb-server/sys/kern/kern_procctl.c projects/pnfs-planb-server/sys/kern/kern_prot.c projects/pnfs-planb-server/sys/kern/kern_racct.c projects/pnfs-planb-server/sys/kern/kern_rctl.c projects/pnfs-planb-server/sys/kern/kern_rmlock.c projects/pnfs-planb-server/sys/kern/kern_rwlock.c projects/pnfs-planb-server/sys/kern/kern_sendfile.c projects/pnfs-planb-server/sys/kern/kern_shutdown.c projects/pnfs-planb-server/sys/kern/kern_sig.c projects/pnfs-planb-server/sys/kern/kern_switch.c projects/pnfs-planb-server/sys/kern/kern_sx.c projects/pnfs-planb-server/sys/kern/kern_synch.c projects/pnfs-planb-server/sys/kern/kern_syscalls.c projects/pnfs-planb-server/sys/kern/kern_sysctl.c projects/pnfs-planb-server/sys/kern/kern_tc.c projects/pnfs-planb-server/sys/kern/kern_thr.c projects/pnfs-planb-server/sys/kern/kern_thread.c projects/pnfs-planb-server/sys/kern/kern_umtx.c projects/pnfs-planb-server/sys/kern/link_elf.c projects/pnfs-planb-server/sys/kern/link_elf_obj.c projects/pnfs-planb-server/sys/kern/posix4_mib.c projects/pnfs-planb-server/sys/kern/sched_4bsd.c projects/pnfs-planb-server/sys/kern/sched_ule.c projects/pnfs-planb-server/sys/kern/subr_bus.c projects/pnfs-planb-server/sys/kern/subr_capability.c projects/pnfs-planb-server/sys/kern/subr_gtaskqueue.c projects/pnfs-planb-server/sys/kern/subr_kdb.c projects/pnfs-planb-server/sys/kern/subr_pcpu.c projects/pnfs-planb-server/sys/kern/subr_pidctrl.c projects/pnfs-planb-server/sys/kern/subr_prf.c projects/pnfs-planb-server/sys/kern/subr_prof.c projects/pnfs-planb-server/sys/kern/subr_sleepqueue.c projects/pnfs-planb-server/sys/kern/subr_syscall.c projects/pnfs-planb-server/sys/kern/subr_terminal.c projects/pnfs-planb-server/sys/kern/subr_trap.c projects/pnfs-planb-server/sys/kern/subr_turnstile.c projects/pnfs-planb-server/sys/kern/subr_uio.c projects/pnfs-planb-server/sys/kern/subr_witness.c projects/pnfs-planb-server/sys/kern/sys_capability.c projects/pnfs-planb-server/sys/kern/sys_generic.c projects/pnfs-planb-server/sys/kern/sys_pipe.c projects/pnfs-planb-server/sys/kern/sys_procdesc.c projects/pnfs-planb-server/sys/kern/sys_process.c projects/pnfs-planb-server/sys/kern/syscalls.c projects/pnfs-planb-server/sys/kern/syscalls.master projects/pnfs-planb-server/sys/kern/systrace_args.c projects/pnfs-planb-server/sys/kern/sysv_msg.c projects/pnfs-planb-server/sys/kern/tty_inq.c projects/pnfs-planb-server/sys/kern/tty_outq.c projects/pnfs-planb-server/sys/kern/uipc_mbuf.c projects/pnfs-planb-server/sys/kern/uipc_mqueue.c projects/pnfs-planb-server/sys/kern/uipc_sem.c projects/pnfs-planb-server/sys/kern/uipc_sockbuf.c projects/pnfs-planb-server/sys/kern/uipc_syscalls.c projects/pnfs-planb-server/sys/kern/uipc_usrreq.c projects/pnfs-planb-server/sys/kern/vfs_aio.c projects/pnfs-planb-server/sys/kern/vfs_bio.c projects/pnfs-planb-server/sys/kern/vfs_cache.c projects/pnfs-planb-server/sys/kern/vfs_cluster.c projects/pnfs-planb-server/sys/kern/vfs_default.c projects/pnfs-planb-server/sys/kern/vfs_init.c projects/pnfs-planb-server/sys/kern/vfs_lookup.c projects/pnfs-planb-server/sys/kern/vfs_mount.c projects/pnfs-planb-server/sys/kern/vfs_subr.c projects/pnfs-planb-server/sys/kern/vfs_syscalls.c projects/pnfs-planb-server/sys/kern/vfs_vnops.c projects/pnfs-planb-server/sys/libkern/bcmp.c projects/pnfs-planb-server/sys/libkern/mcount.c projects/pnfs-planb-server/sys/libkern/memcmp.c projects/pnfs-planb-server/sys/libkern/memset.c projects/pnfs-planb-server/sys/libkern/strlen.c projects/pnfs-planb-server/sys/mips/conf/MALTA64EL projects/pnfs-planb-server/sys/mips/conf/std.MALTA projects/pnfs-planb-server/sys/mips/include/cpufunc.h projects/pnfs-planb-server/sys/mips/include/proc.h projects/pnfs-planb-server/sys/mips/mips/bcopy.S projects/pnfs-planb-server/sys/mips/mips/minidump_machdep.c projects/pnfs-planb-server/sys/mips/mips/pm_machdep.c projects/pnfs-planb-server/sys/mips/mips/trap.c projects/pnfs-planb-server/sys/modules/Makefile projects/pnfs-planb-server/sys/modules/asmc/Makefile projects/pnfs-planb-server/sys/modules/blake2/Makefile projects/pnfs-planb-server/sys/modules/bxe/Makefile projects/pnfs-planb-server/sys/modules/crypto/Makefile projects/pnfs-planb-server/sys/modules/cxgbe/if_cxgbe/Makefile projects/pnfs-planb-server/sys/modules/cxgbe/t4_firmware/Makefile projects/pnfs-planb-server/sys/modules/cxgbe/t5_firmware/Makefile projects/pnfs-planb-server/sys/modules/cxgbe/t6_firmware/Makefile projects/pnfs-planb-server/sys/modules/drm2/i915kms/Makefile projects/pnfs-planb-server/sys/modules/drm2/radeonkms/Makefile projects/pnfs-planb-server/sys/modules/dtb/allwinner/Makefile projects/pnfs-planb-server/sys/modules/hwpmc/Makefile projects/pnfs-planb-server/sys/modules/ipfilter/Makefile projects/pnfs-planb-server/sys/modules/ipfw_nat64/Makefile projects/pnfs-planb-server/sys/modules/ixl/Makefile projects/pnfs-planb-server/sys/modules/linux/Makefile projects/pnfs-planb-server/sys/modules/mlx5/Makefile projects/pnfs-planb-server/sys/modules/mlx5en/Makefile projects/pnfs-planb-server/sys/modules/mlx5ib/Makefile projects/pnfs-planb-server/sys/modules/ocs_fc/Makefile projects/pnfs-planb-server/sys/modules/usb/Makefile projects/pnfs-planb-server/sys/modules/usb/template/Makefile projects/pnfs-planb-server/sys/net/altq/altq_subr.c projects/pnfs-planb-server/sys/net/bpf.c projects/pnfs-planb-server/sys/net/bridgestp.c projects/pnfs-planb-server/sys/net/dlt.h projects/pnfs-planb-server/sys/net/if.c projects/pnfs-planb-server/sys/net/if.h projects/pnfs-planb-server/sys/net/if_bridge.c projects/pnfs-planb-server/sys/net/if_bridgevar.h projects/pnfs-planb-server/sys/net/if_clone.c projects/pnfs-planb-server/sys/net/if_clone.h projects/pnfs-planb-server/sys/net/if_epair.c projects/pnfs-planb-server/sys/net/if_ethersubr.c projects/pnfs-planb-server/sys/net/if_ipsec.c projects/pnfs-planb-server/sys/net/if_lagg.c projects/pnfs-planb-server/sys/net/if_lagg.h projects/pnfs-planb-server/sys/net/if_llatbl.c projects/pnfs-planb-server/sys/net/if_llatbl.h projects/pnfs-planb-server/sys/net/if_loop.c projects/pnfs-planb-server/sys/net/if_media.c projects/pnfs-planb-server/sys/net/if_media.h projects/pnfs-planb-server/sys/net/if_spppsubr.c projects/pnfs-planb-server/sys/net/if_stf.c projects/pnfs-planb-server/sys/net/if_tap.c projects/pnfs-planb-server/sys/net/if_tun.c projects/pnfs-planb-server/sys/net/if_var.h projects/pnfs-planb-server/sys/net/if_vlan.c projects/pnfs-planb-server/sys/net/if_vxlan.c projects/pnfs-planb-server/sys/net/ifdi_if.m projects/pnfs-planb-server/sys/net/iflib.c projects/pnfs-planb-server/sys/net/iflib.h projects/pnfs-planb-server/sys/net/mp_ring.c projects/pnfs-planb-server/sys/net/pfvar.h projects/pnfs-planb-server/sys/net/route.c projects/pnfs-planb-server/sys/net/rtsock.c projects/pnfs-planb-server/sys/net/vnet.c projects/pnfs-planb-server/sys/netgraph/ng_eiface.c projects/pnfs-planb-server/sys/netgraph/ng_ether.c projects/pnfs-planb-server/sys/netgraph/ng_gif.c projects/pnfs-planb-server/sys/netinet/cc/cc_cubic.h projects/pnfs-planb-server/sys/netinet/cc/cc_newreno.c projects/pnfs-planb-server/sys/netinet/if_ether.c projects/pnfs-planb-server/sys/netinet/igmp.c projects/pnfs-planb-server/sys/netinet/igmp_var.h projects/pnfs-planb-server/sys/netinet/in.c projects/pnfs-planb-server/sys/netinet/in_debug.c projects/pnfs-planb-server/sys/netinet/in_mcast.c projects/pnfs-planb-server/sys/netinet/in_pcb.c projects/pnfs-planb-server/sys/netinet/in_pcb.h projects/pnfs-planb-server/sys/netinet/in_proto.c projects/pnfs-planb-server/sys/netinet/in_var.h projects/pnfs-planb-server/sys/netinet/ip_carp.c projects/pnfs-planb-server/sys/netinet/ip_divert.c projects/pnfs-planb-server/sys/netinet/ip_encap.c projects/pnfs-planb-server/sys/netinet/ip_encap.h projects/pnfs-planb-server/sys/netinet/ip_icmp.c projects/pnfs-planb-server/sys/netinet/ip_input.c projects/pnfs-planb-server/sys/netinet/ip_mroute.c projects/pnfs-planb-server/sys/netinet/ip_options.c projects/pnfs-planb-server/sys/netinet/ip_output.c projects/pnfs-planb-server/sys/netinet/ip_var.h projects/pnfs-planb-server/sys/netinet/raw_ip.c projects/pnfs-planb-server/sys/netinet/sctp_auth.c projects/pnfs-planb-server/sys/netinet/sctp_bsd_addr.c projects/pnfs-planb-server/sys/netinet/sctp_indata.c projects/pnfs-planb-server/sys/netinet/sctp_output.c projects/pnfs-planb-server/sys/netinet/sctp_pcb.c projects/pnfs-planb-server/sys/netinet/sctp_syscalls.c projects/pnfs-planb-server/sys/netinet/sctputil.c projects/pnfs-planb-server/sys/netinet/siftr.c projects/pnfs-planb-server/sys/netinet/tcp_fastopen.c projects/pnfs-planb-server/sys/netinet/tcp_hpts.c projects/pnfs-planb-server/sys/netinet/tcp_hpts.h projects/pnfs-planb-server/sys/netinet/tcp_input.c projects/pnfs-planb-server/sys/netinet/tcp_output.c projects/pnfs-planb-server/sys/netinet/tcp_subr.c projects/pnfs-planb-server/sys/netinet/tcp_syncache.c projects/pnfs-planb-server/sys/netinet/tcp_timer.c projects/pnfs-planb-server/sys/netinet/tcp_timewait.c projects/pnfs-planb-server/sys/netinet/tcp_var.h projects/pnfs-planb-server/sys/netinet/udp_usrreq.c projects/pnfs-planb-server/sys/netinet6/icmp6.c projects/pnfs-planb-server/sys/netinet6/in6.c projects/pnfs-planb-server/sys/netinet6/in6_ifattach.c projects/pnfs-planb-server/sys/netinet6/in6_mcast.c projects/pnfs-planb-server/sys/netinet6/in6_pcb.c projects/pnfs-planb-server/sys/netinet6/in6_proto.c projects/pnfs-planb-server/sys/netinet6/in6_src.c projects/pnfs-planb-server/sys/netinet6/in6_var.h projects/pnfs-planb-server/sys/netinet6/ip6_fastfwd.c projects/pnfs-planb-server/sys/netinet6/ip6_input.c projects/pnfs-planb-server/sys/netinet6/ip6_var.h projects/pnfs-planb-server/sys/netinet6/mld6.c projects/pnfs-planb-server/sys/netinet6/mld6_var.h projects/pnfs-planb-server/sys/netinet6/nd6.c projects/pnfs-planb-server/sys/netinet6/nd6_rtr.c projects/pnfs-planb-server/sys/netinet6/raw_ip6.c projects/pnfs-planb-server/sys/netipsec/ipsec.h projects/pnfs-planb-server/sys/netipsec/ipsec_mbuf.c projects/pnfs-planb-server/sys/netipsec/key.c projects/pnfs-planb-server/sys/netpfil/ipfw/ip_fw2.c projects/pnfs-planb-server/sys/netpfil/ipfw/ip_fw_dynamic.c projects/pnfs-planb-server/sys/netpfil/ipfw/ip_fw_nat.c projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/ip_fw_nat64.c projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/ip_fw_nat64.h projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64_translate.c projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64_translate.h projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64lsn.c projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64lsn.h projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64lsn_control.c projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64stl.c projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64stl.h projects/pnfs-planb-server/sys/netpfil/ipfw/nat64/nat64stl_control.c projects/pnfs-planb-server/sys/netpfil/pf/if_pfsync.c projects/pnfs-planb-server/sys/netpfil/pf/pf.c projects/pnfs-planb-server/sys/netpfil/pf/pf_if.c projects/pnfs-planb-server/sys/netpfil/pf/pf_ioctl.c projects/pnfs-planb-server/sys/netpfil/pf/pf_lb.c projects/pnfs-planb-server/sys/netpfil/pf/pf_norm.c projects/pnfs-planb-server/sys/netpfil/pf/pf_osfp.c projects/pnfs-planb-server/sys/netpfil/pf/pf_table.c projects/pnfs-planb-server/sys/netsmb/smb_dev.c projects/pnfs-planb-server/sys/nfs/bootp_subr.c projects/pnfs-planb-server/sys/nfs/nfs_diskless.c projects/pnfs-planb-server/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c projects/pnfs-planb-server/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c projects/pnfs-planb-server/sys/ofed/include/rdma/ib_addr.h projects/pnfs-planb-server/sys/powerpc/aim/aim_machdep.c projects/pnfs-planb-server/sys/powerpc/aim/mmu_oea64.c projects/pnfs-planb-server/sys/powerpc/aim/mmu_oea64.h projects/pnfs-planb-server/sys/powerpc/aim/moea64_native.c projects/pnfs-planb-server/sys/powerpc/aim/mp_cpudep.c projects/pnfs-planb-server/sys/powerpc/aim/trap_subr64.S projects/pnfs-planb-server/sys/powerpc/booke/locore.S projects/pnfs-planb-server/sys/powerpc/booke/pmap.c projects/pnfs-planb-server/sys/powerpc/conf/GENERIC projects/pnfs-planb-server/sys/powerpc/conf/GENERIC64 projects/pnfs-planb-server/sys/powerpc/include/cpu.h projects/pnfs-planb-server/sys/powerpc/include/db_machdep.h projects/pnfs-planb-server/sys/powerpc/include/elf.h projects/pnfs-planb-server/sys/powerpc/include/fpu.h projects/pnfs-planb-server/sys/powerpc/include/hid.h projects/pnfs-planb-server/sys/powerpc/include/md_var.h projects/pnfs-planb-server/sys/powerpc/include/pcb.h projects/pnfs-planb-server/sys/powerpc/include/pte.h projects/pnfs-planb-server/sys/powerpc/include/ptrace.h projects/pnfs-planb-server/sys/powerpc/include/spr.h projects/pnfs-planb-server/sys/powerpc/include/trap.h projects/pnfs-planb-server/sys/powerpc/include/vmparam.h projects/pnfs-planb-server/sys/powerpc/mpc85xx/mpc85xx.c projects/pnfs-planb-server/sys/powerpc/mpc85xx/mpc85xx.h projects/pnfs-planb-server/sys/powerpc/mpc85xx/platform_mpc85xx.c projects/pnfs-planb-server/sys/powerpc/ofw/ofw_machdep.c projects/pnfs-planb-server/sys/powerpc/powermac/macio.c projects/pnfs-planb-server/sys/powerpc/powernv/opal.h projects/pnfs-planb-server/sys/powerpc/powernv/opal_console.c projects/pnfs-planb-server/sys/powerpc/powernv/opal_pci.c projects/pnfs-planb-server/sys/powerpc/powernv/platform_powernv.c projects/pnfs-planb-server/sys/powerpc/powerpc/cpu.c projects/pnfs-planb-server/sys/powerpc/powerpc/elf32_machdep.c projects/pnfs-planb-server/sys/powerpc/powerpc/elf64_machdep.c projects/pnfs-planb-server/sys/powerpc/powerpc/exec_machdep.c projects/pnfs-planb-server/sys/powerpc/powerpc/fpu.c projects/pnfs-planb-server/sys/powerpc/powerpc/genassym.c projects/pnfs-planb-server/sys/powerpc/powerpc/interrupt.c projects/pnfs-planb-server/sys/powerpc/powerpc/machdep.c projects/pnfs-planb-server/sys/powerpc/powerpc/ptrace_machdep.c projects/pnfs-planb-server/sys/powerpc/powerpc/swtch64.S projects/pnfs-planb-server/sys/powerpc/ps3/if_glc.c projects/pnfs-planb-server/sys/powerpc/pseries/mmu_phyp.c projects/pnfs-planb-server/sys/powerpc/pseries/phyp_llan.c projects/pnfs-planb-server/sys/powerpc/pseries/platform_chrp.c projects/pnfs-planb-server/sys/powerpc/pseries/xics.c projects/pnfs-planb-server/sys/riscv/include/cpufunc.h projects/pnfs-planb-server/sys/security/audit/audit_bsm.c projects/pnfs-planb-server/sys/security/audit/audit_ioctl.h projects/pnfs-planb-server/sys/sparc64/conf/GENERIC projects/pnfs-planb-server/sys/sparc64/sparc64/dump_machdep.c projects/pnfs-planb-server/sys/sparc64/sparc64/support.S projects/pnfs-planb-server/sys/sparc64/sparc64/trap.c projects/pnfs-planb-server/sys/sys/_stdarg.h projects/pnfs-planb-server/sys/sys/buf.h projects/pnfs-planb-server/sys/sys/buf_ring.h projects/pnfs-planb-server/sys/sys/bus.h projects/pnfs-planb-server/sys/sys/capsicum.h projects/pnfs-planb-server/sys/sys/conf.h projects/pnfs-planb-server/sys/sys/cons.h projects/pnfs-planb-server/sys/sys/disk/mbr.h projects/pnfs-planb-server/sys/sys/elf_common.h projects/pnfs-planb-server/sys/sys/gtaskqueue.h projects/pnfs-planb-server/sys/sys/imgact_elf.h projects/pnfs-planb-server/sys/sys/jail.h projects/pnfs-planb-server/sys/sys/kern_prefetch.h projects/pnfs-planb-server/sys/sys/ktrace.h projects/pnfs-planb-server/sys/sys/libkern.h projects/pnfs-planb-server/sys/sys/linker.h projects/pnfs-planb-server/sys/sys/lockstat.h projects/pnfs-planb-server/sys/sys/malloc.h projects/pnfs-planb-server/sys/sys/mbuf.h projects/pnfs-planb-server/sys/sys/mount.h projects/pnfs-planb-server/sys/sys/param.h projects/pnfs-planb-server/sys/sys/pmc.h projects/pnfs-planb-server/sys/sys/pmckern.h projects/pnfs-planb-server/sys/sys/pmclog.h projects/pnfs-planb-server/sys/sys/proc.h projects/pnfs-planb-server/sys/sys/procctl.h projects/pnfs-planb-server/sys/sys/random.h projects/pnfs-planb-server/sys/sys/sched.h projects/pnfs-planb-server/sys/sys/sx.h projects/pnfs-planb-server/sys/sys/syscall.h projects/pnfs-planb-server/sys/sys/syscall.mk projects/pnfs-planb-server/sys/sys/sysctl.h projects/pnfs-planb-server/sys/sys/sysent.h projects/pnfs-planb-server/sys/sys/sysproto.h projects/pnfs-planb-server/sys/sys/systm.h projects/pnfs-planb-server/sys/sys/terminal.h projects/pnfs-planb-server/sys/sys/turnstile.h projects/pnfs-planb-server/sys/sys/unpcb.h projects/pnfs-planb-server/sys/sys/vmmeter.h projects/pnfs-planb-server/sys/sys/zutil.h projects/pnfs-planb-server/sys/teken/gensequences projects/pnfs-planb-server/sys/teken/sequences projects/pnfs-planb-server/sys/teken/teken.c projects/pnfs-planb-server/sys/teken/teken.h projects/pnfs-planb-server/sys/teken/teken_subr.h projects/pnfs-planb-server/sys/ufs/ffs/ffs_alloc.c projects/pnfs-planb-server/sys/ufs/ffs/ffs_softdep.c projects/pnfs-planb-server/sys/ufs/ffs/ffs_vnops.c projects/pnfs-planb-server/sys/ufs/ufs/ufs_gjournal.c projects/pnfs-planb-server/sys/vm/uma.h projects/pnfs-planb-server/sys/vm/uma_core.c projects/pnfs-planb-server/sys/vm/uma_int.h projects/pnfs-planb-server/sys/vm/vm_domainset.c projects/pnfs-planb-server/sys/vm/vm_fault.c projects/pnfs-planb-server/sys/vm/vm_meter.c projects/pnfs-planb-server/sys/vm/vm_mmap.c projects/pnfs-planb-server/sys/vm/vm_object.c projects/pnfs-planb-server/sys/vm/vm_page.c projects/pnfs-planb-server/sys/vm/vm_page.h projects/pnfs-planb-server/sys/vm/vm_pageout.c projects/pnfs-planb-server/sys/vm/vm_pagequeue.h projects/pnfs-planb-server/sys/vm/vm_phys.c projects/pnfs-planb-server/sys/vm/vm_swapout.c projects/pnfs-planb-server/sys/vm/vm_unix.c projects/pnfs-planb-server/sys/x86/acpica/acpi_wakeup.c projects/pnfs-planb-server/sys/x86/include/reg.h projects/pnfs-planb-server/sys/x86/include/specialreg.h projects/pnfs-planb-server/sys/x86/include/x86_var.h projects/pnfs-planb-server/sys/x86/x86/cpu_machdep.c projects/pnfs-planb-server/sys/x86/x86/identcpu.c projects/pnfs-planb-server/sys/x86/x86/local_apic.c projects/pnfs-planb-server/sys/x86/x86/mca.c projects/pnfs-planb-server/sys/x86/x86/mp_x86.c projects/pnfs-planb-server/sys/x86/x86/tsc.c projects/pnfs-planb-server/sys/x86/xen/pv.c projects/pnfs-planb-server/sys/x86/xen/xen_apic.c projects/pnfs-planb-server/sys/xen/gntdev.h projects/pnfs-planb-server/sys/xen/gnttab.h Directory Properties: projects/pnfs-planb-server/sys/ (props changed) projects/pnfs-planb-server/sys/cddl/contrib/opensolaris/ (props changed) projects/pnfs-planb-server/sys/contrib/ck/ (props changed) projects/pnfs-planb-server/sys/contrib/dev/acpica/ (props changed) projects/pnfs-planb-server/sys/contrib/ena-com/ (props changed) projects/pnfs-planb-server/sys/contrib/ipfilter/ (props changed) projects/pnfs-planb-server/sys/gnu/dts/arm/ (props changed) projects/pnfs-planb-server/sys/gnu/dts/include/ (props changed) Modified: projects/pnfs-planb-server/sys/amd64/amd64/cpu_switch.S ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/cpu_switch.S Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/cpu_switch.S Sat Jun 2 21:16:20 2018 (r334539) @@ -215,10 +215,13 @@ done_tss: movq %r8,PCPU(RSP0) movq %r8,PCPU(CURPCB) /* Update the TSS_RSP0 pointer for the next interrupt */ - cmpb $0,pti(%rip) - jne 1f - movq %r8,TSS_RSP0(%rdx) -1: movq %r12,PCPU(CURTHREAD) /* into next thread */ + cmpq $~0,PCPU(UCR3) + je 1f + movq PCPU(PTI_RSP0),%rax + movq %rax,TSS_RSP0(%rdx) + jmp 2f +1: movq %r8,TSS_RSP0(%rdx) +2: movq %r12,PCPU(CURTHREAD) /* into next thread */ /* Test if debug registers should be restored. */ testl $PCB_DBREGS,PCB_FLAGS(%r8) @@ -295,12 +298,7 @@ do_tss: movq %rdx,PCPU(TSSP) shrq $8,%rcx movl %ecx,8(%rax) movb $0x89,5(%rax) /* unset busy */ - cmpb $0,pti(%rip) - je 1f - movq PCPU(PRVSPACE),%rax - addq $PC_PTI_STACK+PC_PTI_STACK_SZ*8,%rax - movq %rax,TSS_RSP0(%rdx) -1: movl $TSSSEL,%eax + movl $TSSSEL,%eax ltr %ax jmp done_tss Modified: projects/pnfs-planb-server/sys/amd64/amd64/elf_machdep.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/elf_machdep.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/elf_machdep.c Sat Jun 2 21:16:20 2018 (r334539) @@ -175,10 +175,13 @@ elf64_dump_thread(struct thread *td, void *dst, size_t *off = len; } +#define ERI_LOCAL 0x0001 +#define ERI_ONLYIFUNC 0x0002 + /* Process one elf relocation with addend. */ static int elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, - int type, int local, elf_lookup_fn lookup) + int type, elf_lookup_fn lookup, int flags) { Elf64_Addr *where, val; Elf32_Addr *where32, val32; @@ -218,8 +221,10 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas panic("unknown reloc type %d\n", type); } - switch (rtype) { + if (((flags & ERI_ONLYIFUNC) == 0) ^ (rtype != R_X86_64_IRELATIVE)) + return (0); + switch (rtype) { case R_X86_64_NONE: /* none */ break; @@ -260,7 +265,7 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas * objects. */ printf("kldload: unexpected R_COPY relocation\n"); - return -1; + return (-1); break; case R_X86_64_GLOB_DAT: /* S */ @@ -279,20 +284,36 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas *where = val; break; + case R_X86_64_IRELATIVE: + addr = relocbase + addend; + val = ((Elf64_Addr (*)(void))addr)(); + if (*where != val) + *where = val; + break; + default: printf("kldload: unexpected relocation type %ld\n", rtype); - return -1; + return (-1); } - return(0); + return (0); } int +elf_reloc_ifunc(linker_file_t lf, Elf_Addr relocbase, const void *data, + int type, elf_lookup_fn lookup) +{ + + return (elf_reloc_internal(lf, relocbase, data, type, lookup, + ERI_ONLYIFUNC)); +} + +int elf_reloc(linker_file_t lf, Elf_Addr relocbase, const void *data, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 0, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, lookup, 0)); } int @@ -300,7 +321,8 @@ elf_reloc_local(linker_file_t lf, Elf_Addr relocbase, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 1, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, lookup, + ERI_LOCAL)); } int Modified: projects/pnfs-planb-server/sys/amd64/amd64/exception.S ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/exception.S Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/exception.S Sat Jun 2 21:16:20 2018 (r334539) @@ -115,7 +115,6 @@ X\l: subq $TF_RIP,%rsp jmp alltraps_noen .endm - TRAP_NOEN dbg, T_TRCTRAP TRAP_NOEN bpt, T_BPTFLT #ifdef KDTRACE_HOOKS TRAP_NOEN dtrace_ret, T_DTRACE_RET @@ -298,11 +297,15 @@ IDTVEC(page_pti) jz Xpage swapgs pushq %rax - pushq %rdx movq %cr3,%rax movq %rax,PCPU(SAVED_UCR3) + cmpq $~0,PCPU(UCR3) + jne 1f + popq %rax + jmp 2f +1: pushq %rdx PTI_UUENTRY has_err=1 - subq $TF_ERR,%rsp +2: subq $TF_ERR,%rsp movq %rdi,TF_RDI(%rsp) movq %rax,TF_RAX(%rsp) movq %rdx,TF_RDX(%rsp) @@ -341,21 +344,30 @@ page_cr2: * On the stack, we have the hardware interrupt frame to return * to usermode (faulted) and another frame with error code, for * fault. For PTI, copy both frames to the main thread stack. + * Handle the potential 16-byte alignment adjustment incurred + * during the second fault by copying both frames independently + * while unwinding the stack in between. */ .macro PROTF_ENTRY name,trapno \name\()_pti_doreti: + swapgs + cmpq $~0,PCPU(UCR3) + je 1f pushq %rax pushq %rdx - swapgs movq PCPU(KCR3),%rax movq %rax,%cr3 movq PCPU(RSP0),%rax subq $2*PTI_SIZE-3*8,%rax /* no err, %rax, %rdx in faulted frame */ - MOVE_STACKS (PTI_SIZE / 4 - 3) + MOVE_STACKS (PTI_SIZE / 8) + addq $PTI_SIZE,%rax + movq PTI_RSP(%rsp),%rsp + MOVE_STACKS (PTI_SIZE / 8 - 3) + subq $PTI_SIZE,%rax movq %rax,%rsp popq %rdx popq %rax - swapgs +1: swapgs jmp X\name IDTVEC(\name\()_pti) cmpq $doreti_iret,PTI_RIP-2*8(%rsp) @@ -431,6 +443,8 @@ prot_addrf: IDTVEC(fast_syscall_pti) swapgs movq %rax,PCPU(SCRATCH_RAX) + cmpq $~0,PCPU(UCR3) + je fast_syscall_common movq PCPU(KCR3),%rax movq %rax,%cr3 jmp fast_syscall_common @@ -449,8 +463,16 @@ fast_syscall_common: movq PCPU(SCRATCH_RSP),%r11 /* %r11 already saved */ movq %r11,TF_RSP(%rsp) /* user stack pointer */ movq PCPU(SCRATCH_RAX),%rax + /* + * Save a few arg registers early to free them for use in + * handle_ibrs_entry(). %r10 is especially tricky. It is not an + * arg register, but it holds the arg register %rcx. Profiling + * preserves %rcx, but may clobber %r10. Profiling may also + * clobber %r11, but %r11 (original %eflags) has been saved. + */ movq %rax,TF_RAX(%rsp) /* syscall number */ movq %rdx,TF_RDX(%rsp) /* arg 3 */ + movq %r10,TF_RCX(%rsp) /* arg 4 */ SAVE_SEGS call handle_ibrs_entry movq PCPU(CURPCB),%r11 @@ -461,7 +483,6 @@ fast_syscall_common: movq $2,TF_ERR(%rsp) movq %rdi,TF_RDI(%rsp) /* arg 1 */ movq %rsi,TF_RSI(%rsp) /* arg 2 */ - movq %r10,TF_RCX(%rsp) /* arg 4 */ movq %r8,TF_R8(%rsp) /* arg 5 */ movq %r9,TF_R9(%rsp) /* arg 6 */ movq %rbx,TF_RBX(%rsp) /* C preserved */ @@ -496,7 +517,7 @@ fast_syscall_common: movq TF_RFLAGS(%rsp),%r11 /* original %rflags */ movq TF_RIP(%rsp),%rcx /* original %rip */ movq TF_RSP(%rsp),%rsp /* user stack pointer */ - cmpb $0,pti + cmpq $~0,PCPU(UCR3) je 2f movq PCPU(UCR3),%r9 movq %r9,%cr3 @@ -523,6 +544,121 @@ IDTVEC(fast_syscall32) sysret /* + * DB# handler is very similar to NM#, because 'mov/pop %ss' delay + * generation of exception until the next instruction is executed, + * which might be a kernel entry. So we must execute the handler + * on IST stack and be ready for non-kernel GSBASE. + */ +IDTVEC(dbg) + subq $TF_RIP,%rsp + movl $(T_TRCTRAP),TF_TRAPNO(%rsp) + movq $0,TF_ADDR(%rsp) + movq $0,TF_ERR(%rsp) + movq %rdi,TF_RDI(%rsp) + movq %rsi,TF_RSI(%rsp) + movq %rdx,TF_RDX(%rsp) + movq %rcx,TF_RCX(%rsp) + movq %r8,TF_R8(%rsp) + movq %r9,TF_R9(%rsp) + movq %rax,TF_RAX(%rsp) + movq %rbx,TF_RBX(%rsp) + movq %rbp,TF_RBP(%rsp) + movq %r10,TF_R10(%rsp) + movq %r11,TF_R11(%rsp) + movq %r12,TF_R12(%rsp) + movq %r13,TF_R13(%rsp) + movq %r14,TF_R14(%rsp) + movq %r15,TF_R15(%rsp) + SAVE_SEGS + movl $TF_HASSEGS,TF_FLAGS(%rsp) + cld + testb $SEL_RPL_MASK,TF_CS(%rsp) + jnz dbg_fromuserspace + /* + * We've interrupted the kernel. Preserve GS.base in %r12, + * %cr3 in %r13, and possibly lower half of MSR_IA32_SPEC_CTL in %r14d. + */ + movl $MSR_GSBASE,%ecx + rdmsr + movq %rax,%r12 + shlq $32,%rdx + orq %rdx,%r12 + /* Retrieve and load the canonical value for GS.base. */ + movq TF_SIZE(%rsp),%rdx + movl %edx,%eax + shrq $32,%rdx + wrmsr + movq %cr3,%r13 + movq PCPU(KCR3),%rax + cmpq $~0,%rax + je 1f + movq %rax,%cr3 +1: testl $CPUID_STDEXT3_IBPB,cpu_stdext_feature3(%rip) + je 2f + movl $MSR_IA32_SPEC_CTRL,%ecx + rdmsr + movl %eax,%r14d + call handle_ibrs_entry +2: FAKE_MCOUNT(TF_RIP(%rsp)) + movq %rsp,%rdi + call trap + MEXITCOUNT + testl $CPUID_STDEXT3_IBPB,cpu_stdext_feature3(%rip) + je 3f + movl %r14d,%eax + xorl %edx,%edx + movl $MSR_IA32_SPEC_CTRL,%ecx + wrmsr + /* + * Put back the preserved MSR_GSBASE value. + */ +3: movl $MSR_GSBASE,%ecx + movq %r12,%rdx + movl %edx,%eax + shrq $32,%rdx + wrmsr + movq %r13,%cr3 + RESTORE_REGS + addq $TF_RIP,%rsp + jmp doreti_iret +dbg_fromuserspace: + /* + * Switch to kernel GSBASE and kernel page table, and copy frame + * from the IST stack to the normal kernel stack, since trap() + * re-enables interrupts, and since we might trap on DB# while + * in trap(). + */ + swapgs + movq PCPU(KCR3),%rax + cmpq $~0,%rax + je 1f + movq %rax,%cr3 +1: movq PCPU(RSP0),%rax + movl $TF_SIZE,%ecx + subq %rcx,%rax + movq %rax,%rdi + movq %rsp,%rsi + rep;movsb + movq %rax,%rsp + call handle_ibrs_entry + movq PCPU(CURPCB),%rdi + orl $PCB_FULL_IRET,PCB_FLAGS(%rdi) + testb $CPUID_STDEXT_FSGSBASE,cpu_stdext_feature(%rip) + jz 3f + cmpw $KUF32SEL,TF_FS(%rsp) + jne 2f + rdfsbase %rax + movq %rax,PCB_FSBASE(%rdi) +2: cmpw $KUG32SEL,TF_GS(%rsp) + jne 3f + movl $MSR_KGSBASE,%ecx + rdmsr + shlq $32,%rdx + orq %rdx,%rax + movq %rax,PCB_GSBASE(%rdi) +3: jmp calltrap + +/* * NMI handling is special. * * First, NMIs do not respect the state of the processor's RFLAGS.IF @@ -1004,11 +1140,11 @@ ld_regs: jz 2f /* keep running with kernel GS.base */ cli call handle_ibrs_exit_rs - cmpb $0,pti + cmpq $~0,PCPU(UCR3) je 1f pushq %rdx - movq PCPU(PRVSPACE),%rdx - addq $PC_PTI_STACK+PC_PTI_STACK_SZ*8-PTI_SIZE,%rdx + movq PCPU(PTI_RSP0),%rdx + subq $PTI_SIZE,%rdx movq %rax,PTI_RAX(%rdx) popq %rax movq %rax,PTI_RDX(%rdx) Modified: projects/pnfs-planb-server/sys/amd64/amd64/fpu.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/fpu.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/fpu.c Sat Jun 2 21:16:20 2018 (r334539) @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include /* * Floating point support. @@ -151,26 +152,60 @@ struct xsave_area_elm_descr { u_int size; } *xsave_area_desc; -void -fpusave(void *addr) +static void +fpusave_xsave(void *addr) { - if (use_xsave) - xsave((char *)addr, xsave_mask); - else - fxsave((char *)addr); + xsave((char *)addr, xsave_mask); } -void -fpurestore(void *addr) +static void +fpurestore_xrstor(void *addr) { + xrstor((char *)addr, xsave_mask); +} + +static void +fpusave_fxsave(void *addr) +{ + + fxsave((char *)addr); +} + +static void +fpurestore_fxrstor(void *addr) +{ + + fxrstor((char *)addr); +} + +static void +init_xsave(void) +{ + if (use_xsave) - xrstor((char *)addr, xsave_mask); - else - fxrstor((char *)addr); + return; + if ((cpu_feature2 & CPUID2_XSAVE) == 0) + return; + use_xsave = 1; + TUNABLE_INT_FETCH("hw.use_xsave", &use_xsave); } +DEFINE_IFUNC(, void, fpusave, (void *), static) +{ + + init_xsave(); + return (use_xsave ? fpusave_xsave : fpusave_fxsave); +} + +DEFINE_IFUNC(, void, fpurestore, (void *), static) +{ + + init_xsave(); + return (use_xsave ? fpurestore_xrstor : fpurestore_fxrstor); +} + void fpususpend(void *addr) { @@ -207,13 +242,8 @@ fpuinit_bsp1(void) uint64_t xsave_mask_user; bool old_wp; - if ((cpu_feature2 & CPUID2_XSAVE) != 0) { - use_xsave = 1; - TUNABLE_INT_FETCH("hw.use_xsave", &use_xsave); - } if (!use_xsave) return; - cpuid_count(0xd, 0x0, cp); xsave_mask = XFEATURE_ENABLED_X87 | XFEATURE_ENABLED_SSE; if ((cp[0] & xsave_mask) != xsave_mask) Modified: projects/pnfs-planb-server/sys/amd64/amd64/genassym.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/genassym.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/genassym.c Sat Jun 2 21:16:20 2018 (r334539) @@ -227,6 +227,7 @@ ASSYM(PC_UCR3, offsetof(struct pcpu, pc_ucr3)); ASSYM(PC_SAVED_UCR3, offsetof(struct pcpu, pc_saved_ucr3)); ASSYM(PC_PTI_STACK, offsetof(struct pcpu, pc_pti_stack)); ASSYM(PC_PTI_STACK_SZ, PC_PTI_STACK_SZ); +ASSYM(PC_PTI_RSP0, offsetof(struct pcpu, pc_pti_rsp0)); ASSYM(PC_IBPB_SET, offsetof(struct pcpu, pc_ibpb_set)); ASSYM(LA_EOI, LAPIC_EOI * LAPIC_MEM_MUL); Modified: projects/pnfs-planb-server/sys/amd64/amd64/initcpu.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/initcpu.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/initcpu.c Sat Jun 2 21:16:20 2018 (r334539) @@ -224,6 +224,7 @@ initializecpu(void) pg_nx = PG_NX; } hw_ibrs_recalculate(); + hw_ssb_recalculate(false); switch (cpu_vendor_id) { case CPU_VENDOR_AMD: init_amd(); Modified: projects/pnfs-planb-server/sys/amd64/amd64/machdep.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/machdep.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/machdep.c Sat Jun 2 21:16:20 2018 (r334539) @@ -669,6 +669,7 @@ struct gate_descriptor *idt = &idt0[0]; /* interrupt d static char dblfault_stack[PAGE_SIZE] __aligned(16); static char mce0_stack[PAGE_SIZE] __aligned(16); static char nmi0_stack[PAGE_SIZE] __aligned(16); +static char dbg0_stack[PAGE_SIZE] __aligned(16); CTASSERT(sizeof(struct nmi_pcpu) == 16); struct amd64tss common_tss[MAXCPU]; @@ -821,7 +822,7 @@ extern inthand_t IDTVEC(tss), IDTVEC(missing), IDTVEC(stk), IDTVEC(prot), IDTVEC(page), IDTVEC(mchk), IDTVEC(rsvd), IDTVEC(fpu), IDTVEC(align), IDTVEC(xmm), IDTVEC(dblfault), - IDTVEC(div_pti), IDTVEC(dbg_pti), IDTVEC(bpt_pti), + IDTVEC(div_pti), IDTVEC(bpt_pti), IDTVEC(ofl_pti), IDTVEC(bnd_pti), IDTVEC(ill_pti), IDTVEC(dna_pti), IDTVEC(fpusegm_pti), IDTVEC(tss_pti), IDTVEC(missing_pti), IDTVEC(stk_pti), IDTVEC(prot_pti), IDTVEC(page_pti), @@ -1555,17 +1556,24 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) TSRAW(&thread0, TS_ENTER, __func__, NULL); - /* - * This may be done better later if it gets more high level - * components in it. If so just link td->td_proc here. - */ - proc_linkup0(&proc0, &thread0); - kmdp = init_ops.parse_preload_data(modulep); identify_cpu1(); identify_hypervisor(); + /* + * hw.cpu_stdext_disable is ignored by the call, it will be + * re-evaluted by the below call to finishidentcpu(). + */ + identify_cpu2(); + link_elf_ireloc(kmdp); + + /* + * This may be done better later if it gets more high level + * components in it. If so just link td->td_proc here. + */ + proc_linkup0(&proc0, &thread0); + /* Init basic tunables, hz etc */ init_param1(); @@ -1630,8 +1638,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) SEL_KPL, 0); setidt(IDT_DE, pti ? &IDTVEC(div_pti) : &IDTVEC(div), SDT_SYSIGT, SEL_KPL, 0); - setidt(IDT_DB, pti ? &IDTVEC(dbg_pti) : &IDTVEC(dbg), SDT_SYSIGT, - SEL_KPL, 0); + setidt(IDT_DB, &IDTVEC(dbg), SDT_SYSIGT, SEL_KPL, 4); setidt(IDT_NMI, &IDTVEC(nmi), SDT_SYSIGT, SEL_KPL, 2); setidt(IDT_BP, pti ? &IDTVEC(bpt_pti) : &IDTVEC(bpt), SDT_SYSIGT, SEL_UPL, 0); @@ -1713,6 +1720,13 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) np = ((struct nmi_pcpu *) &mce0_stack[sizeof(mce0_stack)]) - 1; np->np_pcpu = (register_t) pc; common_tss[0].tss_ist3 = (long) np; + + /* + * DB# stack, runs on ist4. + */ + np = ((struct nmi_pcpu *) &dbg0_stack[sizeof(dbg0_stack)]) - 1; + np->np_pcpu = (register_t) pc; + common_tss[0].tss_ist4 = (long) np; /* Set the IO permission bitmap (empty due to tss seg limit) */ common_tss[0].tss_iobase = sizeof(struct amd64tss) + IOPERM_BITMAP_SIZE; @@ -1795,9 +1809,10 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) rsp0 = (vm_offset_t)thread0.td_pcb; /* Ensure the stack is aligned to 16 bytes */ rsp0 &= ~0xFul; - common_tss[0].tss_rsp0 = pti ? ((vm_offset_t)PCPU_PTR(pti_stack) + - PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful : rsp0; + common_tss[0].tss_rsp0 = rsp0; PCPU_SET(rsp0, rsp0); + PCPU_SET(pti_rsp0, ((vm_offset_t)PCPU_PTR(pti_stack) + + PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful); PCPU_SET(curpcb, thread0.td_pcb); /* transfer to user mode */ @@ -1828,6 +1843,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) thread0.td_critnest = 0; TUNABLE_INT_FETCH("hw.ibrs_disable", &hw_ibrs_disable); + TUNABLE_INT_FETCH("hw.spec_store_bypass_disable", &hw_ssb_disable); TSEXIT(); @@ -1962,14 +1978,22 @@ ptrace_set_pc(struct thread *td, unsigned long addr) int ptrace_single_step(struct thread *td) { - td->td_frame->tf_rflags |= PSL_T; + + PROC_LOCK_ASSERT(td->td_proc, MA_OWNED); + if ((td->td_frame->tf_rflags & PSL_T) == 0) { + td->td_frame->tf_rflags |= PSL_T; + td->td_dbgflags |= TDB_STEP; + } return (0); } int ptrace_clear_single_step(struct thread *td) { + + PROC_LOCK_ASSERT(td->td_proc, MA_OWNED); td->td_frame->tf_rflags &= ~PSL_T; + td->td_dbgflags &= ~TDB_STEP; return (0); } @@ -2470,14 +2494,23 @@ reset_dbregs(void) * breakpoint was in user space. Return 0, otherwise. */ int -user_dbreg_trap(void) +user_dbreg_trap(register_t dr6) { - u_int64_t dr7, dr6; /* debug registers dr6 and dr7 */ + u_int64_t dr7; u_int64_t bp; /* breakpoint bits extracted from dr6 */ int nbp; /* number of breakpoints that triggered */ caddr_t addr[4]; /* breakpoint addresses */ int i; - + + bp = dr6 & DBREG_DR6_BMASK; + if (bp == 0) { + /* + * None of the breakpoint bits are set meaning this + * trap was not caused by any of the debug registers + */ + return 0; + } + dr7 = rdr7(); if ((dr7 & 0x000000ff) == 0) { /* @@ -2489,16 +2522,6 @@ user_dbreg_trap(void) } nbp = 0; - dr6 = rdr6(); - bp = dr6 & 0x0000000f; - - if (!bp) { - /* - * None of the breakpoint bits are set meaning this - * trap was not caused by any of the debug registers - */ - return 0; - } /* * at least one of the breakpoints were hit, check to see Modified: projects/pnfs-planb-server/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/minidump_machdep.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/minidump_machdep.c Sat Jun 2 21:16:20 2018 (r334539) @@ -337,12 +337,12 @@ minidumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize); - printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, - ptoa((uintmax_t)physmem) / 1048576); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, + ptoa((uintmax_t)physmem) / 1048576); /* Dump my header */ bzero(&fakepd, sizeof(fakepd)); Modified: projects/pnfs-planb-server/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/mp_machdep.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/mp_machdep.c Sat Jun 2 21:16:20 2018 (r334539) @@ -91,6 +91,7 @@ extern struct pcpu __pcpu[]; char *doublefault_stack; char *mce_stack; char *nmi_stack; +char *dbg_stack; /* * Local data and functions. @@ -251,6 +252,10 @@ init_secondary(void) np = ((struct nmi_pcpu *) &mce_stack[PAGE_SIZE]) - 1; common_tss[cpu].tss_ist3 = (long) np; + /* The DB# stack runs on IST4. */ + np = ((struct nmi_pcpu *) &dbg_stack[PAGE_SIZE]) - 1; + common_tss[cpu].tss_ist4 = (long) np; + /* Prepare private GDT */ gdt_segs[GPROC0_SEL].ssd_base = (long) &common_tss[cpu]; for (x = 0; x < NGDT; x++) { @@ -276,6 +281,8 @@ init_secondary(void) pc->pc_tssp = &common_tss[cpu]; pc->pc_commontssp = &common_tss[cpu]; pc->pc_rsp0 = 0; + pc->pc_pti_rsp0 = (((vm_offset_t)&pc->pc_pti_stack + + PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful); pc->pc_tss = (struct system_segment_descriptor *)&gdt[NGDT * cpu + GPROC0_SEL]; pc->pc_fs32p = &gdt[NGDT * cpu + GUFS32_SEL]; @@ -285,8 +292,7 @@ init_secondary(void) pc->pc_curpmap = kernel_pmap; pc->pc_pcid_gen = 1; pc->pc_pcid_next = PMAP_PCID_KERN + 1; - common_tss[cpu].tss_rsp0 = pti ? ((vm_offset_t)&pc->pc_pti_stack + - PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful : 0; + common_tss[cpu].tss_rsp0 = 0; /* Save the per-cpu pointer for use by the NMI handler. */ np = ((struct nmi_pcpu *) &nmi_stack[PAGE_SIZE]) - 1; @@ -296,6 +302,10 @@ init_secondary(void) np = ((struct nmi_pcpu *) &mce_stack[PAGE_SIZE]) - 1; np->np_pcpu = (register_t) pc; + /* Save the per-cpu pointer for use by the DB# handler. */ + np = ((struct nmi_pcpu *) &dbg_stack[PAGE_SIZE]) - 1; + np->np_pcpu = (register_t) pc; + wrmsr(MSR_FSBASE, 0); /* User value */ wrmsr(MSR_GSBASE, (u_int64_t)pc); wrmsr(MSR_KGSBASE, (u_int64_t)pc); /* XXX User value while we're in the kernel */ @@ -390,6 +400,8 @@ native_start_all_aps(void) mce_stack = (char *)kmem_malloc(kernel_arena, PAGE_SIZE, M_WAITOK | M_ZERO); nmi_stack = (char *)kmem_malloc(kernel_arena, PAGE_SIZE, + M_WAITOK | M_ZERO); + dbg_stack = (char *)kmem_malloc(kernel_arena, PAGE_SIZE, M_WAITOK | M_ZERO); dpcpu = (void *)kmem_malloc(kernel_arena, DPCPU_SIZE, M_WAITOK | M_ZERO); Modified: projects/pnfs-planb-server/sys/amd64/amd64/pmap.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/pmap.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/pmap.c Sat Jun 2 21:16:20 2018 (r334539) @@ -413,7 +413,7 @@ int invpcid_works = 0; SYSCTL_INT(_vm_pmap, OID_AUTO, invpcid_works, CTLFLAG_RD, &invpcid_works, 0, "Is the invpcid instruction available ?"); -int pti = 0; +int __read_frequently pti = 0; SYSCTL_INT(_vm_pmap, OID_AUTO, pti, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &pti, 0, "Page Table Isolation enabled"); @@ -1011,8 +1011,7 @@ create_pagetables(vm_paddr_t *firstaddr) /* And connect up the PD to the PDP (leaving room for L4 pages) */ pdp_p = (pdp_entry_t *)(KPDPphys + ptoa(KPML4I - KPML4BASE)); for (i = 0; i < nkpdpe; i++) - pdp_p[i + KPDPI] = (KPDphys + ptoa(i)) | X86_PG_RW | X86_PG_V | - PG_U; + pdp_p[i + KPDPI] = (KPDphys + ptoa(i)) | X86_PG_RW | X86_PG_V; /* * Now, set up the direct map region using 2MB and/or 1GB pages. If @@ -1038,7 +1037,7 @@ create_pagetables(vm_paddr_t *firstaddr) } for (j = 0; i < ndmpdp; i++, j++) { pdp_p[i] = DMPDphys + ptoa(j); - pdp_p[i] |= X86_PG_RW | X86_PG_V | PG_U; + pdp_p[i] |= X86_PG_RW | X86_PG_V; } /* @@ -1054,24 +1053,24 @@ create_pagetables(vm_paddr_t *firstaddr) bootaddr_rwx(i << PDRSHIFT); for (i = 0; i < nkdmpde; i++) pdp_p[i] = (DMPDkernphys + ptoa(i)) | X86_PG_RW | - X86_PG_V | PG_U; + X86_PG_V; } /* And recursively map PML4 to itself in order to get PTmap */ p4_p = (pml4_entry_t *)KPML4phys; p4_p[PML4PML4I] = KPML4phys; - p4_p[PML4PML4I] |= X86_PG_RW | X86_PG_V | PG_U | pg_nx; + p4_p[PML4PML4I] |= X86_PG_RW | X86_PG_V | pg_nx; /* Connect the Direct Map slot(s) up to the PML4. */ for (i = 0; i < ndmpdpphys; i++) { p4_p[DMPML4I + i] = DMPDPphys + ptoa(i); - p4_p[DMPML4I + i] |= X86_PG_RW | X86_PG_V | PG_U; + p4_p[DMPML4I + i] |= X86_PG_RW | X86_PG_V; } /* Connect the KVA slots up to the PML4 */ for (i = 0; i < NKPML4E; i++) { p4_p[KPML4BASE + i] = KPDPphys + ptoa(i); - p4_p[KPML4BASE + i] |= X86_PG_RW | X86_PG_V | PG_U; + p4_p[KPML4BASE + i] |= X86_PG_RW | X86_PG_V; } } @@ -1722,6 +1721,18 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va) if (cpuid != i) pmap->pm_pcids[i].pm_gen = 0; } + + /* + * The fence is between stores to pm_gen and the read of + * the pm_active mask. We need to ensure that it is + * impossible for us to miss the bit update in pm_active + * and simultaneously observe a non-zero pm_gen in + * pmap_activate_sw(), otherwise TLB update is missed. + * Without the fence, IA32 allows such an outcome. + * Note that pm_active is updated by a locked operation, + * which provides the reciprocal fence. + */ + atomic_thread_fence_seq_cst(); } mask = &pmap->pm_active; } @@ -1793,6 +1804,8 @@ pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm if (cpuid != i) pmap->pm_pcids[i].pm_gen = 0; } + /* See the comment in pmap_invalidate_page(). */ + atomic_thread_fence_seq_cst(); } mask = &pmap->pm_active; } @@ -1864,6 +1877,8 @@ pmap_invalidate_all(pmap_t pmap) if (cpuid != i) pmap->pm_pcids[i].pm_gen = 0; } + /* See the comment in pmap_invalidate_page(). */ + atomic_thread_fence_seq_cst(); } mask = &pmap->pm_active; } @@ -2607,8 +2622,10 @@ pmap_pinit0(pmap_t pmap) CPU_FOREACH(i) { pmap->pm_pcids[i].pm_pcid = PMAP_PCID_NONE; pmap->pm_pcids[i].pm_gen = 0; - if (!pti) + if (!pti) { __pcpu[i].pc_kcr3 = PMAP_NO_CR3; + __pcpu[i].pc_ucr3 = PMAP_NO_CR3; + } } PCPU_SET(curpmap, kernel_pmap); pmap_activate(curthread); @@ -2626,11 +2643,11 @@ pmap_pinit_pml4(vm_page_t pml4pg) /* Wire in kernel global address entries. */ for (i = 0; i < NKPML4E; i++) { pm_pml4[KPML4BASE + i] = (KPDPphys + ptoa(i)) | X86_PG_RW | - X86_PG_V | PG_U; + X86_PG_V; } for (i = 0; i < ndmpdpphys; i++) { pm_pml4[DMPML4I + i] = (DMPDPphys + ptoa(i)) | X86_PG_RW | - X86_PG_V | PG_U; + X86_PG_V; } /* install self-referential address mapping entry(s) */ @@ -2783,7 +2800,8 @@ _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, str * the kernel-mode page table active on return * to user space. */ - *pml4 |= pg_nx; + if (pmap->pm_ucr3 != PMAP_NO_CR3) + *pml4 |= pg_nx; pml4u = &pmap->pm_pml4u[pml4index]; *pml4u = VM_PAGE_TO_PHYS(m) | PG_U | PG_RW | PG_V | @@ -7359,10 +7377,12 @@ pmap_activate_sw(struct thread *td) { pmap_t oldpmap, pmap; struct invpcid_descr d; - uint64_t cached, cr3, kcr3, kern_pti_cached, ucr3; + uint64_t cached, cr3, kcr3, kern_pti_cached, rsp0, ucr3; register_t rflags; u_int cpuid; + struct amd64tss *tssp; + rflags = 0; oldpmap = PCPU_GET(curpmap); pmap = vmspace_pmap(td->td_proc->p_vmspace); if (oldpmap == pmap) @@ -7452,6 +7472,12 @@ pmap_activate_sw(struct thread *td) PCPU_SET(ucr3, pmap->pm_ucr3); } } + if (pmap->pm_ucr3 != PMAP_NO_CR3) { + rsp0 = ((vm_offset_t)PCPU_PTR(pti_stack) + + PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful; + tssp = PCPU_GET(tssp); + tssp->tss_rsp0 = rsp0; + } #ifdef SMP CPU_CLR_ATOMIC(cpuid, &oldpmap->pm_active); #else @@ -7671,7 +7697,7 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t va vm_paddr_t paddr; boolean_t needs_mapping; pt_entry_t *pte; - int cache_bits, error, i; + int cache_bits, error __unused, i; /* * Allocate any KVA space that we need, this is done in a separate @@ -7832,6 +7858,9 @@ pmap_pti_init(void) pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false); /* MC# stack IST 3 */ va = common_tss[i].tss_ist3 + sizeof(struct nmi_pcpu); + pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false); + /* DB# stack IST 4 */ + va = common_tss[i].tss_ist4 + sizeof(struct nmi_pcpu); pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false); } pmap_pti_add_kva_locked((vm_offset_t)kernphys + KERNBASE, Modified: projects/pnfs-planb-server/sys/amd64/amd64/prof_machdep.c ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/prof_machdep.c Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/prof_machdep.c Sat Jun 2 21:16:20 2018 (r334539) @@ -56,6 +56,20 @@ static int cputime_prof_active; #endif /* GUPROF */ #ifdef __GNUCLIKE_ASM +#if defined(SMP) && defined(GUPROF) +#define MPLOCK " \n\ + movl $1,%edx \n\ +9: \n\ + xorl %eax,%eax \n\ + lock \n\ + cmpxchgl %edx,mcount_lock \n\ + jne 9b \n" +#define MPUNLOCK "movl $0,mcount_lock \n" +#else /* !(SMP && GUPROF) */ +#define MPLOCK +#define MPUNLOCK +#endif /* SMP && GUPROF */ + __asm(" \n\ GM_STATE = 0 \n\ GMON_PROF_OFF = 3 \n\ @@ -111,8 +125,10 @@ __mcount: \n\ movq 7*8(%rsp),%rsi \n\ \n\ pushfq \n\ - cli \n\ - call mcount \n\ + cli \n" + MPLOCK " \n\ + call mcount \n" + MPUNLOCK " \n\ popfq \n\ popq %r9 \n\ popq %r8 \n\ @@ -163,8 +179,10 @@ GMON_PROF_HIRES = 4 \n\ pushq %r9 \n\ movq 7*8(%rsp),%rdi \n\ pushfq \n\ - cli \n\ - call mexitcount \n\ + cli \n" + MPLOCK " \n\ + call mexitcount \n" + MPUNLOCK " \n\ popfq \n\ popq %r9 \n\ popq %r8 \n\ Modified: projects/pnfs-planb-server/sys/amd64/amd64/support.S ============================================================================== --- projects/pnfs-planb-server/sys/amd64/amd64/support.S Sat Jun 2 20:28:58 2018 (r334538) +++ projects/pnfs-planb-server/sys/amd64/amd64/support.S Sat Jun 2 21:16:20 2018 (r334539) @@ -98,17 +98,40 @@ END(sse2_pagezero) ENTRY(bcmp) PUSH_FRAME_POINTER + test %rdx,%rdx + je 1f + cmpq $64,%rdx + jg 4f + + xor %ecx,%ecx +2: + movzbl (%rdi,%rcx,1),%eax + movzbl (%rsi,%rcx,1),%r8d + cmp %r8b,%al + jne 3f + add $0x1,%rcx + cmp %rcx,%rdx + jne 2b +1: + xor %eax,%eax + POP_FRAME_POINTER + retq +3: + mov $1,%eax + POP_FRAME_POINTER + retq +4: movq %rdx,%rcx shrq $3,%rcx repe cmpsq - jne 1f + jne 5f movq %rdx,%rcx andq $7,%rcx repe cmpsb -1: +5: setne %al movsbl %al,%eax POP_FRAME_POINTER @@ -162,6 +185,63 @@ ENTRY(bcopy) END(bcopy) /* + * memmove(dst, src, cnt) + * rdi, rsi, rdx + * Adapted from bcopy written by: *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***