[pnfs] [PATCH] update layoutget to draft 10

Marc Eshel eshel at almaden.ibm.com
Thu Mar 15 14:35:42 EDT 2007


From: Marc Eshel <eshel at almaden.ibm.com>

Update layoutget, also getdevlist and getdevinfo has some minor chanes.
layoutreturn and layoutcommit did not change.
---

 fs/nfs/nfs4filelayout.c            |    2 +-
 fs/nfs/nfs4xdr.c                   |    5 +++--
 fs/nfsd/nfs4filelayoutxdr.c        |    5 ++++-
 fs/nfsd/nfs4xdr.c                  |    6 ++++--
 include/linux/nfsd/nfs4layoutxdr.h |    2 ++
 5 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index 0a67a7e..1e6b4ba 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -468,7 +468,7 @@ filelayout_set_layout(struct pnfs_layout
 
 	for (i = 0; i < fl->num_devs; i++) {
 
-		/* dev_id */
+		p++;		/* skip layout type*/
 		READ32(fl->devs[i].dev_id);
 		READ32(fl->devs[i].dev_index);
 
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index f2a5c21..5b3cafa 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -4935,8 +4935,8 @@ static int decode_getdevicelist(struct x
         for (i = 0,cnt=0; i < res->num_devs && cnt < NFS4_PNFS_DEV_MAXCOUNT; i++)
         {
                 READ_BUF(4);
-                READ32(res->devs[cnt].dev_id);  /* device id */
-
+                READ32(res->devs[cnt].dev_id);	/* device id */
+                READ_BUF(4);			/* skip layout type */
                 READ_BUF(4);
                 READ32(len);
                 dprintk("%s: num_dev %d i %d cnt %d id %d len %d\n",
@@ -4975,6 +4975,7 @@ static int decode_getdeviceinfo(struct x
         if (status)
                 return status;
 
+        READ_BUF(4);		/* skip layout type */
         READ_BUF(4);
         READ32(len);
         READ_BUF(len);
diff --git a/fs/nfsd/nfs4filelayoutxdr.c b/fs/nfsd/nfs4filelayoutxdr.c
index 9aa669b..1258dea 100644
--- a/fs/nfsd/nfs4filelayoutxdr.c
+++ b/fs/nfsd/nfs4filelayoutxdr.c
@@ -89,9 +89,10 @@ filelayout_encode_layoutlist_item(u32 *p
 	int len;
 	unsigned int fhlen = item->fhp->fh_size;
 
-	len = 12 + fhlen;
+	len = 16 + fhlen;
 	if (p + XDR_QUADLEN(len) > end)
 		return -ENOMEM;
+	WRITE32(item->dev_layout_type);
 	WRITE32(item->dev_id);
 	WRITE32(item->dev_index);
 	WRITE32(fhlen);
@@ -120,12 +121,14 @@ filelayout_encode_layout(u32 *p, u32 *en
 	WRITE64(flp->lg_stripe_unit);
 	WRITE64(flp->lg_file_size);
 	WRITE32(flp->lg_indexlen);
+
 	if (flp->lg_indexlen > 0) {   //??? if>0 must build index list
 		printk("filelayout_encode_layout: XXX add loop for index list\n");
 	}
 	WRITE32(flp->lg_llistlen);
 	for (i=0; i < flp->lg_llistlen; i++) {
 		item = &flp->lg_llist[i];
+		item->dev_layout_type = flp->lg_layout_type;
 		len = filelayout_encode_layoutlist_item(p, end, item);
 		if (len > 0) {
 			p += XDR_QUADLEN(len);
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 27f9bd7..e1f84d1 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2881,8 +2881,9 @@ nfsd4_encode_devlist_item(struct nfsd4_c
 	int len;
 	ENCODE_HEAD;
 
-	RESERVE_SPACE(4);
+	RESERVE_SPACE(8);
 	WRITE32(dlist->dev_id);
+	WRITE32(lotype);
 	ADJUST_ARGS();
 
 	if (ex_ops->devaddr_encode == NULL && lotype == LAYOUT_NFSV4_FILES)
@@ -2961,7 +2962,8 @@ nfsd4_encode_getdevinfo(struct nfsd4_com
 
 	printk("%s: err %d\n",__FUNCTION__, nfserr);
 	if (!nfserr) {
-		RESERVE_SPACE(4);
+		RESERVE_SPACE(8);
+		WRITE32(gdev->gd_type);
 		if (gdev->gd_ops->devaddr_encode == NULL &&
 					gdev->gd_type == LAYOUT_NFSV4_FILES)
 		{
diff --git a/include/linux/nfsd/nfs4layoutxdr.h b/include/linux/nfsd/nfs4layoutxdr.h
index 55728a9..64f8216 100644
--- a/include/linux/nfsd/nfs4layoutxdr.h
+++ b/include/linux/nfsd/nfs4layoutxdr.h
@@ -64,12 +64,14 @@ struct pnfs_filelayout_devaddr {
 };
 
 struct nfsd4_pnfs_layoutlist {
+	u32                             dev_layout_type;
 	u32				dev_id;
 	u32                             dev_index;
 	struct knfsd_fh                 *fhp;
 };
 
 struct nfsd4_pnfs_filelayout {
+	u32                             lg_layout_type; /* response */
 	u32                             lg_stripe_type; /* response */
 	u32                             lg_commit_through_mds; /* response */
 	u64                             lg_stripe_unit; /* response */


More information about the pNFS mailing list