Skip site navigation (1)Skip section navigation (2)
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>