Date: Sat, 6 May 2017 23:05:49 +0000 (UTC) From: Rick Macklem <rmacklem@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r317891 - projects/pnfs-planb-server/sys/fs/nfs Message-ID: <201705062305.v46N5n5W001285@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201705062305.v46N5n5W001285>