[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