From owner-svn-src-projects@freebsd.org Sat May 6 23:05:51 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 118F1D61CE2 for ; Sat, 6 May 2017 23:05:51 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A29B719AD; Sat, 6 May 2017 23:05:50 +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 v46N5n9d001287; Sat, 6 May 2017 23:05:49 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v46N5n5W001285; Sat, 6 May 2017 23:05:49 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201705062305.v46N5n5W001285@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sat, 6 May 2017 23:05:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317891 - projects/pnfs-planb-server/sys/fs/nfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 May 2017 23:05:51 -0000 Author: rmacklem Date: Sat May 6 23:05:49 2017 New Revision: 317891 URL: https://svnweb.freebsd.org/changeset/base/317891 Log: Add support for some recommended attributes related to NFSv4.1/pNFS although I do know of a client that actually uses them. Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Modified: projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Sat May 6 23:01:35 2017 (r317890) +++ projects/pnfs-planb-server/sys/fs/nfs/nfs_commonsubs.c Sat May 6 23:05:49 2017 (r317891) @@ -1791,6 +1791,40 @@ nfsv4_loadattr(struct nfsrv_descript *nd } attrsum += cnt; break; + case NFSATTRBIT_FSLAYOUTTYPE: + case NFSATTRBIT_LAYOUTTYPE: + NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); + attrsum += NFSX_UNSIGNED; + i = fxdr_unsigned(int, *tl); + if (i > 0) { + NFSM_DISSECT(tl, u_int32_t *, i * + NFSX_UNSIGNED); + attrsum += i * NFSX_UNSIGNED; + for (j = 0; j < i; j++) { + k = fxdr_unsigned(int, *tl++); + if (compare && !(*retcmpp) && + k != NFSLAYOUT_NFSV4_1_FILES) + *retcmpp = NFSERR_NOTSAME; + } + } + NFSDDSLOCK(); + if (TAILQ_EMPTY(&nfsrv_devidhead)) { + if (compare && !(*retcmpp) && i > 0) + *retcmpp = NFSERR_NOTSAME; + } else { + if (compare && !(*retcmpp) && i != 1) + *retcmpp = NFSERR_NOTSAME; + } + NFSDDSUNLOCK(); + break; + case NFSATTRBIT_LAYOUTALIGNMENT: + case NFSATTRBIT_LAYOUTBLKSIZE: + NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); + attrsum += NFSX_UNSIGNED; + i = fxdr_unsigned(int, *tl); + if (compare && !(*retcmpp) && i != NFS_SRVMAXIO) + *retcmpp = NFSERR_NOTSAME; + break; default: printf("EEK! nfsv4_loadattr unknown attr=%d\n", bitpos); @@ -2538,6 +2572,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd retnum += nfsrv_putattrbit(nd, &attrbits); break; case NFSATTRBIT_FSLAYOUTTYPE: + case NFSATTRBIT_LAYOUTTYPE: NFSDDSLOCK(); if (TAILQ_EMPTY(&nfsrv_devidhead)) siz = 1; @@ -2546,14 +2581,20 @@ nfsv4_fillattr(struct nfsrv_descript *nd NFSDDSUNLOCK(); if (siz == 2) { NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); - *tl++ = txdr_unsigned(1); + *tl++ = txdr_unsigned(1); /* One entry. */ *tl = txdr_unsigned(NFSLAYOUT_NFSV4_1_FILES); } else { NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED); - *tl = txdr_unsigned(0); + *tl = 0; } retnum += siz * NFSX_UNSIGNED; break; + case NFSATTRBIT_LAYOUTALIGNMENT: + case NFSATTRBIT_LAYOUTBLKSIZE: + NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED); + *tl = txdr_unsigned(NFS_SRVMAXIO); + retnum += NFSX_UNSIGNED; + break; default: printf("EEK! Bad V4 attribute bitpos=%d\n", bitpos); } Modified: projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sat May 6 23:01:35 2017 (r317890) +++ projects/pnfs-planb-server/sys/fs/nfs/nfsproto.h Sat May 6 23:05:49 2017 (r317891) @@ -1048,7 +1048,11 @@ struct nfsv3_sattr { #define NFSATTRBIT_SUPP1 NFSATTRBIT_S1 #endif -#define NFSATTRBIT_SUPP2 NFSATTRBM_SUPPATTREXCLCREAT +#define NFSATTRBIT_SUPP2 \ + (NFSATTRBM_LAYOUTTYPE | \ + NFSATTRBM_LAYOUTBLKSIZE | \ + NFSATTRBM_LAYOUTALIGNMENT | \ + NFSATTRBM_SUPPATTREXCLCREAT) /* * NFSATTRBIT_SUPPSETONLY is the OR of NFSATTRBIT_TIMEACCESSSET and