svn commit: r317891 - projects/pnfs-planb-server/sys/fs/nfs
Rick Macklem
rmacklem at FreeBSD.org
Sat May 6 23:05:51 UTC 2017
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
More information about the svn-src-projects
mailing list