@@ -1,12 +1,11 @@
/*
- * pnfs_osd_xdr_enc.c
+ * Object-Based pNFS Layout XDR layer for the Server side
*
- * Object-Based pNFS Layout XDR layer
- *
- * Copyright (C) 2007-2009 Panasas Inc.
+ * Copyright (C) 2007 and on Panasas Inc.
* All rights reserved.
*
* Benny Halevy <bhalevy@panasas.com>
+ * Boaz Harrosh <bharrosh@panasas.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
@@ -253,7 +252,7 @@ EXPORT_SYMBOL(pnfs_osd_xdr_decode_layoutupdate);
* struct pnfs_deviceid oid_device_id;
* u64 oid_partition_id;
* u64 oid_object_id;
- * };
+ * }; xdr size 32
*/
static inline __be32 *
pnfs_osd_xdr_decode_objid(__be32 *p, struct pnfs_osd_objid *objid)
@@ -274,16 +273,20 @@ pnfs_osd_xdr_decode_objid(__be32 *p, struct pnfs_osd_objid *objid)
* u64 oer_comp_length;
* u32 oer_iswrite;
* u32 oer_errno;
- * };
+ * }; xdr size 32 + 24
*/
-__be32 *
-pnfs_osd_xdr_decode_ioerr(struct pnfs_osd_ioerr *ioerr, __be32 *p)
+bool pnfs_osd_xdr_decode_ioerr(struct pnfs_osd_ioerr *ioerr,
+ struct exp_xdr_stream *xdr)
{
+ __be32 *p = exp_xdr_reserve_space(xdr, 32 + 24);
+ if (!p)
+ return false;
+
p = pnfs_osd_xdr_decode_objid(p, &ioerr->oer_component);
p = xdr_decode_hyper(p, &ioerr->oer_comp_offset);
p = xdr_decode_hyper(p, &ioerr->oer_comp_length);
ioerr->oer_iswrite = be32_to_cpu(*p++);
- ioerr->oer_errno = be32_to_cpu(*p++);
- return p;
+ ioerr->oer_errno = be32_to_cpu(*p);
+ return true;
}
EXPORT_SYMBOL(pnfs_osd_xdr_decode_ioerr);
@@ -41,6 +41,7 @@
#include <linux/nfs_fs.h>
#include <linux/nfs_page.h>
+#include <linux/exp_xdr.h>
#include <scsi/osd_protocol.h>
#define PNFS_OSD_OSDNAME_MAXSIZE 256
@@ -324,6 +325,11 @@ extern bool pnfs_osd_xdr_decode_layout_comp(struct pnfs_osd_object_cred *comp,
struct pnfs_osd_xdr_decode_layout_iter *iter, struct xdr_stream *xdr,
int *err);
+/* Layout encoding */
+extern int pnfs_osd_xdr_encode_layout(
+ struct exp_xdr_stream *xdr,
+ struct pnfs_osd_layout *layout);
+
/* Device Info helpers */
/* Note: All strings inside @deviceaddr point to space inside @p.
@@ -332,6 +338,10 @@ extern bool pnfs_osd_xdr_decode_layout_comp(struct pnfs_osd_object_cred *comp,
extern void pnfs_osd_xdr_decode_deviceaddr(
struct pnfs_osd_deviceaddr *deviceaddr, __be32 *p);
+/* For Servers */
+extern int pnfs_osd_xdr_encode_deviceaddr(
+ struct exp_xdr_stream *xdr, struct pnfs_osd_deviceaddr *devaddr);
+
/* layoutupdate (layout_commit) xdr helpers */
extern int
pnfs_osd_xdr_encode_layoutupdate(struct xdr_stream *xdr,
@@ -344,7 +354,7 @@ pnfs_osd_xdr_decode_layoutupdate(struct pnfs_osd_layoutupdate *lou, __be32 *p);
extern __be32 *pnfs_osd_xdr_ioerr_reserve_space(struct xdr_stream *xdr);
extern void pnfs_osd_xdr_encode_ioerr(__be32 *p, struct pnfs_osd_ioerr *ioerr);
/* Server*/
-extern __be32 *
-pnfs_osd_xdr_decode_ioerr(struct pnfs_osd_ioerr *ioerr, __be32 *p);
+extern bool pnfs_osd_xdr_decode_ioerr(struct pnfs_osd_ioerr *ioerr,
+ struct exp_xdr_stream *xdr);
#endif /* __PNFS_OSD_XDR_H__ */
This patch adds declarations and implementation fixes to the objects Server XDR implementation. Needs squashing to the patch That intruduces the pnfs_osd_xdr_srv.c file Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> --- fs/exportfs/pnfs_osd_xdr_srv.c | 23 +++++++++++++---------- include/linux/pnfs_osd_xdr.h | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 12 deletions(-)