Whamcloud - gitweb
Removes all traces of mds_req, mds_rep, ost_req, and ost_rep. All subsystems
authorpschwan <pschwan>
Sat, 6 Apr 2002 17:38:35 +0000 (17:38 +0000)
committerpschwan <pschwan>
Sat, 6 Apr 2002 17:38:35 +0000 (17:38 +0000)
now use the functions in rpc/pack_generic.c, which are based around
struct lustre_msg.  That file is small and easily understood, see it for more
details.

Now that everyone uses the same functions, the code can probably be refactored
more sensibly.  This is left as an exercise for the reader.

Other, cleanups:
- we don't need to memset() after OBD_ALLOC
- the MDS and OST request and reply packets were so similar that they've been
merged, into struct mds_body and ost_body respectively.

30 files changed:
lustre/include/linux/lustre_idl.h
lustre/include/linux/lustre_mds.h
lustre/include/linux/lustre_net.h
lustre/include/linux/obd.h
lustre/include/linux/obd_class.h
lustre/include/linux/obd_ost.h
lustre/ldlm/Makefile.am
lustre/ldlm/ldlm_lockd.c
lustre/lib/Makefile.am
lustre/lib/mds_pack.c [deleted file]
lustre/lib/mds_updates.c
lustre/lib/obd_pack.c
lustre/llite/namei.c
lustre/llite/super.c
lustre/mdc/Makefile.am
lustre/mdc/mdc_reint.c
lustre/mdc/mdc_request.c
lustre/mds/Makefile.am
lustre/mds/handler.c
lustre/mds/mds_reint.c
lustre/obdclass/class_obd.c
lustre/osc/osc_request.c
lustre/ost/ost_handler.c
lustre/ptlrpc/Makefile.am
lustre/ptlrpc/client.c
lustre/ptlrpc/niobuf.c
lustre/ptlrpc/pack_generic.c [moved from lustre/lib/pack_generic.c with 56% similarity]
lustre/ptlrpc/service.c
lustre/tests/llmount.sh
lustre/tests/llmountcleanup.sh

index 75de35d..9e4d842 100644 (file)
 #include <asm/types.h>
 
 #include <linux/types.h>
-#else 
+#else
 #define __KERNEL__
 #include <linux/list.h>
 #undef __KERNEL__
 #include <stdint.h>
 #endif
-/* 
+/*
  * this file contains all data structures used in Lustre interfaces:
  * - obdo and obd_request records
  * - mds_request records
  * - ldlm data
  * - ioctl's
- */ 
-
-struct lustre_msg { 
-        __u32 opc;
-        __u32 xid;
-        __u32 status;
-        __u32 type;
-        __u32   connid;
-        __u32   bufcount;
-        __u32   buflens[0];
-};
-
-struct ptlreq_hdr { 
-        __u32 opc;
-        __u32 xid;
-        __u32 status;
-        __u32 type;
-        __u32   connid;
-        __u32   bufcount;
-        __u32   buflens[0];
-};
+ */
 
-struct ptlrep_hdr { 
+struct lustre_msg {
         __u32 opc;
         __u32 xid;
         __u32 status;
@@ -72,7 +52,7 @@ struct ptlrep_hdr {
         __u32   buflens[0];
 };
 
-/* 
+/*
  *   OST requests: OBDO & OBD request records
  */
 
@@ -104,7 +84,7 @@ typedef uint32_t        obd_rdev;
 typedef uint32_t        obd_flag;
 typedef uint32_t        obd_count;
 
-#define OBD_FL_INLINEDATA       (0x00000001UL)  
+#define OBD_FL_INLINEDATA       (0x00000001UL)
 #define OBD_FL_OBDMDEXISTS      (0x00000002UL)
 
 #define OBD_INLINESZ    60
@@ -158,31 +138,20 @@ struct obdo {
 
 #define OST_REQ_HAS_OA1  0x1
 
-struct ost_req { 
+struct ost_body {
         __u32   connid;
-        __u32   cmd; 
+        __u32   data;
         struct  obdo oa;
-        __u32   buflen1;
-        __u32   buflen2;
 };
 
-struct ost_rep {
-        __u32   result;
-        __u32   connid;
-        struct  obdo oa;
-        __u32   buflen1;
-        __u32   buflen2;
-};
-
-struct obd_ioobj { 
+struct obd_ioobj {
         obd_id    ioo_id;
         obd_gr    ioo_gr;
         __u32     ioo_type;
         __u32     ioo_bufcnt;
 };
 
-
-/* 
+/*
  *   MDS REQ RECORDS
  */
 
@@ -192,81 +161,54 @@ struct obd_ioobj {
 #define MDS_REINT     4
 #define MDS_READPAGE  5
 
-#define REINT_SETATTR 0
-#define REINT_CREATE  1
-#define REINT_LINK    2
-#define REINT_UNLINK  3
-#define REINT_RENAME  4
-#define REINT_MAX     4
+#define REINT_SETATTR 1
+#define REINT_CREATE  2
+#define REINT_LINK    3
+#define REINT_UNLINK  4
+#define REINT_RENAME  5
+#define REINT_MAX     5
 
-struct ll_fid { 
+struct ll_fid {
         __u64 id;
         __u32 generation;
         __u32 f_type;
 };
 
-struct niobuf { 
+struct niobuf {
         __u64 addr;
-        __u64 offset; 
+        __u64 offset;
         __u32 len;
         __u32 flags;
         __u32 xid;
         void *page;
 };
 
-struct mds_req {
-        struct ll_fid        fid1;
-        struct ll_fid        fid2;
-        __u32                       namelen;
-        __u32                       tgtlen;
-        __u32                       opcode;
-        __u32                       valid;
-        __u32                       mode;
-        __u32                       uid;
-        __u32                       gid;
-        __u64                       objid;
-        __u64                       size;
-        __u32                       mtime;
-        __u32                       ctime;
-        __u32                       atime;
-        __u32                       flags;
-        __u32                       major;
-        __u32                       minor;
-        __u32                       ino;
-        __u32                       nlink;
-        __u32                       generation;
+struct mds_body {
+        struct ll_fid  fid1;
+        struct ll_fid  fid2;
+        __u64          objid;
+        __u64          size;
+        __u32          valid;
+        __u32          mode;
+        __u32          uid;
+        __u32          gid;
+        __u32          mtime;
+        __u32          ctime;
+        __u32          atime;
+        __u32          flags;
+        __u32          major;
+        __u32          minor;
+        __u32          ino;
+        __u32          nlink;
+        __u32          generation;
 };
 
-struct mds_rep {
-        struct ll_fid               fid1;
-        struct ll_fid               fid2;
-        __u32                       namelen;
-        __u32                       tgtlen;
-        __u32                       valid;
-        __u32                       mode;
-        __u32                       uid;
-        __u32                       gid;
-        __u64                       objid;
-        __u64                       size;
-        __u32                       mtime;
-        __u32                       ctime;
-        __u32                       atime;
-        __u32                       flags;
-        __u32                       major;
-        __u32                       minor;
-        __u32                       ino;
-        __u32                       nlink;
-        __u32                       generation;
-};
-
-/* MDS update records */ 
-struct mds_update_record_hdr { 
-        __u32 ur_reclen;
+/* MDS update records */
+struct mds_update_record_hdr {
         __u32 ur_opcode;
 };
 
-struct mds_rec_setattr { 
-        __u32           sa_reclen;
+struct mds_rec_setattr {
         __u32           sa_opcode;
         struct ll_fid   sa_fid;
         __u32           sa_valid;
@@ -280,48 +222,36 @@ struct mds_rec_setattr {
         __u32           sa_attr_flags;
 };
 
-struct mds_rec_create { 
-        __u32           cr_reclen;
+struct mds_rec_create {
         __u32           cr_opcode;
         struct ll_fid   cr_fid;
         __u32           cr_uid;
         __u32           cr_gid;
         __u64           cr_time;
         __u32           cr_mode;
-        /* overloaded: id for create, tgtlen for symlink, rdev for mknod */ 
-        __u64           cr_id; 
-        __u32           cr_namelen;
-        __u32           cr_tgtlen;
-        /* name here */
-        /* symlink target here */ 
+        /* overloaded: id for create, tgtlen for symlink, rdev for mknod */
+        __u64           cr_id;
 };
 
-struct mds_rec_link { 
-        __u32           lk_reclen;
+struct mds_rec_link {
         __u32           lk_opcode;
         struct ll_fid   lk_fid1;
         struct ll_fid   lk_fid2;
-        __u32           lk_namelen;
 };
 
-struct mds_rec_unlink { 
-        __u32           ul_reclen;
+struct mds_rec_unlink {
         __u32           ul_opcode;
         struct ll_fid   ul_fid1;
         struct ll_fid   ul_fid2;
-        __u32           ul_namelen;
 };
 
-struct mds_rec_rename { 
-        __u32           rn_reclen;
+struct mds_rec_rename {
         __u32           rn_opcode;
         struct ll_fid   rn_fid1;
         struct ll_fid   rn_fid2;
-        __u32           rn_namelen;
-        __u32           rn_tgtlen;
 };
 
-#ifdef __KERNEL__ 
+#ifdef __KERNEL__
 
 static inline void ll_ino2fid(struct ll_fid *fid, ino_t ino, __u32 generation,
                               int type)
@@ -337,9 +267,9 @@ static inline void ll_inode2fid(struct ll_fid *fid, struct inode *inode)
                    inode->i_mode & S_IFMT);
 }
 
-#endif 
+#endif
 
-/* 
+/*
  *   LDLM requests:
  */
 
@@ -387,14 +317,14 @@ struct ldlm_reply {
         struct ldlm_handle lock_handle;
 };
 
-/* 
+/*
  *   OBD IOCTLS
  */
 
 
 #define OBD_IOCTL_VERSION 0x00010001
 
-struct obd_ioctl_data { 
+struct obd_ioctl_data {
         uint32_t ioc_len;
         uint32_t ioc_version;
         uint32_t ioc_conn1;
@@ -420,7 +350,7 @@ struct obd_ioctl_data {
         char    ioc_bulk[0];
 };
 
-struct obd_ioctl_hdr { 
+struct obd_ioctl_hdr {
         uint32_t ioc_len;
         uint32_t ioc_version;
 };
@@ -435,15 +365,15 @@ static inline int obd_ioctl_packlen(struct obd_ioctl_data *data)
 
 static inline int obd_ioctl_is_invalid(struct obd_ioctl_data *data)
 {
-        if (data->ioc_len > (1<<30)) { 
+        if (data->ioc_len > (1<<30)) {
                 printk("OBD ioctl: ioc_len larger than 1<<30\n");
                 return 1;
         }
-        if (data->ioc_inllen1 > (1<<30)) { 
+        if (data->ioc_inllen1 > (1<<30)) {
                 printk("OBD ioctl: ioc_inllen1 larger than 1<<30\n");
                 return 1;
         }
-        if (data->ioc_inllen2 > (1<<30)) { 
+        if (data->ioc_inllen2 > (1<<30)) {
                 printk("OBD ioctl: ioc_inllen2 larger than 1<<30\n");
                 return 1;
         }
@@ -485,13 +415,13 @@ static inline int obd_ioctl_is_invalid(struct obd_ioctl_data *data)
                 printk("OBD ioctl: packlen exceeds ioc_len\n");
                 return 1;
         }
-        if (data->ioc_inllen1 && 
-            data->ioc_bulk[data->ioc_inllen1 - 1] != '\0') { 
+        if (data->ioc_inllen1 &&
+            data->ioc_bulk[data->ioc_inllen1 - 1] != '\0') {
                 printk("OBD ioctl: inlbuf1 not 0 terminated\n");
                 return 1;
         }
-        if (data->ioc_inllen2 && 
-            data->ioc_bulk[size_round(data->ioc_inllen1) + data->ioc_inllen2 - 1] != '\0') { 
+        if (data->ioc_inllen2 &&
+            data->ioc_bulk[size_round(data->ioc_inllen1) + data->ioc_inllen2 - 1] != '\0') {
                 printk("OBD ioctl: inlbuf2 not 0 terminated\n");
                 return 1;
         }
@@ -507,9 +437,9 @@ static inline int obd_ioctl_pack(struct obd_ioctl_data *data, char **pbuf,
         data->ioc_len = obd_ioctl_packlen(data);
         data->ioc_version = OBD_IOCTL_VERSION;
 
-        if (*pbuf && obd_ioctl_packlen(data) > max) 
+        if (*pbuf && obd_ioctl_packlen(data) > max)
                 return 1;
-        if (*pbuf == NULL) { 
+        if (*pbuf == NULL) {
                 *pbuf = malloc(data->ioc_len);
         }
         if (!*pbuf)
@@ -547,18 +477,18 @@ static inline int obd_ioctl_getdata(char *buf, char *end, void *arg)
                 return err;
         }
 
-        if (hdr->ioc_version != OBD_IOCTL_VERSION) { 
+        if (hdr->ioc_version != OBD_IOCTL_VERSION) {
                 printk("OBD: version mismatch kernel vs application\n");
                 return -EINVAL;
         }
 
-        if (hdr->ioc_len + buf >= end) { 
+        if (hdr->ioc_len + buf >= end) {
                 printk("OBD: user buffer exceeds kernel buffer\n");
                 return -EINVAL;
         }
 
 
-        if (hdr->ioc_len < sizeof(struct obd_ioctl_data)) { 
+        if (hdr->ioc_len < sizeof(struct obd_ioctl_data)) {
                 printk("OBD: user buffer too small for ioctl\n");
                 return -EINVAL;
         }
@@ -569,16 +499,16 @@ static inline int obd_ioctl_getdata(char *buf, char *end, void *arg)
                 return err;
         }
 
-        if (obd_ioctl_is_invalid(data)) { 
+        if (obd_ioctl_is_invalid(data)) {
                 printk("OBD: ioctl not correctly formatted\n");
                 return -EINVAL;
         }
 
-        if (data->ioc_inllen1) { 
+        if (data->ioc_inllen1) {
                 data->ioc_inlbuf1 = &data->ioc_bulk[0];
         }
 
-        if (data->ioc_inllen2) { 
+        if (data->ioc_inllen2) {
                 data->ioc_inlbuf2 = &data->ioc_bulk[0] + size_round(data->ioc_inllen1);
         }
 
@@ -617,18 +547,4 @@ static inline int obd_ioctl_getdata(char *buf, char *end, void *arg)
 
 #define OBD_IOC_DEC_FS_USE_COUNT       _IO  ('f', 32      )
 
-
-/* GENERAL THINGS */
-union ptl_rep { 
-        struct mds_rep *mds;
-        struct ost_rep *ost;
-        struct lustre_msg *lustre;
-};
-
-union ptl_req { 
-        struct mds_req *mds;
-        struct ost_req *ost;
-        struct lustre_msg *lustre;
-};
-
 #endif
index 692aebc..f158be2 100644 (file)
@@ -43,7 +43,6 @@ static inline void l_dput(struct dentry *de)
 #define LUSTRE_MDS_NAME "mds"
 
 struct mds_update_record { 
-        __u32 ur_reclen;
         __u32 ur_opcode;
         struct ll_fid *ur_fid1;
         struct ll_fid *ur_fid2;
@@ -59,24 +58,22 @@ struct mds_update_record {
         __u64 ur_time;
 }; 
 
-/* mds/mds_pack.c */
-void *mds_req_tgt(struct mds_req *req);
-int mds_pack_req(char *name, int namelen, char *tgt, int tgtlen, struct ptlreq_hdr **hdr, union ptl_req *req, int *len, char **buf);
-int mds_unpack_req(char *buf, int len, struct ptlreq_hdr **hdr, union ptl_req *);
-int mds_pack_rep(char *name, int namelen, char *tgt, int tgtlen, struct ptlrep_hdr **hdr, union ptl_rep *rep, int *len, char **buf);
-int mds_unpack_rep(char *buf, int len, struct ptlrep_hdr **hdr, union ptl_rep *rep);
-
 /* mds/mds_reint.c  */
 int mds_reint_rec(struct mds_update_record *r, struct ptlrpc_request *req); 
 
 /* lib/mds_updates.c */
-int mds_update_unpack(char *buf, int len, struct mds_update_record *r); 
-
-void mds_setattr_pack(struct mds_rec_setattr *rec, struct inode *inode, struct iattr *iattr);
-void mds_create_pack(struct mds_rec_create *rec, struct inode *inode, const char *name, int namelen, __u32 mode, __u64 id, __u32 uid, __u32 gid, __u64 time, const char *tgt, int tgtlen);
-void mds_unlink_pack(struct mds_rec_unlink *rec, struct inode *inode, struct inode *child, const char *name, int namelen);
-void mds_link_pack(struct mds_rec_link *rec, struct inode *inode, struct inode *dir, const char *name, int namelen);
-void mds_rename_pack(struct mds_rec_rename *rec, struct inode *srcdir, struct inode *tgtdir, const char *name, int namelen, const char *tgt, int tgtlen);
+void mds_pack_body(struct ptlrpc_request *);
+void mds_unpack_body(struct ptlrpc_request *);
+int mds_update_unpack(struct ptlrpc_request *, struct mds_update_record *);
+
+void mds_setattr_pack(struct mds_rec_setattr *, struct inode *, struct iattr *);
+void mds_create_pack(struct mds_rec_create *, struct inode *,  __u32 mode,
+                     __u64 id, __u32 uid, __u32 gid, __u64 time);
+void mds_unlink_pack(struct mds_rec_unlink *, struct inode *inode,
+                     struct inode *child);
+void mds_link_pack(struct mds_rec_link *, struct inode *ino, struct inode *dir);
+void mds_rename_pack(struct mds_rec_rename *, struct inode *srcdir,
+                     struct inode *tgtdir);
 
 /* mds/handler.c */
 struct dentry *mds_fid2dentry(struct mds_obd *mds, struct ll_fid *fid, struct vfsmount **mnt);
index cf2d569..2384685 100644 (file)
 #define SVC_LIST   32
 #define SVC_SIGNAL 64
 
-typedef int (*rep_unpack_t)(char *, int, struct ptlrep_hdr **, union ptl_rep *);
-typedef int (*req_pack_t)(char *, int, char *, int, struct ptlreq_hdr **,
-                          union ptl_req*, int *, char **); 
-
-typedef int (*req_unpack_t)(char *buf, int len, struct ptlreq_hdr **, 
-                            union ptl_req *);
-typedef int (*rep_pack_t)(char *buf1, int len1, char *buf2, int len2,
-                          struct ptlrep_hdr **, union ptl_rep*, 
-                          int *replen, char **repbuf); 
-
 struct ptlrpc_client {
         struct lustre_peer cli_server;
         struct obd_device *cli_obd;
         __u32 cli_request_portal;
         __u32 cli_reply_portal;
-        rep_unpack_t cli_rep_unpack;
-        req_pack_t cli_req_pack;
 
         spinlock_t cli_lock;
         __u32 cli_xid;
@@ -107,15 +95,13 @@ struct ptlrpc_request {
         __u32 rq_connid;
         __u32 rq_xid;
 
-        char *rq_reqbuf;
         int rq_reqlen;
-        struct ptlreq_hdr *rq_reqhdr;
-        union ptl_req rq_req;
+        char *rq_reqbuf;
+        struct lustre_msg *rq_reqmsg;
 
-        char *rq_repbuf;
         int rq_replen;
-        struct ptlrep_hdr *rq_rephdr;
-        union ptl_rep rq_rep;
+        char *rq_repbuf;
+        struct lustre_msg *rq_repmsg;
 
         char *rq_bulkbuf;
         int rq_bulklen;
@@ -183,8 +169,6 @@ struct ptlrpc_service {
         spinlock_t srv_lock;
         struct list_head srv_reqs;
         ptl_event_t  srv_ev;
-        req_unpack_t      srv_req_unpack;
-        rep_pack_t        srv_rep_pack;
         int (*srv_handler)(struct obd_device *obddev, 
                            struct ptlrpc_service *svc,
                            struct ptlrpc_request *req);
@@ -210,14 +194,12 @@ int ptl_send_rpc(struct ptlrpc_request *request, struct ptlrpc_client *cl);
 void ptlrpc_link_svc_me(struct ptlrpc_service *service, int i);
 
 /* rpc/client.c */
-int ptlrpc_connect_client(int dev, char *uuid, int req_portal, int rep_portal, 
-                          req_pack_t req_pack, rep_unpack_t rep_unpack,
+int ptlrpc_connect_client(int dev, char *uuid, int req_portal, int rep_portal,
                           struct ptlrpc_client *cl);
 int ptlrpc_queue_wait(struct ptlrpc_client *cl, struct ptlrpc_request *req);
 int ptlrpc_queue_req(struct ptlrpc_client *peer, struct ptlrpc_request *req);
-struct ptlrpc_request *ptlrpc_prep_req(struct ptlrpc_client *cl, 
-                                       int opcode, int namelen, char *name,
-                                       int tgtlen, char *tgt);
+struct ptlrpc_request *ptlrpc_prep_req(struct ptlrpc_client *cl, int opcode,
+                                       int count, int *lengths, char **bufs);
 void ptlrpc_free_req(struct ptlrpc_request *request);
 struct ptlrpc_bulk_desc *ptlrpc_prep_bulk(struct lustre_peer *);
 int ptlrpc_check_status(struct ptlrpc_request *req, int err);
@@ -237,4 +219,10 @@ struct ptlrpc_svc_data {
         struct obd_device *dev;
 }; 
 
+/* rpc/pack_generic.c */
+int lustre_pack_msg(int count, int *lens, char **bufs, int *len, char **buf);
+int lustre_msg_size(int count, int *lengths);
+int lustre_unpack_msg(char *buf, int len);
+void *lustre_msg_buf(struct lustre_msg *m, int n);
+
 #endif
index 04c8b5b..d97bdba 100644 (file)
@@ -1,7 +1,6 @@
 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
- *
  * Copyright (C) 2001  Cluster File Systems, Inc.
  *
  * This code is issued under the GNU General Public License.
@@ -27,10 +26,10 @@ struct obd_type {
         int  typ_refcnt;
 };
 
-struct obd_run_ctxt { 
-       struct vfsmount *pwdmnt;
-       struct dentry   *pwd;
-       mm_segment_t     fs;
+struct obd_run_ctxt {
+        struct vfsmount *pwdmnt;
+        struct dentry   *pwd;
+        mm_segment_t     fs;
 };
 
 struct obd_conn {
@@ -39,42 +38,42 @@ struct obd_conn {
 };
 
 struct obd_devicename {
-       uint32_t len;
-       char *   name;
+        uint32_t len;
+        char *name;
         struct dentry *dentry;   /* file system obd device names */
-        __u8           _uuid[16]; /* uuid obd device names */
+        __u8 _uuid[16];          /* uuid obd device names */
 };
 
 
 /* Individual type definitions */
 
 struct ext2_obd {
-        struct super_block * e2_sb;
-       struct vfsmount *e2_vfsmnt;
+        struct super_block *e2_sb;
+        struct vfsmount *e2_vfsmnt;
 };
 
 struct filter_obd {
-       char *fo_fstype;
-        struct super_block * fo_sb;
-       struct vfsmount *fo_vfsmnt;
-       struct obd_run_ctxt fo_ctxt;
-       spinlock_t fo_lock;
-       __u64 fo_lastino;
-       struct file_operations *fo_fop; 
-       struct inode_operations *fo_iop;
-       struct address_space_operations *fo_aops;
+        char *fo_fstype;
+        struct super_block *fo_sb;
+        struct vfsmount *fo_vfsmnt;
+        struct obd_run_ctxt fo_ctxt;
+        spinlock_t fo_lock;
+        __u64 fo_lastino;
+        struct file_operations *fo_fop;
+        struct inode_operations *fo_iop;
+        struct address_space_operations *fo_aops;
 };
 
 struct mds_obd {
         struct ptlrpc_service *mds_service;
 
-       char *mds_fstype;
-        struct super_block * mds_sb;
-       struct vfsmount *mds_vfsmnt;
-       struct obd_run_ctxt mds_ctxt;
-       struct file_operations *mds_fop; 
-       struct inode_operations *mds_iop;
-       struct address_space_operations *mds_aops;
+        char *mds_fstype;
+        struct super_block *mds_sb;
+        struct vfsmount *mds_vfsmnt;
+        struct obd_run_ctxt mds_ctxt;
+        struct file_operations *mds_fop;
+        struct inode_operations *mds_iop;
+        struct address_space_operations *mds_aops;
         struct mds_fs_operations *mds_fsops;
 };
 
@@ -86,15 +85,15 @@ struct ldlm_obd {
 };
 
 struct echo_obd {
-       char *eo_fstype;
+        char *eo_fstype;
         struct super_block *eo_sb;
-       struct vfsmount *eo_vfsmnt;
-       struct obd_run_ctxt eo_ctxt;
-       spinlock_t eo_lock;
-       __u64 eo_lastino;
-       struct file_operations *eo_fop; 
-       struct inode_operations *eo_iop;
-       struct address_space_operations *eo_aops;
+        struct vfsmount *eo_vfsmnt;
+        struct obd_run_ctxt eo_ctxt;
+        spinlock_t eo_lock;
+        __u64 eo_lastino;
+        struct file_operations *eo_fop;
+        struct inode_operations *eo_iop;
+        struct address_space_operations *eo_aops;
 };
 
 struct trace_obd {
@@ -103,8 +102,8 @@ struct trace_obd {
 
 #if 0
 struct snap_obd {
-       unsigned int snap_index;  /* which snapshot index are we accessing */
-       int snap_tableno;
+        unsigned int snap_index;  /* which snapshot index are we accessing */
+        int snap_tableno;
 };
 
 struct raid1_obd {
@@ -120,13 +119,13 @@ struct raid1_obd {
 struct ost_obd {
         struct ptlrpc_service *ost_service;
 
-       struct obd_device *ost_tgt;
-       struct obd_conn ost_conn;
+        struct obd_device *ost_tgt;
+        struct obd_conn ost_conn;
 };
 
 struct osc_obd {
-       struct obd_device *osc_tgt;
-        struct ptlrpc_client *osc_peer;
+        struct obd_device *osc_tgt;
+        struct ptlrpc_client *osc_client;
 };
 
 /* corresponds to one of the obd's */
@@ -135,9 +134,9 @@ struct obd_device {
         struct obd_type *obd_type;
         int obd_minor;
         int obd_flags;
-        int obd_refcnt; 
-        struct obd_devicename obd_fsname; 
-       struct proc_dir_entry *obd_proc_entry;
+        int obd_refcnt;
+        struct obd_devicename obd_fsname;
+        struct proc_dir_entry *obd_proc_entry;
         int obd_multi_count;
         struct obd_conn obd_multi_conn[MAX_MULTI];
         unsigned int obd_gen_last_id;
@@ -153,7 +152,7 @@ struct obd_device {
                 struct osc_obd osc;
                 struct ldlm_obd ldlm;
                 struct echo_obd echo;
-               struct trace_obd trace;
+                struct trace_obd trace;
 #if 0
                 struct raid1_obd raid1;
                 struct snap_obd snap;
@@ -200,13 +199,13 @@ struct obd_ops {
                       obd_size count, obd_off offset);
         int (*o_iterate)(struct obd_conn *conn, int (*)(obd_id, obd_gr, void *),
                          obd_id *startid, obd_gr group, void *data);
-       int (*o_preprw)(int cmd, struct obd_conn *conn, 
-                       int objcount, struct obd_ioobj *obj, 
-                       int niocount, struct niobuf *nb, 
-                       struct niobuf *res);
-       int (*o_commitrw)(int cmd, struct obd_conn *conn, 
-                         int objcount, struct obd_ioobj *obj, 
-                         int niocount, struct niobuf *res);
+        int (*o_preprw)(int cmd, struct obd_conn *conn,
+                        int objcount, struct obd_ioobj *obj,
+                        int niocount, struct niobuf *nb,
+                        struct niobuf *res);
+        int (*o_commitrw)(int cmd, struct obd_conn *conn,
+                          int objcount, struct obd_ioobj *obj,
+                          int niocount, struct niobuf *res);
 };
 
 #endif
index bf36018..5e47065 100644 (file)
@@ -109,8 +109,8 @@ static inline int obd_check_conn(struct obd_conn *conn)
         return 0;
 }
 
-#define OBT(dev)        dev->obd_type
-#define OBP(dev,op)     dev->obd_type->typ_ops->o_ ## op
+#define OBT(dev)        (dev)->obd_type
+#define OBP(dev,op)     (dev)->obd_type->typ_ops->o_ ## op
 
 #define OBD_CHECK_SETUP(conn)                                   \
 do {                                                            \
@@ -699,9 +699,4 @@ int gen_copy_data(struct obd_conn *dst_conn, struct obdo *dst,
 extern void obd_sysctl_init (void);
 extern void obd_sysctl_clean (void);
 
-/* pack_generic.c */
-int lustre_pack_msg(int count, int *lens, char **bufs, int *len, char **buf);
-int lustre_unpack_msg(char *buf, int len);
-void *lustre_msg_buf(int n, struct lustre_msg *m);
-
 #endif /* __LINUX_CLASS_OBD_H */
index ddfc4b7..e1c8f92 100644 (file)
 #define LUSTRE_OSC_NAME "osc"
 
 /* ost/ost_pack.c */
-int ost_pack_req(char *buf1, int buflen1, char *buf2, int buflen2, struct ptlreq_hdr **hdr, union ptl_req *req, int *len, char **buf);
-int ost_unpack_req(char *buf, int len, struct ptlreq_hdr **hdr, union ptl_req *req);
-int ost_pack_rep(char *buf1, int buflen1, char *buf2, int buflen2,
-                struct ptlrep_hdr **hdr, union ptl_rep *r,
-                int *len, char **buf);
-int ost_unpack_rep(char *buf, int len, struct ptlrep_hdr **hdr, union ptl_rep *rep);
-
 void ost_pack_niobuf(void **tmp, void *addr, __u64 offset, __u32 len, 
                      __u32 flags, __u32 xid);
 void ost_unpack_niobuf(void **tmp, struct niobuf **nbp);
 void ost_pack_ioo(void **tmp, struct obdo *oa, int bufcnt);
 void ost_unpack_ioo(void **tmp, struct obd_ioobj **ioop);
-void *ost_req_buf2(struct ost_req *req);
-void *ost_req_buf1(struct ost_req *req);
-void *ost_rep_buf2(struct ost_rep *rep);
-void *ost_rep_buf1(struct ost_rep *rep);
 
 #endif
index c060a2b..925775b 100644 (file)
@@ -8,10 +8,8 @@ MODULE = ldlm
 modulefs_DATA = ldlm.o
 EXTRA_PROGRAMS = ldlm
 
-pack_generic.c:
-       ln -s ../lib/pack_generic.c
 ldlm_SOURCES = ldlm_lock.c ldlm_resource.c ldlm_test.c ldlm_lockd.c \
-ldlm_extent.c pack_generic.c
+ldlm_extent.c
 
 include $(top_srcdir)/Rules
 
index 5dd68e9..b2359eb 100644 (file)
@@ -36,10 +36,8 @@ static int ldlm_enqueue(struct ptlrpc_request *req)
 {
         struct ldlm_reply *dlm_rep;
         struct ldlm_request *dlm_req;
-        struct lustre_msg *msg, *req_msg;
         ldlm_error_t err;
-        int rc;
-        int bufsize = sizeof(*dlm_rep);
+        int rc, bufsize = sizeof(*dlm_rep);
         
         rc = lustre_pack_msg(1, &bufsize, NULL, &req->rq_replen,
                              &req->rq_repbuf);
@@ -48,12 +46,9 @@ static int ldlm_enqueue(struct ptlrpc_request *req)
                 req->rq_status = -ENOMEM;
                 RETURN(0);
         }
-        msg = (struct lustre_msg *)req->rq_repbuf;
-        req_msg = req->rq_req.lustre;
-        dlm_rep = lustre_msg_buf(0, msg);
-        dlm_req = lustre_msg_buf(0, req_msg);
-
-        msg->xid = req_msg->xid;
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        dlm_rep = lustre_msg_buf(req->rq_repmsg, 0);
+        dlm_req = lustre_msg_buf(req->rq_reqmsg, 0);
 
         err = ldlm_local_lock_enqueue(req->rq_obd,
                                       dlm_req->ns_id,
@@ -65,40 +60,36 @@ static int ldlm_enqueue(struct ptlrpc_request *req)
                                       &dlm_req->flags,
                                       ldlm_client_callback,
                                       ldlm_client_callback,
-                                      lustre_msg_buf(1, req_msg),
-                                      req_msg->buflens[1],
+                                      lustre_msg_buf(req->rq_reqmsg, 1),
+                                      req->rq_reqmsg->buflens[1],
                                       &dlm_rep->lock_handle);
-        msg->status = HTON__u32(err);
+        req->rq_status = err;
 
-        /* XXX unfinished */
-        return 0;
+        CERROR("local_lock_enqueue: %d\n", err);
+
+        RETURN(0);
 }
 
 static int ldlm_handle(struct obd_device *dev, struct ptlrpc_service *svc,
                        struct ptlrpc_request *req)
 {
         int rc;
-        struct ptlreq_hdr *hdr;
-
         ENTRY;
 
-        hdr = (struct ptlreq_hdr *)req->rq_reqbuf;
-
-        if (NTOH__u32(hdr->type) != PTL_RPC_REQUEST) {
-                CERROR("lustre_ldlm: wrong packet type sent %d\n",
-                       NTOH__u32(hdr->type));
-                rc = -EINVAL;
-                GOTO(out, rc);
-        }
-
         rc = lustre_unpack_msg(req->rq_reqbuf, req->rq_reqlen);
-        req->rq_reqhdr = (void *)req->rq_reqbuf;
+        req->rq_reqmsg = (struct lustre_msg *)req->rq_reqbuf;
         if (rc) {
                 CERROR("lustre_ldlm: Invalid request\n");
                 GOTO(out, rc);
         }
 
-        switch (req->rq_reqhdr->opc) {
+        if (req->rq_reqmsg->type != PTL_RPC_REQUEST) {
+                CERROR("lustre_ldlm: wrong packet type sent %d\n",
+                       req->rq_reqmsg->type);
+                GOTO(out, rc = -EINVAL);
+        }
+
+        switch (req->rq_reqmsg->opc) {
         case LDLM_ENQUEUE:
                 CDEBUG(D_INODE, "enqueue\n");
                 OBD_FAIL_RETURN(OBD_FAIL_LDLM_ENQUEUE, 0);
@@ -146,12 +137,11 @@ out:
         return 0;
 }
 
-
-
 static int ldlm_iocontrol(int cmd, struct obd_conn *conn, int len, void *karg,
                           void *uarg)
 {
         struct obd_device *obddev = conn->oc_dev;
+        struct ptlrpc_client cl;
         int err;
 
         ENTRY;
@@ -165,6 +155,14 @@ static int ldlm_iocontrol(int cmd, struct obd_conn *conn, int len, void *karg,
                 return -EINVAL;
         }
 
+        err = ptlrpc_connect_client(-1, "ldlm",
+                                    LDLM_REQUEST_PORTAL, LDLM_REPLY_PORTAL,
+                                    &cl);
+        if (err) {
+                CERROR("cannot create client\n");
+                RETURN(-EINVAL);
+        }
+
         switch (cmd) {
         case IOC_LDLM_TEST: {
                 err = ldlm_test(obddev);
index 2e999b8..ce88106 100644 (file)
@@ -1,3 +1,3 @@
-EXTRA_DIST = mds_pack.c  mds_updates.c  obd_pack.c  page.c pack_generic.c
+EXTRA_DIST = mds_updates.c obd_pack.c page.c
 
 include $(top_srcdir)/Rules
diff --git a/lustre/lib/mds_pack.c b/lustre/lib/mds_pack.c
deleted file mode 100644 (file)
index 773ef71..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001 Cluster File Systems, Inc. <braam@clusterfs.com>
- *
- *   This file is part of Lustre, http://www.lustre.org.
- *
- *   Lustre is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   Lustre is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with Lustre; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * (Un)packing of MDS and OST request records
- *
- */
-
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/sched.h>
-#include <linux/lp.h>
-#include <linux/slab.h>
-#include <linux/ioport.h>
-#include <linux/fcntl.h>
-#include <linux/delay.h>
-#include <linux/skbuff.h>
-#include <linux/proc_fs.h>
-#include <linux/fs.h>
-#include <linux/poll.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <asm/io.h>
-#include <asm/segment.h>
-#include <asm/system.h>
-#include <asm/poll.h>
-#include <asm/uaccess.h>
-
-#define DEBUG_SUBSYSTEM S_MDS
-
-#include <linux/lustre_mds.h>
-#include <linux/lustre_lib.h>
-
-int mds_pack_req(char *name, int namelen, char *tgt, int tgtlen, 
-                struct ptlreq_hdr **hdr, union ptl_req *r,
-                int *len, char **buf)
-{
-        struct mds_req *req;
-       char *ptr;
-
-       *len = sizeof(**hdr) + size_round(namelen) + size_round(tgtlen) + 
-               sizeof(*req); 
-
-       OBD_ALLOC(*buf, *len);
-       if (!*buf) {
-               RETURN(-ENOMEM);
-       }
-
-       memset(*buf, 0, *len); 
-       *hdr = (struct ptlreq_hdr *)(*buf);
-       req = (struct mds_req *)(*buf + sizeof(**hdr));
-        r->mds = req;
-
-       ptr = *buf + sizeof(**hdr) + sizeof(*req);
-
-       (*hdr)->type =  PTL_RPC_REQUEST;
-
-       req->namelen = NTOH__u32(namelen);
-        LOGL(name, namelen, ptr); 
-
-       req->tgtlen = NTOH__u32(tgtlen);
-        LOGL(tgt, tgtlen, ptr);
-
-       RETURN(0);
-}
-
-
-int mds_unpack_req(char *buf, int len, 
-                  struct ptlreq_hdr **hdr, union ptl_req *r)
-{
-        struct mds_req *req;
-        char *name, *tgt;
-
-       if (len < sizeof(**hdr) + sizeof(*req)) { 
-               RETURN(-EINVAL);
-       }
-
-       *hdr = (struct ptlreq_hdr *) (buf);
-        req = (struct mds_req *) (buf + sizeof(**hdr));
-        r->mds = req;
-
-       req->namelen = NTOH__u32(req->namelen); 
-       req->tgtlen = NTOH__u32(req->tgtlen); 
-
-       if (len < sizeof(**hdr) + sizeof(*req) +
-            size_round(req->namelen) + size_round(req->tgtlen) ) { 
-               RETURN(-EINVAL);
-       }
-
-       if (req->namelen) { 
-               name = buf + sizeof(**hdr) + sizeof(*req);
-       } else { 
-               name = NULL;
-       }
-
-       if (req->tgtlen) { 
-               tgt = buf + sizeof(**hdr) + sizeof(*req) + 
-                        size_round(req->namelen);
-       } else { 
-               tgt = NULL;
-       }
-
-       RETURN(0);
-}
-
-void *mds_req_tgt(struct mds_req *req)
-{
-        if (!req->tgtlen) 
-                return NULL;
-        return (void *)((char *)req + sizeof(*req) + 
-                        size_round(req->namelen)); 
-}
-
-void *mds_req_name(struct mds_req *req)
-{
-        if (!req->namelen) 
-                return NULL;
-        return (void *)((char *)req + sizeof(*req));
-}
-
-int mds_pack_rep(char *name, int namelen, char *tgt, int tgtlen, 
-                struct ptlrep_hdr **hdr, union ptl_rep *r,
-                int *len, char **buf)
-{
-        struct mds_rep *rep;
-       char *ptr;
-
-       *len = sizeof(**hdr) + size_round(namelen) + size_round(tgtlen) + 
-               sizeof(*rep); 
-
-       OBD_ALLOC(*buf, *len);
-       if (!*buf) {
-               EXIT;
-               return -ENOMEM;
-       }
-
-       memset(*buf, 0, *len); 
-       *hdr = (struct ptlrep_hdr *)(*buf);
-        rep = (struct mds_rep *)(*buf + sizeof(**hdr));
-        r->mds = rep;
-
-       ptr = *buf + sizeof(**hdr) + sizeof(*rep);
-
-       (*hdr)->type =  PTL_RPC_REPLY;
-
-       rep->namelen = NTOH__u32(namelen);
-       if (name) { 
-               LOGL(name, namelen, ptr); 
-       } 
-
-        rep->tgtlen = NTOH__u32(tgtlen);
-       if (tgt) { 
-               LOGL(tgt, tgtlen, ptr);
-       }
-       return 0;
-}
-
-int mds_unpack_rep(char *buf, int len, 
-                  struct ptlrep_hdr **hdr, union ptl_rep *r)
-{
-        struct mds_rep *rep;
-       if (len < sizeof(**hdr)) { 
-               EXIT;
-               return -EINVAL;
-       }
-       *hdr = (struct ptlrep_hdr *) (buf);
-
-       if (len < sizeof(**hdr) + sizeof(*rep)) { 
-               EXIT;
-               return -EINVAL;
-       }
-
-        rep = (struct mds_rep *) (buf + sizeof(**hdr));
-        r->mds = rep;
-       rep->namelen = NTOH__u32(rep->namelen); 
-       rep->tgtlen = NTOH__u32(rep->namelen); 
-
-       if (len < sizeof(**hdr) + sizeof(*rep) 
-            + size_round(rep->namelen) + size_round(rep->tgtlen) ) { 
-               EXIT;
-               return -EINVAL;
-       }
-
-       EXIT;
-       return 0;
-}
-
-void *mds_rep_name(struct mds_rep *rep)
-{
-        if (!rep->namelen) 
-                return NULL;
-        return (void *)((char *)rep + sizeof(*rep));
-}
-
-void *mds_rep_tgt(struct mds_rep *rep)
-{
-        if (!rep->tgtlen) 
-                return NULL;
-        return (void *)((char *)rep + sizeof(*rep) + size_round(rep->namelen)); 
-}
-
index e33d432..3580370 100644 (file)
@@ -1,4 +1,6 @@
-/*
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+ * vim:expandtab:shiftwidth=8:tabstop=8:
+ *
  * Lustre Light Update Records
  *
  * This code is issued under the GNU General Public License.
 #include <linux/lustre_lib.h>
 #include <linux/lustre_mds.h>
 
+void mds_pack_body(struct ptlrpc_request *req)
+{
+        struct mds_body *b = lustre_msg_buf(req->rq_reqmsg, 0);
+        if (b == NULL)
+                LBUG();
+
+        /* fid1/fid2 are already packed by another function */
+        b->objid = HTON__u64(b->objid);
+        b->size = HTON__u64(b->size);
+        b->valid = HTON__u32(b->valid);
+        b->mode = HTON__u32(b->mode);
+        b->uid = HTON__u32(b->uid);
+        b->gid = HTON__u32(b->gid);
+        b->mtime = HTON__u32(b->mtime);
+        b->ctime = HTON__u32(b->ctime);
+        b->atime = HTON__u32(b->atime);
+        b->flags = HTON__u32(b->flags);
+        b->major = HTON__u32(b->major);
+        b->minor = HTON__u32(b->minor);
+        b->ino = HTON__u32(b->ino);
+        b->nlink = HTON__u32(b->nlink);
+        b->generation = HTON__u32(b->generation);
+}
+
 /* packing of MDS records */
 void mds_create_pack(struct mds_rec_create *rec, struct inode *inode,
-                     const char *name, int namelen, __u32 mode, __u64 id,
-                     __u32 uid, __u32 gid, __u64 time, const char *tgt,
-                     int tgtlen)
+                     __u32 mode, __u64 id, __u32 uid, __u32 gid, __u64 time)
 {
-        char *tmp = (char *)rec + sizeof(*rec); 
         /* XXX do something about time, uid, gid */
-        rec->cr_reclen = 
-                HTON__u32(sizeof(*rec) + size_round0(namelen) + 
-                          size_round0(tgtlen));
         rec->cr_opcode = HTON__u32(REINT_CREATE);
-
-        ll_inode2fid(&rec->cr_fid, inode); 
+        ll_inode2fid(&rec->cr_fid, inode);
         rec->cr_mode = HTON__u32(mode);
         rec->cr_id = HTON__u64(id);
         rec->cr_uid = HTON__u32(uid);
         rec->cr_gid = HTON__u32(gid);
         rec->cr_time = HTON__u64(time);
-        rec->cr_namelen = HTON__u32(namelen + 1); /* for terminating \0 */ 
-        LOGL0(name, namelen, tmp); 
-        if (tgt) { 
-                rec->cr_tgtlen = HTON__u32(tgtlen + 1); 
-                LOGL0(tgt, tgtlen, tmp); 
-        }
 }
 
 void mds_setattr_pack(struct mds_rec_setattr *rec, struct inode *inode,
                       struct iattr *iattr)
 {
-        rec->sa_reclen = HTON__u32(sizeof(*rec));
         rec->sa_opcode = HTON__u32(REINT_SETATTR);
-
-        ll_inode2fid(&rec->sa_fid, inode); 
+        ll_inode2fid(&rec->sa_fid, inode);
         rec->sa_valid = HTON__u32(iattr->ia_valid);
         rec->sa_mode = HTON__u32(iattr->ia_mode);
         rec->sa_uid = HTON__u32(iattr->ia_uid);
@@ -79,80 +90,66 @@ void mds_setattr_pack(struct mds_rec_setattr *rec, struct inode *inode,
 }
 
 void mds_unlink_pack(struct mds_rec_unlink *rec, struct inode *inode,
-                     struct inode *child, const char *name, int namelen)
+                     struct inode *child)
 {
-        char *tmp = (char *)rec + sizeof(*rec); 
-
-        rec->ul_reclen = HTON__u32(sizeof(*rec)) + size_round0(namelen);
         rec->ul_opcode = HTON__u32(REINT_UNLINK);
-
         ll_inode2fid(&rec->ul_fid1, inode);
         ll_inode2fid(&rec->ul_fid2, child);
-        rec->ul_namelen = HTON__u32(namelen + 1); /* for terminating \0 */ 
-        LOGL0(name, namelen, tmp); 
 }
 
-void mds_link_pack(struct mds_rec_link *rec, 
-                     struct inode *inode, struct inode *dir,
-                     const char *name, int namelen)
+void mds_link_pack(struct mds_rec_link *rec,
+                   struct inode *inode, struct inode *dir)
 {
-        char *tmp = (char *)rec + sizeof(*rec); 
-        rec->lk_reclen = HTON__u32(sizeof(*rec)) + size_round0(namelen);
         rec->lk_opcode = HTON__u32(REINT_LINK);
-
-        ll_inode2fid(&rec->lk_fid1, inode); 
-        ll_inode2fid(&rec->lk_fid2, dir); 
-        rec->lk_namelen = HTON__u32(namelen + 1); /* for terminating \0 */ 
-        LOGL0(name, namelen, tmp); 
+        ll_inode2fid(&rec->lk_fid1, inode);
+        ll_inode2fid(&rec->lk_fid2, dir);
 }
 
-void mds_rename_pack(struct mds_rec_rename *rec, struct inode *srcdir, struct inode *tgtdir, const char *name, int namelen, const char *tgt, int tgtlen)
+void mds_rename_pack(struct mds_rec_rename *rec, struct inode *srcdir,
+                     struct inode *tgtdir)
 {
-        char *tmp = (char *)rec + sizeof(*rec); 
         /* XXX do something about time, uid, gid */
-        rec->rn_reclen = 
-                HTON__u32(sizeof(*rec) + size_round0(namelen) + 
-                          size_round0(tgtlen));
         rec->rn_opcode = HTON__u32(REINT_RENAME);
-
-        ll_inode2fid(&rec->rn_fid1, srcdir); 
-        ll_inode2fid(&rec->rn_fid2, tgtdir); 
-        rec->rn_namelen = HTON__u32(namelen + 1); /* for terminating \0 */ 
-        LOGL0(name, namelen, tmp); 
-        if (tgt) { 
-                rec->rn_tgtlen = HTON__u32(tgtlen + 1); 
-                LOGL0(tgt, tgtlen, tmp); 
-        }
+        ll_inode2fid(&rec->rn_fid1, srcdir);
+        ll_inode2fid(&rec->rn_fid2, tgtdir);
 }
 
 /* unpacking */
-
-static int mds_update_hdr_unpack(char *buf, int len,
-                                 struct mds_update_record *r)
+void mds_unpack_body(struct ptlrpc_request *req)
 {
-        struct mds_update_record_hdr *hdr = (struct mds_update_record_hdr *)buf;
-        
-        r->ur_reclen = NTOH__u32(hdr->ur_reclen);
-        if (len < sizeof(*hdr) || len != r->ur_reclen) { 
-                CERROR("invalid buffer length\n"); 
-                return -EFAULT;
-        }
-        r->ur_opcode = NTOH__u32(hdr->ur_opcode); 
-        return 0;
+        struct mds_body *b = lustre_msg_buf(req->rq_repmsg, 0);
+        if (b == NULL)
+                LBUG();
+
+        b->objid = NTOH__u64(b->objid);
+        b->size = NTOH__u64(b->size);
+        b->valid = NTOH__u32(b->valid);
+        b->mode = NTOH__u32(b->mode);
+        b->uid = NTOH__u32(b->uid);
+        b->gid = NTOH__u32(b->gid);
+        b->mtime = NTOH__u32(b->mtime);
+        b->ctime = NTOH__u32(b->ctime);
+        b->atime = NTOH__u32(b->atime);
+        b->flags = NTOH__u32(b->flags);
+        b->major = NTOH__u32(b->major);
+        b->minor = NTOH__u32(b->minor);
+        b->ino = NTOH__u32(b->ino);
+        b->nlink = NTOH__u32(b->nlink);
+        b->generation = NTOH__u32(b->generation);
 }
 
-static int mds_setattr_unpack(char *buf, int len, struct mds_update_record *r)
+static int mds_setattr_unpack(struct ptlrpc_request *req,
+                              struct mds_update_record *r)
 {
-
         struct iattr *attr = &r->ur_iattr;
-        struct mds_rec_setattr *rec = (struct mds_rec_setattr *)buf; 
+        struct mds_rec_setattr *rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        ENTRY;
 
-        if (len < sizeof(*rec)) { 
-                CERROR("invalid buffer length\n"); 
-                return -EFAULT;
-        }
+        if (req->rq_reqmsg->bufcount != 1 ||
+            req->rq_reqmsg->buflens[0] != sizeof(*rec))
+                RETURN(-EFAULT);
 
-        r->ur_fid1 = &rec->sa_fid; 
+        r->ur_fid1 = &rec->sa_fid;
         attr->ia_valid = NTOH__u32(rec->sa_valid);
         attr->ia_mode = NTOH__u32(rec->sa_mode);
         attr->ia_uid = NTOH__u32(rec->sa_uid);
@@ -162,129 +159,116 @@ static int mds_setattr_unpack(char *buf, int len, struct mds_update_record *r)
         attr->ia_mtime = NTOH__u64(rec->sa_mtime);
         attr->ia_ctime = NTOH__u64(rec->sa_ctime);
         attr->ia_attr_flags = NTOH__u32(rec->sa_attr_flags);
-        return 0; 
+        RETURN(0);
 }
 
-static int mds_create_unpack(char *buf, int len, struct mds_update_record *r)
+static int mds_create_unpack(struct ptlrpc_request *req,
+                             struct mds_update_record *r)
 {
-        struct mds_rec_create *rec = (struct mds_rec_create *)buf; 
-        char *ptr, *end;
-
-        if (len < sizeof(*rec)) { 
-                CERROR("invalid buffer length\n"); 
-                return -EFAULT;
-        }
-        
-        ptr = (char *)rec + sizeof(*rec); 
-        end = ptr + len - sizeof(*rec); 
-        
+        struct mds_rec_create *rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        ENTRY;
+
+        if (req->rq_reqmsg->bufcount != 3 ||
+            req->rq_reqmsg->buflens[0] != sizeof(*rec))
+                RETURN(-EFAULT);
+
         r->ur_fid1 = &rec->cr_fid;
         r->ur_mode = NTOH__u32(rec->cr_mode);
         r->ur_id = NTOH__u64(rec->cr_id);
         r->ur_uid = NTOH__u32(rec->cr_uid);
         r->ur_gid = NTOH__u32(rec->cr_gid);
         r->ur_time = NTOH__u64(rec->cr_time);
-        r->ur_namelen = NTOH__u32(rec->cr_namelen);
-        r->ur_tgtlen = NTOH__u32(rec->cr_tgtlen);
 
-        UNLOGL0(r->ur_name, char, r->ur_namelen, ptr, end); 
-        UNLOGL0(r->ur_tgt, char, r->ur_tgtlen, ptr, end);
-        return 0;
+        r->ur_name = lustre_msg_buf(req->rq_reqmsg, 1);
+        r->ur_namelen = req->rq_reqmsg->buflens[1];
+
+        r->ur_tgt = lustre_msg_buf(req->rq_reqmsg, 2);
+        r->ur_tgtlen = req->rq_reqmsg->buflens[2];
+        RETURN(0);
 }
 
-static int mds_link_unpack(char *buf, int len, struct mds_update_record *r)
+static int mds_link_unpack(struct ptlrpc_request *req,
+                           struct mds_update_record *r)
 {
-        struct mds_rec_link *rec = (struct mds_rec_link *)buf; 
-        char *ptr, *end;
-
-        if (len < sizeof(*rec)) { 
-                CERROR("invalid buffer length\n"); 
-                return -EFAULT;
-        }
-        
-        ptr = (char *)rec + sizeof(*rec); 
-        end = ptr + len - sizeof(*rec); 
-        
+        struct mds_rec_link *rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        ENTRY;
+
+        if (req->rq_reqmsg->bufcount != 2 ||
+            req->rq_reqmsg->buflens[0] != sizeof(*rec))
+                RETURN(-EFAULT);
+
         r->ur_fid1 = &rec->lk_fid1;
         r->ur_fid2 = &rec->lk_fid2;
-        r->ur_namelen = NTOH__u32(rec->lk_namelen);
-        UNLOGL0(r->ur_name, char, r->ur_namelen, ptr, end); 
-        return 0;
+
+        r->ur_name = lustre_msg_buf(req->rq_reqmsg, 1);
+        r->ur_namelen = req->rq_reqmsg->buflens[1];
+        RETURN(0);
 }
 
-static int mds_unlink_unpack(char *buf, int len, struct mds_update_record *r)
+static int mds_unlink_unpack(struct ptlrpc_request *req,
+                             struct mds_update_record *r)
 {
-        struct mds_rec_unlink *rec = (struct mds_rec_unlink *)buf; 
-        char *ptr, *end;
+        struct mds_rec_unlink *rec = lustre_msg_buf(req->rq_reqmsg, 0);
         ENTRY;
 
-        if (len < sizeof(*rec)) { 
-                CERROR("invalid buffer length\n"); 
-                return -EFAULT;
-        }
-        
-        ptr = (char *)rec + sizeof(*rec); 
-        end = ptr + len - sizeof(*rec); 
-        
+        if (req->rq_reqmsg->bufcount != 2 ||
+            req->rq_reqmsg->buflens[0] != sizeof(*rec))
+                RETURN(-EFAULT);
+
         r->ur_fid1 = &rec->ul_fid1;
         r->ur_fid2 = &rec->ul_fid2;
-        r->ur_namelen = NTOH__u32(rec->ul_namelen);
-        UNLOGL0(r->ur_name, char, r->ur_namelen, ptr, end); 
-        EXIT;
-        return 0;
+
+        r->ur_name = lustre_msg_buf(req->rq_reqmsg, 1);
+        r->ur_namelen = req->rq_reqmsg->buflens[1];
+        RETURN(0);
 }
 
-static int mds_rename_unpack(char *buf, int len, struct mds_update_record *r)
+static int mds_rename_unpack(struct ptlrpc_request *req,
+                             struct mds_update_record *r)
 {
-        struct mds_rec_rename *rec = (struct mds_rec_rename *)buf; 
-        char *ptr, *end;
-
-        if (len < sizeof(*rec)) { 
-                CERROR("invalid buffer length\n"); 
-                return -EFAULT;
-        }
-        
-        ptr = (char *)rec + sizeof(*rec); 
-        end = ptr + len - sizeof(*rec); 
-        
+        struct mds_rec_rename *rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        ENTRY;
+
+        if (req->rq_reqmsg->bufcount != 3 ||
+            req->rq_reqmsg->buflens[0] != sizeof(*rec))
+                RETURN(-EFAULT);
+
         r->ur_fid1 = &rec->rn_fid1;
         r->ur_fid2 = &rec->rn_fid2;
-        r->ur_namelen = NTOH__u32(rec->rn_namelen);
-        r->ur_tgtlen = NTOH__u32(rec->rn_tgtlen);
 
-        UNLOGL0(r->ur_name, char, r->ur_namelen, ptr, end); 
-        UNLOGL0(r->ur_tgt, char, r->ur_tgtlen, ptr, end);
-        return 0;
+        r->ur_name = lustre_msg_buf(req->rq_reqmsg, 1);
+        r->ur_namelen = req->rq_reqmsg->buflens[1];
+
+        r->ur_tgt = lustre_msg_buf(req->rq_reqmsg, 2);
+        r->ur_tgtlen = req->rq_reqmsg->buflens[2];
+        RETURN(0);
 }
 
-typedef int (*update_unpacker)(char *, int , struct mds_update_record *); 
+typedef int (*update_unpacker)(struct ptlrpc_request *req,
+                               struct mds_update_record *r);
 
 static update_unpacker mds_unpackers[REINT_MAX + 1] = {
-        [REINT_SETATTR] mds_setattr_unpack,     
+        [REINT_SETATTR] mds_setattr_unpack,
         [REINT_CREATE] mds_create_unpack,
         [REINT_LINK] mds_link_unpack,
         [REINT_UNLINK] mds_unlink_unpack,
         [REINT_RENAME] mds_rename_unpack,
 };
 
-int mds_update_unpack(char *buf, int len, struct mds_update_record *r)
+int mds_update_unpack(struct ptlrpc_request *req, struct mds_update_record *rec)
 {
-        int rc; 
+        struct mds_update_record_hdr *hdr = lustre_msg_buf(req->rq_reqmsg, 0);
+        int rc;
         ENTRY;
 
-        rc = mds_update_hdr_unpack(buf, len, r);
-
-        if (rc) { 
-                EXIT;
-                return -EFAULT;
-        }
-
-        if ( r->ur_opcode<0 || r->ur_opcode > REINT_MAX) { 
-                EXIT;
-                return EFAULT; 
-        }
-        
-        rc = mds_unpackers[r->ur_opcode](buf, len, r);
-        EXIT;
-        return rc;
+        if (!hdr || req->rq_reqmsg->buflens[0] < sizeof(__u32))
+                RETURN(-EFAULT);
+
+        rec->ur_opcode = NTOH__u32(hdr->ur_opcode);
+
+        if (rec->ur_opcode < 0 || rec->ur_opcode > REINT_MAX)
+                RETURN(-EFAULT);
+
+        rc = mds_unpackers[rec->ur_opcode](req, rec);
+        RETURN(rc);
 }
index 05e08d8..cb492dc 100644 (file)
  *
  */
 
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/sched.h>
-#include <linux/lp.h>
-#include <linux/slab.h>
-#include <linux/ioport.h>
-#include <linux/fcntl.h>
-#include <linux/delay.h>
-#include <linux/skbuff.h>
-#include <linux/proc_fs.h>
-#include <linux/fs.h>
-#include <linux/poll.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <asm/io.h>
-#include <asm/segment.h>
-#include <asm/system.h>
-#include <asm/poll.h>
-#include <asm/uaccess.h>
-
 #define DEBUG_SUBSYSTEM S_OST
 
-#include <linux/obd_class.h>
 #include <linux/obd_ost.h>
 #include <linux/lustre_net.h>
 
-int ost_pack_req(char *buf1, int buflen1, char *buf2, int buflen2, 
-                struct ptlreq_hdr **hdr, union ptl_req *r,
-                int *len, char **buf)
-{
-        struct ost_req *req;
-       char *ptr;
-
-       *len = sizeof(**hdr) + size_round(buflen1) + size_round(buflen2) + 
-               sizeof(*req); 
-
-       OBD_ALLOC(*buf, *len);
-       if (!*buf) {
-               RETURN(-ENOMEM);
-       }
-
-       memset(*buf, 0, *len); 
-       *hdr = (struct ptlreq_hdr *)(*buf);
-       req = (struct ost_req *)((*buf) + sizeof(**hdr));
-        r->ost = req;
-
-       ptr = *buf + sizeof(**hdr) + sizeof(*req);
-
-       (*hdr)->type =  PTL_RPC_REQUEST;
-
-        req->buflen1 = HTON__u32(buflen1);
-        LOGL(buf1, buflen1, ptr); 
-
-        req->buflen2 = HTON__u32(buflen2);
-        LOGL(buf2, buflen2, ptr);
-
-       RETURN(0);
-}
-
-int ost_unpack_req(char *buf, int len, 
-                  struct ptlreq_hdr **hdr,  union ptl_req *r)
-{
-        struct ost_req *req;
-
-       if (len < sizeof(**hdr) + sizeof(*req)) { 
-               RETURN(-EINVAL);
-       }
-
-       *hdr = (struct ptlreq_hdr *) (buf);
-       req = (struct ost_req *) (buf + sizeof(**hdr));
-        r->ost = req;
-
-       req->buflen1 = NTOH__u32(req->buflen1); 
-       req->buflen2 = NTOH__u32(req->buflen2); 
-
-       if (len < sizeof(**hdr) + sizeof(*req) + 
-            size_round(req->buflen1) + size_round(req->buflen2) ) { 
-               RETURN(-EINVAL);
-       }
-
-       RETURN(0);
-}
-
-
-void *ost_req_buf1(struct ost_req *req)
-{
-        if (!req->buflen1) 
-                return NULL;
-        return (void *)((char *)req + sizeof(*req));
-}
-
-void *ost_req_buf2(struct ost_req *req)
-{
-        if (!req->buflen2) 
-                return NULL;
-        return (void *)((char *)req + sizeof(*req) + 
-                        size_round(req->buflen1)); 
-}
-
-int ost_pack_rep(char *buf1, int buflen1, char *buf2, int buflen2,
-                struct ptlrep_hdr **hdr, union ptl_rep *r,
-                int *len, char **buf)
-{
-       char *ptr;
-        struct ost_rep *rep;
-
-       *len = sizeof(**hdr) + size_round(buflen1) + size_round(buflen2) + 
-               sizeof(*rep); 
-
-       OBD_ALLOC(*buf, *len);
-       if (!*buf) {
-               EXIT;
-               return -ENOMEM;
-       }
-
-       memset(*buf, 0, *len); 
-       *hdr = (struct ptlrep_hdr *)(*buf);
-       rep = (struct ost_rep *)(*buf + sizeof(**hdr));
-        r->ost = rep;
-
-       ptr = *buf + sizeof(**hdr) + sizeof(*rep);
-
-        rep->buflen1 = HTON__u32(buflen1);
-       if (buf1) { 
-               LOGL(buf1, buflen1, ptr); 
-       } else {
-                ptr += size_round(buflen1);
-        }
-
-        rep->buflen2 = HTON__u32(buflen2);
-       if (buf2) { 
-               LOGL(buf2, buflen2, ptr);
-       }
-       return 0;
-}
-
-
-int ost_unpack_rep(char *buf, int len, 
-                  struct ptlrep_hdr **hdr, union ptl_rep *r)
-{
-        struct ost_rep *rep;
-
-       if (len < sizeof(**hdr) + sizeof(*rep)) { 
-               EXIT;
-               return -EINVAL;
-       }
-
-       *hdr = (struct ptlrep_hdr *) (buf);
-       rep = (struct ost_rep *) (buf + sizeof(**hdr));
-        r->ost = rep;
-
-       rep->buflen1 = NTOH__u32(rep->buflen1); 
-       rep->buflen2 = NTOH__u32(rep->buflen2); 
-
-       if (len < sizeof(**hdr) + sizeof(*rep) + 
-            size_round(rep->buflen1) + size_round(rep->buflen2) ) { 
-               EXIT;
-               return -EINVAL;
-       }
-
-       EXIT;
-       return 0;
-}
-
-void *ost_rep_buf1(struct ost_rep *rep)
-{
-        if (!rep->buflen1) 
-                return NULL;
-        return (void *)((char *)rep + sizeof(*rep));
-}
-
-void *ost_rep_buf2(struct ost_rep *rep)
-{
-        if (!rep->buflen2) 
-                return NULL;
-        return (void *)((char *)rep + sizeof(*rep) + 
-                        size_round(rep->buflen1)); 
-}
-
 void ost_pack_ioo(void **tmp, struct obdo *oa, int bufcnt)
 {
         struct obd_ioobj *ioo = *tmp;
index f7b9462..00c62bd 100644 (file)
@@ -82,9 +82,9 @@ static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode)
 /* methods */
 static int ll_find_inode(struct inode *inode, unsigned long ino, void *opaque)
 {
-        struct mds_rep *rep = (struct mds_rep *)opaque;
+        struct mds_body *body = (struct mds_body *)opaque;
 
-        if (inode->i_generation != rep->generation)
+        if (inode->i_generation != body->generation)
                 return 0;
 
         return 1;
@@ -109,14 +109,15 @@ static struct dentry *ll_lookup(struct inode * dir, struct dentry *dentry)
 
         err = mdc_getattr(&sbi->ll_mds_client, ino, type,
                           OBD_MD_FLNOTOBD|OBD_MD_FLBLOCKS, &request);
-        if ( err ) {
+        if (err) {
                 CERROR("failure %d inode %ld\n", err, ino);
                 ptlrpc_free_req(request);
                 EXIT;
                 return ERR_PTR(-abs(err)); 
         }
 
-        inode = iget4(dir->i_sb, ino, ll_find_inode, request->rq_rep.mds);
+        inode = iget4(dir->i_sb, ino, ll_find_inode,
+                      lustre_msg_buf(request->rq_repmsg, 0));
 
         ptlrpc_free_req(request);
         if (!inode) 
@@ -133,7 +134,7 @@ static struct inode *ll_create_node(struct inode *dir, const char *name,
 {
         struct inode *inode;
         struct ptlrpc_request *request;
-        struct mds_rep *rep;
+        struct mds_body *body;
         int err;
         time_t time = CURRENT_TIME;
         struct ll_sb_info *sbi = ll_i2sbi(dir);
@@ -144,37 +145,34 @@ static struct inode *ll_create_node(struct inode *dir, const char *name,
                          mode, id,  current->uid, current->gid, time, &request);
         if (err) { 
                 inode = ERR_PTR(err);
-                EXIT;
-                goto out;
+                GOTO(out, err);
         }
-        rep = request->rq_rep.mds;
-        rep->valid = OBD_MD_FLNOTOBD;
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        body->valid = OBD_MD_FLNOTOBD;
 
-        rep->objid = id; 
-        rep->nlink = 1;
-        rep->atime = rep->ctime = rep->mtime = time;
-        rep->mode = mode;
+        body->objid = id; 
+        body->nlink = 1;
+        body->atime = body->ctime = body->mtime = time;
+        body->mode = mode;
         CDEBUG(D_INODE, "-- new_inode: objid %lld, ino %d, mode %o\n",
-               rep->objid, rep->ino, rep->mode); 
+               body->objid, body->ino, body->mode); 
 
-        inode = iget4(dir->i_sb, rep->ino, ll_find_inode, rep);
+        inode = iget4(dir->i_sb, body->ino, ll_find_inode, body);
         if (IS_ERR(inode)) {
                 CERROR("new_inode -fatal:  %ld\n", PTR_ERR(inode));
                 inode = ERR_PTR(-EIO);
                 LBUG();
-                EXIT;
-                goto out;
+                GOTO(out, -EIO);
         }
 
         if (!list_empty(&inode->i_dentry)) {
                 CERROR("new_inode -fatal: inode %d, ct %d lnk %d\n", 
-                       rep->ino, atomic_read(&inode->i_count), 
+                       body->ino, atomic_read(&inode->i_count), 
                        inode->i_nlink);
                 iput(inode);
                 LBUG();
                 inode = ERR_PTR(-EIO);
-                EXIT;
-                goto out;
+                GOTO(out, -EIO);
         }
 
         EXIT;
index ecd6cf1..3bf4d37 100644 (file)
@@ -111,7 +111,6 @@ static struct super_block * ll_read_super(struct super_block *sb,
                 RETURN(NULL);
         }
 
-        memset(sbi, 0, sizeof(*sbi));
         sb->u.generic_sbp = sbi;
 
         ll_options(data, &device, &version);
@@ -136,10 +135,7 @@ static struct super_block * ll_read_super(struct super_block *sb,
 
         /* the first parameter should become an mds device no */
         err = ptlrpc_connect_client(-1, "mds",
-                                    MDS_REQUEST_PORTAL,
-                                    MDC_REPLY_PORTAL,
-                                    mds_pack_req,
-                                    mds_unpack_rep,
+                                    MDS_REQUEST_PORTAL, MDC_REPLY_PORTAL,
                                     &sbi->ll_mds_client);
 
         if (err) {
@@ -163,7 +159,8 @@ static struct super_block * ll_read_super(struct super_block *sb,
                 GOTO(out_req, sb = NULL);
         }
 
-        root = iget4(sb, sbi->ll_rootino, NULL, request->rq_rep.mds);
+        root = iget4(sb, sbi->ll_rootino, NULL,
+                     lustre_msg_buf(request->rq_repmsg, 0));
         if (root) {
                 sb->s_root = d_alloc_root(root);
         } else {
@@ -295,38 +292,38 @@ static int ll_statfs(struct super_block *sb, struct statfs *buf)
         return err; 
 }
 
-static void inline ll_to_inode(struct inode *dst, struct mds_rep *rep)
+static void inline ll_to_inode(struct inode *dst, struct mds_body *body)
 {
         struct ll_inode_info *ii = 
                 (struct ll_inode_info *) &dst->u.generic_ip;
 
         /* core attributes first */
-        if ( rep->valid & OBD_MD_FLID )
-                dst->i_ino = rep->ino;
-        if ( rep->valid & OBD_MD_FLATIME ) 
-                dst->i_atime = rep->atime;
-        if ( rep->valid & OBD_MD_FLMTIME ) 
-                dst->i_mtime = rep->mtime;
-        if ( rep->valid & OBD_MD_FLCTIME ) 
-                dst->i_ctime = rep->ctime;
-        if ( rep->valid & OBD_MD_FLSIZE ) 
-                dst->i_size = rep->size;
-        if ( rep->valid & OBD_MD_FLMODE ) 
-                dst->i_mode = rep->mode;
-        if ( rep->valid & OBD_MD_FLUID ) 
-                dst->i_uid = rep->uid;
-        if ( rep->valid & OBD_MD_FLGID ) 
-                dst->i_gid = rep->gid;
-        if ( rep->valid & OBD_MD_FLFLAGS ) 
-                dst->i_flags = rep->flags;
-        if ( rep->valid & OBD_MD_FLNLINK )
-                dst->i_nlink = rep->nlink;
-        if ( rep->valid & OBD_MD_FLGENER )
-                dst->i_generation = rep->generation;
+        if ( body->valid & OBD_MD_FLID )
+                dst->i_ino = body->ino;
+        if ( body->valid & OBD_MD_FLATIME ) 
+                dst->i_atime = body->atime;
+        if ( body->valid & OBD_MD_FLMTIME ) 
+                dst->i_mtime = body->mtime;
+        if ( body->valid & OBD_MD_FLCTIME ) 
+                dst->i_ctime = body->ctime;
+        if ( body->valid & OBD_MD_FLSIZE ) 
+                dst->i_size = body->size;
+        if ( body->valid & OBD_MD_FLMODE ) 
+                dst->i_mode = body->mode;
+        if ( body->valid & OBD_MD_FLUID ) 
+                dst->i_uid = body->uid;
+        if ( body->valid & OBD_MD_FLGID ) 
+                dst->i_gid = body->gid;
+        if ( body->valid & OBD_MD_FLFLAGS ) 
+                dst->i_flags = body->flags;
+        if ( body->valid & OBD_MD_FLNLINK )
+                dst->i_nlink = body->nlink;
+        if ( body->valid & OBD_MD_FLGENER )
+                dst->i_generation = body->generation;
 
         /* this will become more elaborate for striping etc */ 
-        if (rep->valid & OBD_MD_FLOBJID) 
-                ii->lli_objid = rep->objid;
+        if (body->valid & OBD_MD_FLOBJID) 
+                ii->lli_objid = body->objid;
 #if 0
 
         if (obdo_has_inline(oa)) {
@@ -347,10 +344,10 @@ static void inline ll_to_inode(struct inode *dst, struct mds_rep *rep)
 
 static inline void ll_read_inode2(struct inode *inode, void *opaque)
 {
-        struct mds_rep *rep = opaque; 
+        struct mds_body *body = opaque; 
         
         ENTRY;
-        ll_to_inode(inode, rep); 
+        ll_to_inode(inode, body); 
 
         /* OIDEBUG(inode); */
 
index c2d0321..1595d3d 100644 (file)
@@ -9,12 +9,9 @@ MODULE = mdc
 modulefs_DATA = mdc.o
 EXTRA_PROGRAMS = mdc
 
-
-LINX=mds_pack.c mds_updates.c
+LINX=mds_updates.c
 mdc_SOURCES =  mdc_request.c mdc_reint.c $(LINX)
 
-mds_pack.c: 
-       ln -s ../lib/mds_pack.c .
 mds_updates.c: 
        ln -s ../lib/mds_updates.c .
 
index da630b4..e2e062e 100644 (file)
 
 static int mdc_reint(struct ptlrpc_client *cl, struct ptlrpc_request *request)
 {
-        int rc; 
+        int rc;
 
         rc = ptlrpc_queue_wait(cl, request);
+        rc = ptlrpc_check_status(request, rc);
         if (rc)
-                CERROR("error in handling %d\n", rc); 
+                CERROR("error in handling %d\n", rc);
 
         return rc;
 }
 
-int mdc_setattr(struct ptlrpc_client *peer, 
-                struct inode *inode, struct iattr *iattr,
-                struct ptlrpc_request **request)
+int mdc_setattr(struct ptlrpc_client *cl, struct inode *inode,
+                struct iattr *iattr, struct ptlrpc_request **request)
 {
-        int rc; 
         struct mds_rec_setattr *rec;
+        struct ptlrpc_request *req;
+        int rc, size = sizeof(*rec);
         ENTRY;
 
-        *request = ptlrpc_prep_req(peer, MDS_REINT, 0, NULL,
-                                   sizeof(*rec), NULL);
-        if (!(*request)) { 
-                CERROR("cannot pack\n");
-                EXIT;
-                return -ENOMEM;
-        }
+        req = ptlrpc_prep_req(cl, MDS_REINT, 1, &size, NULL);
+        if (!req)
+                RETURN(-ENOMEM);
 
-        rec = mds_req_tgt((*request)->rq_req.mds);
-        mds_setattr_pack(rec, inode, iattr); 
-        (*request)->rq_req.mds->opcode = HTON__u32(REINT_SETATTR);
-        (*request)->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        mds_setattr_pack(rec, inode, iattr);
 
-        rc = mdc_reint(peer, *request);
+        size = sizeof(struct mds_body);
+        req->rq_replen = lustre_msg_size(1, &size);
 
-        EXIT;
-        return rc;
+        rc = mdc_reint(cl, req);
+        *request = req;
+
+        RETURN(rc);
 }
 
-int mdc_create(struct ptlrpc_client *peer, 
-               struct inode *dir, const char *name, int namelen, 
-               const char *tgt, int tgtlen, 
-               int mode, __u64 id, __u32 uid, __u32 gid, __u64 time, 
+int mdc_create(struct ptlrpc_client *cl, struct inode *dir, const char *name,
+               int namelen, const char *tgt, int tgtlen, int mode, __u64 id,
+               __u32 uid, __u32 gid, __u64 time,
                struct ptlrpc_request **request)
 {
-        int rc; 
         struct mds_rec_create *rec;
+        struct ptlrpc_request *req;
+        int rc, size[3] = {sizeof(*rec), namelen + 1, tgtlen + 1};
+        char *tmp;
         ENTRY;
 
-        (*request) = ptlrpc_prep_req(peer, MDS_REINT, 0, NULL, 
-                               sizeof(*rec) + size_round0(namelen) + 
-                               size_round0(tgtlen), NULL);
-        if (!(*request)) { 
-                CERROR("cannot pack\n");
-                return -ENOMEM;
-        }
+        req = ptlrpc_prep_req(cl, MDS_REINT, 3, size, NULL);
+        if (!req)
+                RETURN(-ENOMEM);
 
-        (*request)->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        mds_create_pack(rec, dir, mode, id, uid, gid, time);
 
-        rec = mds_req_tgt((*request)->rq_req.mds);
-        mds_create_pack(rec, dir, name, namelen, mode, id, uid, gid, time, 
-                        tgt, tgtlen); 
+        tmp = lustre_msg_buf(req->rq_reqmsg, 1);
+        LOGL0(name, namelen, tmp);
 
-        rc = mdc_reint(peer, (*request));
+        if (tgt) {
+                tmp = lustre_msg_buf(req->rq_reqmsg, 2);
+                LOGL0(tgt, tgtlen, tmp);
+        }
 
-        EXIT;
-        return rc;
+        size[0] = sizeof(struct mds_body);
+        req->rq_replen = lustre_msg_size(1, size);
+
+        rc = mdc_reint(cl, req);
+        *request = req;
+
+        RETURN(rc);
 }
 
-int mdc_unlink(struct ptlrpc_client *peer,  struct inode *dir,
-               struct inode *child, const char *name, int namelen, 
+int mdc_unlink(struct ptlrpc_client *cl,  struct inode *dir,
+               struct inode *child, const char *name, int namelen,
                struct ptlrpc_request **request)
 {
-        int rc; 
         struct mds_rec_unlink *rec;
+        struct ptlrpc_request *req;
+        int rc, size[2] = {sizeof(*rec), namelen + 1};
+        char *tmp;
+        ENTRY;
 
-        (*request) = ptlrpc_prep_req(peer, MDS_REINT, 0, NULL, 
-                                     sizeof(*rec) + size_round0(namelen), NULL);
-        if (!(*request)) { 
-                CERROR("cannot pack\n");
-                return -ENOMEM;
-        }
+        req = ptlrpc_prep_req(cl, MDS_REINT, 2, size, NULL);
+        if (!req)
+                RETURN(-ENOMEM);
 
-        (*request)->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        mds_unlink_pack(rec, dir, child);
 
-        rec = mds_req_tgt((*request)->rq_req.mds);
-        mds_unlink_pack(rec, dir, child, name, namelen);
+        tmp = lustre_msg_buf(req->rq_reqmsg, 1);
+        LOGL0(name, namelen, tmp);
 
-        rc = mdc_reint(peer, (*request));
+        size[0] = sizeof(struct mds_body);
+        req->rq_replen = lustre_msg_size(1, size);
 
-        EXIT;
-        return rc;
+        rc = mdc_reint(cl, req);
+        *request = req;
+
+        RETURN(rc);
 }
 
-int mdc_link(struct ptlrpc_client *peer, struct dentry *src, 
-             struct inode *dir, const char *name, int namelen, 
-             struct ptlrpc_request **request)
+int mdc_link(struct ptlrpc_client *cl, struct dentry *src, struct inode *dir,
+             const char *name, int namelen, struct ptlrpc_request **request)
 {
-        int rc; 
         struct mds_rec_link *rec;
+        struct ptlrpc_request *req;
+        int rc, size[2] = {sizeof(*rec), namelen + 1};
+        char *tmp;
         ENTRY;
 
-        (*request) = ptlrpc_prep_req(peer, MDS_REINT, 0, NULL, 
-                               sizeof(*rec) + size_round0(namelen), NULL);
-        if (!(*request)) { 
-                CERROR("cannot pack\n");
-                return -ENOMEM;
-        }
+        req = ptlrpc_prep_req(cl, MDS_REINT, 2, size, NULL);
+        if (!req)
+                RETURN(-ENOMEM);
 
-        (*request)->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        mds_link_pack(rec, src->d_inode, dir);
 
-        rec = mds_req_tgt((*request)->rq_req.mds);
-        mds_link_pack(rec, src->d_inode, dir, name, namelen);
+        tmp = lustre_msg_buf(req->rq_reqmsg, 1);
+        LOGL0(name, namelen, tmp);
 
-        rc = mdc_reint(peer, (*request));
-        EXIT;
-        return rc;
+        size[0] = sizeof(struct mds_body);
+        req->rq_replen = lustre_msg_size(1, size);
+
+        rc = mdc_reint(cl, req);
+        *request = req;
+
+        RETURN(rc);
 }
 
-int mdc_rename(struct ptlrpc_client *peer, struct inode *src, 
-               struct inode *tgt, const char *old, int oldlen, 
-               const char *new, int newlen, 
+int mdc_rename(struct ptlrpc_client *cl, struct inode *src, struct inode *tgt,
+               const char *old, int oldlen, const char *new, int newlen,
                struct ptlrpc_request **request)
 {
-        int rc; 
         struct mds_rec_rename *rec;
+        struct ptlrpc_request *req;
+        int rc, size[3] = {sizeof(*rec), oldlen + 1, newlen + 1};
+        char *tmp;
         ENTRY;
 
-        (*request) = ptlrpc_prep_req(peer, MDS_REINT, 0, NULL, 
-                               sizeof(*rec) + size_round0(oldlen)
-                               + size_round0(newlen), NULL);
-        if (!(*request)) { 
-                CERROR("cannot pack\n");
-                return -ENOMEM;
-        }
+        req = ptlrpc_prep_req(cl, MDS_REINT, 3, size, NULL);
+        if (!req)
+                RETURN(-ENOMEM);
 
-        (*request)->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        rec = lustre_msg_buf(req->rq_reqmsg, 0);
+        mds_rename_pack(rec, src, tgt);
 
-        rec = mds_req_tgt((*request)->rq_req.mds);
-        mds_rename_pack(rec, src, tgt, old, oldlen, new, newlen);
+        tmp = lustre_msg_buf(req->rq_reqmsg, 1);
+        LOGL0(old, oldlen, tmp);
 
-        rc = mdc_reint(peer, (*request));
+        if (tgt) {
+                tmp = lustre_msg_buf(req->rq_reqmsg, 2);
+                LOGL0(new, newlen, tmp);
+        }
 
-        EXIT;
-        return rc;
+        size[0] = sizeof(struct mds_body);
+        req->rq_replen = lustre_msg_size(1, size);
+
+        rc = mdc_reint(cl, req);
+        *request = req;
+
+        RETURN(rc);
 }
index bf8b402..4a04ffe 100644 (file)
 
 extern int mds_queue_req(struct ptlrpc_request *);
 
-
 int mdc_getattr(struct ptlrpc_client *cl, ino_t ino, int type, int valid,
-                struct ptlrpc_request **req)
+                struct ptlrpc_request **request)
 {
-        int rc;
-        struct ptlrpc_request *request;
-
+        struct ptlrpc_request *req;
+        struct mds_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        request = ptlrpc_prep_req(cl, MDS_GETATTR, 0, NULL, 0, NULL);
-        if (!request) {
-                CERROR("llight request: cannot pack\n");
+        req = ptlrpc_prep_req(cl, MDS_GETATTR, 1, &size, NULL);
+        if (!req)
                 GOTO(out, rc = -ENOMEM);
-        }
 
-        ll_ino2fid(&request->rq_req.mds->fid1, ino, 0, type);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        ll_ino2fid(&body->fid1, ino, 0, type);
+        body->valid = valid;
 
-        request->rq_req.mds->valid = valid;
-        request->rq_replen =
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        req->rq_replen = lustre_msg_size(1, &size);
 
-        rc = ptlrpc_queue_wait(cl, request);
-        rc = ptlrpc_check_status(request, rc);
+        rc = ptlrpc_queue_wait(cl, req);
+        rc = ptlrpc_check_status(req, rc);
 
-        if (!rc)
-                CDEBUG(D_NET, "mode: %o\n", request->rq_rep.mds->mode);
+        if (!rc) {
+                mds_unpack_body(req);
+                body = lustre_msg_buf(req->rq_repmsg, 0);
+                CDEBUG(D_NET, "mode: %o\n", body->mode);
+        }
 
-        GOTO(out, rc);
+        EXIT;
  out:
-        *req = request;
+        *request = req;
         return rc;
 }
 
 int mdc_open(struct ptlrpc_client *cl, ino_t ino, int type, int flags,
-             __u64 *fh, struct ptlrpc_request **req)
+             __u64 *fh, struct ptlrpc_request **request)
 {
-        struct ptlrpc_request *request;
-        int rc;
+        struct mds_body *body;
+        int rc, size = sizeof(*body);
+        struct ptlrpc_request *req;
 
-        request = ptlrpc_prep_req(cl, MDS_OPEN, 0, NULL, 0, NULL);
-        if (!request) {
-                CERROR("llight request: cannot pack\n");
-                rc = -ENOMEM;
-                goto out;
-        }
+        req = ptlrpc_prep_req(cl, MDS_OPEN, 1, &size, NULL);
+        if (!req)
+                GOTO(out, rc = -ENOMEM);
 
-        ll_ino2fid(&request->rq_req.mds->fid1, ino, 0, type);
-        request->rq_req.mds->flags = HTON__u32(flags);
-        request->rq_replen =
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        ll_ino2fid(&body->fid1, ino, 0, type);
+        body->flags = HTON__u32(flags);
 
-        rc = ptlrpc_queue_wait(cl, request);
-        rc = ptlrpc_check_status(request, rc);
+        req->rq_replen = lustre_msg_size(1, &size);
 
-        if (rc) {
-                CERROR("llight request: error in handling %d\n", rc);
-                goto out;
+        rc = ptlrpc_queue_wait(cl, req);
+        rc = ptlrpc_check_status(req, rc);
+
+        if (!rc) {
+                mds_unpack_body(req);
+                body = lustre_msg_buf(req->rq_repmsg, 0);
+                *fh = body->objid;
         }
 
-        *fh = request->rq_rep.mds->objid;
+        EXIT;
  out:
-        *req = request;
+        *request = req;
         return rc;
 }
 
-
 int mdc_close(struct ptlrpc_client *cl, ino_t ino, int type, __u64 fh,
-              struct ptlrpc_request **req)
+              struct ptlrpc_request **request)
 {
-        struct ptlrpc_request *request;
-        int rc;
+        struct mds_body *body;
+        int rc, size = sizeof(*body);
+        struct ptlrpc_request *req;
 
-        request = ptlrpc_prep_req(cl, MDS_CLOSE, 0, NULL, 0, NULL);
-        if (!request) {
-                CERROR("llight request: cannot pack\n");
-                rc = -ENOMEM;
-                goto out;
-        }
+        req = ptlrpc_prep_req(cl, MDS_CLOSE, 1, &size, NULL);
+        if (!req)
+                GOTO(out, rc = -ENOMEM);
 
-        ll_ino2fid(&request->rq_req.mds->fid1, ino, 0, type);
-        request->rq_req.mds->objid = fh;
-        request->rq_replen =
-                sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        ll_ino2fid(&body->fid1, ino, 0, type);
+        body->objid = fh;
 
-        rc = ptlrpc_queue_wait(cl, request);
-        rc = ptlrpc_check_status(request, rc);
+        req->rq_replen = lustre_msg_size(1, &size);
 
-        if (rc) {
-                CERROR("llight request: error in handling %d\n", rc);
-                goto out;
-        }
+        rc = ptlrpc_queue_wait(cl, req);
+        rc = ptlrpc_check_status(req, rc);
 
+        EXIT;
  out:
-        *req = request;
+        *request = req;
         return rc;
 }
 
 int mdc_readpage(struct ptlrpc_client *cl, ino_t ino, int type, __u64 offset,
-                 char *addr, struct ptlrpc_request **req)
+                 char *addr, struct ptlrpc_request **request)
 {
-        struct ptlrpc_request *request = NULL;
+        struct ptlrpc_request *req = NULL;
         struct ptlrpc_bulk_desc *bulk = NULL;
         struct niobuf niobuf;
-        int rc;
+        struct mds_body *body;
+        int rc, size[2] = {sizeof(*body), sizeof(struct niobuf)};
+        char *bufs[2] = {NULL, (char *)&niobuf};
 
         niobuf.addr = (__u64) (long) addr;
 
@@ -170,43 +166,40 @@ int mdc_readpage(struct ptlrpc_client *cl, ino_t ino, int type, __u64 offset,
                 goto out;
         }
 
-        request = ptlrpc_prep_req(cl, MDS_READPAGE, 0, NULL,
-                                  sizeof(struct niobuf), (char *)&niobuf);
-        if (!request) {
-                CERROR("%s: cannot pack\n", __FUNCTION__);
-                rc = -ENOMEM;
-                goto out;
-        }
+        req = ptlrpc_prep_req(cl, MDS_READPAGE, 2, size, bufs);
+        if (!req)
+                GOTO(out, rc = -ENOMEM);
 
         bulk->b_buflen = PAGE_SIZE;
         bulk->b_buf = (void *)(long)niobuf.addr;
         bulk->b_portal = MDS_BULK_PORTAL;
-        bulk->b_xid = request->rq_xid;
+        bulk->b_xid = req->rq_xid;
 
         rc = ptlrpc_register_bulk(bulk);
         if (rc) {
-                CERROR("%s: couldn't setup bulk sink: error %d.\n",
-                       __FUNCTION__, rc);
-                goto out;
+                CERROR("couldn't setup bulk sink: error %d.\n", rc);
+                GOTO(out, rc);
         }
 
-        request->rq_req.mds->fid1.id = ino;
-        request->rq_req.mds->fid1.f_type = type;
-        request->rq_req.mds->size = offset;
-        request->rq_req.mds->tgtlen = sizeof(niobuf);
-        request->rq_replen = sizeof(struct ptlrep_hdr) + sizeof(struct mds_rep);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        body->fid1.id = ino;
+        body->fid1.f_type = type;
+        body->size = offset;
+
+        req->rq_replen = lustre_msg_size(1, size);
 
-        rc = ptlrpc_queue_wait(cl, request);
+        rc = ptlrpc_queue_wait(cl, req);
         if (rc) {
-                CERROR("mdc request: error in handling %d\n", rc);
+                CERROR("error in handling %d\n", rc);
                 ptlrpc_abort_bulk(bulk);
-                goto out;
+                GOTO(out, rc);
         }
 
-        CDEBUG(D_INODE, "mode: %o\n", request->rq_rep.mds->mode);
+        mds_unpack_body(req);
+        EXIT;
 
  out:
-        *req = request;
+        *request = req;
         if (bulk != NULL)
                 OBD_FREE(bulk, sizeof(*bulk));
         return rc;
@@ -233,8 +226,7 @@ static int request_ioctl(struct inode *inode, struct file *file,
         }
 
         err = ptlrpc_connect_client(-1, "mds",
-                                    MDS_REQUEST_PORTAL, MDC_REPLY_PORTAL,
-                                    mds_pack_req, mds_unpack_rep, &cl);
+                                    MDS_REQUEST_PORTAL, MDC_REPLY_PORTAL, &cl);
         if (err) {
                 CERROR("cannot create client\n");
                 RETURN(-EINVAL);
index f985ed7..5f676fc 100644 (file)
@@ -9,9 +9,7 @@ MODULE = mds
 modulefs_DATA = mds.o
 EXTRA_PROGRAMS = mds
 
-LINX=mds_pack.c mds_updates.c simple.c
-mds_pack.c: 
-       ln -s ../lib/mds_pack.c .
+LINX=mds_updates.c simple.c
 mds_updates.c: 
        ln -s ../lib/mds_updates.c .
 simple.c: 
index e0df185..695a63f 100644 (file)
@@ -176,111 +176,110 @@ int mds_getattr(struct ptlrpc_request *req)
 {
         struct dentry *de;
         struct inode *inode;
-        struct mds_rep *rep;
+        struct mds_body *body;
         struct mds_obd *mds = &req->rq_obd->u.mds;
-        int rc;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_GETATTR_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
         }
 
-        req->rq_rephdr->xid = req->rq_reqhdr->xid;
-        rep = req->rq_rep.mds;
-
-        de = mds_fid2dentry(mds, &req->rq_req.mds->fid1, NULL);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        de = mds_fid2dentry(mds, &body->fid1, NULL);
         if (IS_ERR(de)) {
-                req->rq_rephdr->status = -ENOENT;
+                req->rq_status = -ENOENT;
                 RETURN(0);
         }
 
+        body = lustre_msg_buf(req->rq_repmsg, 0);
         inode = de->d_inode;
-        rep->ino = inode->i_ino;
-        rep->generation = inode->i_generation;
-        rep->atime = inode->i_atime;
-        rep->ctime = inode->i_ctime;
-        rep->mtime = inode->i_mtime;
-        rep->uid = inode->i_uid;
-        rep->gid = inode->i_gid;
-        rep->size = inode->i_size;
-        rep->mode = inode->i_mode;
-        rep->nlink = inode->i_nlink;
-        rep->valid = ~0;
-        mds_fs_get_objid(mds, inode, &rep->objid);
+        body->ino = inode->i_ino;
+        body->generation = inode->i_generation;
+        body->atime = inode->i_atime;
+        body->ctime = inode->i_ctime;
+        body->mtime = inode->i_mtime;
+        body->uid = inode->i_uid;
+        body->gid = inode->i_gid;
+        body->size = inode->i_size;
+        body->mode = inode->i_mode;
+        body->nlink = inode->i_nlink;
+        body->valid = ~0;
+        mds_fs_get_objid(mds, inode, &body->objid);
         l_dput(de);
-        return 0;
+        RETURN(0);
 }
 
 int mds_open(struct ptlrpc_request *req)
 {
         struct dentry *de;
-        struct mds_rep *rep;
+        struct mds_body *body;
         struct file *file;
         struct vfsmount *mnt;
         __u32 flags;
-        int rc;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
         }
 
-        req->rq_rephdr->xid = req->rq_reqhdr->xid;
-        rep = req->rq_rep.mds;
-
-        de = mds_fid2dentry(&req->rq_obd->u.mds, &req->rq_req.mds->fid1, &mnt);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        de = mds_fid2dentry(&req->rq_obd->u.mds, &body->fid1, &mnt);
         if (IS_ERR(de)) {
-                req->rq_rephdr->status = -ENOENT;
+                req->rq_status = -ENOENT;
                 RETURN(0);
         }
-        flags = req->rq_req.mds->flags;
+        flags = body->flags;
         file = dentry_open(de, mnt, flags);
         if (!file || IS_ERR(file)) {
-                req->rq_rephdr->status = -EINVAL;
+                req->rq_status = -EINVAL;
                 RETURN(0);
         }
 
-        rep->objid = (__u64) (unsigned long)file;
-        return 0;
+        body = lustre_msg_buf(req->rq_repmsg, 0);
+        body->objid = (__u64) (unsigned long)file;
+        RETURN(0);
 }
 
 int mds_close(struct ptlrpc_request *req)
 {
         struct dentry *de;
-        struct mds_rep *rep;
+        struct mds_body *body;
         struct file *file;
         struct vfsmount *mnt;
         int rc;
+        ENTRY;
 
-        rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
+        rc = lustre_pack_msg(0, NULL, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_CLOSE_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
         }
 
-        req->rq_rephdr->xid = req->rq_reqhdr->xid;
-        rep = req->rq_rep.mds;
-
-        de = mds_fid2dentry(&req->rq_obd->u.mds, &req->rq_req.mds->fid1, &mnt);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        de = mds_fid2dentry(&req->rq_obd->u.mds, &body->fid1, &mnt);
         if (IS_ERR(de)) {
-                req->rq_rephdr->status = -ENOENT;
+                req->rq_status = -ENOENT;
                 RETURN(0);
         }
 
-        file = (struct file *)(unsigned long) req->rq_req.mds->objid;
-
-        req->rq_rephdr->status = filp_close(file, 0);
+        file = (struct file *)(unsigned long)body->objid;
+        req->rq_status = filp_close(file, 0);
         l_dput(de);
         mntput(mnt);
-        return 0;
+
+        RETURN(0);
 }
 
 int mds_readpage(struct ptlrpc_request *req)
@@ -289,25 +288,22 @@ int mds_readpage(struct ptlrpc_request *req)
         struct dentry *de;
         struct file *file;
         struct niobuf *niobuf;
-        struct mds_rep *rep;
-        int rc;
-
+        struct mds_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_READPAGE_PACK)) {
                 CERROR("mds: out of memory\n");
                 req->rq_status = -ENOMEM;
                 RETURN(0);
         }
 
-        req->rq_rephdr->xid = req->rq_reqhdr->xid;
-        rep = req->rq_rep.mds;
-
-        de = mds_fid2dentry(&req->rq_obd->u.mds, &req->rq_req.mds->fid1, &mnt);
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        de = mds_fid2dentry(&req->rq_obd->u.mds, &body->fid1, &mnt);
         if (IS_ERR(de)) {
-                req->rq_rephdr->status = PTR_ERR(de);
+                req->rq_status = PTR_ERR(de);
                 RETURN(0);
         }
 
@@ -316,32 +312,33 @@ int mds_readpage(struct ptlrpc_request *req)
         file = dentry_open(de, mnt, O_RDONLY | O_LARGEFILE);
         /* note: in case of an error, dentry_open puts dentry */
         if (IS_ERR(file)) {
-                req->rq_rephdr->status = PTR_ERR(file);
+                req->rq_status = PTR_ERR(file);
                 RETURN(0);
         }
 
-        niobuf = mds_req_tgt(req->rq_req.mds);
+        niobuf = lustre_msg_buf(req->rq_reqmsg, 1);
+        if (!niobuf) {
+                req->rq_status = -EINVAL;
+                LBUG();
+                RETURN(0);
+        }
 
         /* to make this asynchronous make sure that the handling function
            doesn't send a reply when this function completes. Instead a
            callback function would send the reply */
-        rc = mds_sendpage(req, file, req->rq_req.mds->size, niobuf);
+        rc = mds_sendpage(req, file, body->size, niobuf);
 
         filp_close(file, 0);
-        req->rq_rephdr->status = rc;
+        req->rq_status = rc;
         RETURN(0);
 }
 
 int mds_reint(struct ptlrpc_request *req)
 {
-        char *buf;
-        int rc, len;
+        int rc;
         struct mds_update_record rec;
 
-        buf = mds_req_tgt(req->rq_req.mds);
-        len = req->rq_req.mds->tgtlen;
-
-        rc = mds_update_unpack(buf, len, &rec);
+        rc = mds_update_unpack(req, &rec);
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_UNPACK)) {
                 CERROR("invalid record\n");
                 req->rq_status = -EINVAL;
@@ -356,28 +353,22 @@ int mds_handle(struct obd_device *dev, struct ptlrpc_service *svc,
                struct ptlrpc_request *req)
 {
         int rc;
-        struct ptlreq_hdr *hdr;
-
         ENTRY;
 
-        hdr = (struct ptlreq_hdr *)req->rq_reqbuf;
-
-        if (NTOH__u32(hdr->type) != PTL_RPC_REQUEST) {
-                CERROR("lustre_mds: wrong packet type sent %d\n",
-                       NTOH__u32(hdr->type));
-                rc = -EINVAL;
-                GOTO(out, rc);
-        }
-
-        rc = mds_unpack_req(req->rq_reqbuf, req->rq_reqlen,
-                            &req->rq_reqhdr, &req->rq_req);
+        rc = lustre_unpack_msg(req->rq_reqbuf, req->rq_reqlen);
+        req->rq_reqmsg = (struct lustre_msg *)req->rq_reqbuf;
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_HANDLE_UNPACK)) {
                 CERROR("lustre_mds: Invalid request\n");
                 GOTO(out, rc);
         }
 
-        switch (req->rq_reqhdr->opc) {
+        if (req->rq_reqmsg->type != PTL_RPC_REQUEST) {
+                CERROR("lustre_mds: wrong packet type sent %d\n",
+                       req->rq_reqmsg->type);
+                GOTO(out, rc = -EINVAL);
+        }
 
+        switch (req->rq_reqmsg->opc) {
         case MDS_GETATTR:
                 CDEBUG(D_INODE, "getattr\n");
                 OBD_FAIL_RETURN(OBD_FAIL_MDS_GETATTR_NET, 0);
@@ -419,12 +410,6 @@ int mds_handle(struct obd_device *dev, struct ptlrpc_service *svc,
         EXIT;
 out:
         if (rc) {
-                CERROR("no header\n");
-                LBUG();
-                return 0;
-        }
-
-        if( req->rq_status) {
                 ptlrpc_error(dev, svc, req);
         } else {
                 CDEBUG(D_NET, "sending reply\n");
index cdaba15..1c800aa 100644 (file)
 #include <linux/lustre_mds.h>
 #include <linux/obd_class.h>
 
-extern struct ptlrpc_request *mds_prep_req(int size, int opcode, int namelen, char *name, int tgtlen, char *tgt);
-
-static int mds_reint_setattr(struct mds_update_record *rec, struct ptlrpc_request *req)
+static int mds_reint_setattr(struct mds_update_record *rec,
+                             struct ptlrpc_request *req)
 {
         struct mds_obd *mds = &req->rq_obd->u.mds;
         struct dentry *de;
 
         de = mds_fid2dentry(mds, rec->ur_fid1, NULL);
         if (IS_ERR(de) || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_SETATTR)) {
-                req->rq_rephdr->status = -ESTALE;
+                req->rq_status = -ESTALE;
                 RETURN(0);
         }
 
@@ -54,7 +53,7 @@ static int mds_reint_setattr(struct mds_update_record *rec, struct ptlrpc_reques
         OBD_FAIL_WRITE(OBD_FAIL_MDS_REINT_SETATTR_WRITE,
                        de->d_inode->i_sb->s_dev);
 
-        req->rq_rephdr->status = mds_fs_setattr(mds, de, NULL, &rec->ur_iattr);
+        req->rq_status = mds_fs_setattr(mds, de, NULL, &rec->ur_iattr);
 
         l_dput(de);
         RETURN(0);
@@ -63,14 +62,12 @@ static int mds_reint_setattr(struct mds_update_record *rec, struct ptlrpc_reques
 static int mds_reint_create(struct mds_update_record *rec,
                             struct ptlrpc_request *req)
 {
-        int type = rec->ur_mode & S_IFMT;
         struct dentry *de = NULL;
-        struct mds_rep *rep = req->rq_rep.mds;
         struct mds_obd *mds = &req->rq_obd->u.mds;
         struct dentry *dchild = NULL;
         struct inode *dir;
         void *handle;
-        int rc = 0;
+        int rc = 0, type = rec->ur_mode & S_IFMT;
         ENTRY;
 
         de = mds_fid2dentry(mds, rec->ur_fid1, NULL);
@@ -146,6 +143,7 @@ static int mds_reint_create(struct mds_update_record *rec,
         } else {
                 struct iattr iattr;
                 struct inode *inode = dchild->d_inode;
+                struct mds_body *body;
 
                 if (type == S_IFREG) {
                         rc = mds_fs_set_objid(mds, inode, handle, rec->ur_id);
@@ -160,19 +158,20 @@ static int mds_reint_create(struct mds_update_record *rec,
                 iattr.ia_uid = rec->ur_uid;
                 iattr.ia_gid = rec->ur_gid;
                 iattr.ia_valid = ATTR_UID | ATTR_GID | ATTR_ATIME |
-                                 ATTR_MTIME | ATTR_CTIME;
+                        ATTR_MTIME | ATTR_CTIME;
 
                 rc = mds_fs_setattr(mds, dchild, handle, &iattr);
 
-                rep->ino = inode->i_ino;
-                rep->generation = inode->i_generation;
+                body = lustre_msg_buf(req->rq_repmsg, 0);
+                body->ino = inode->i_ino;
+                body->generation = inode->i_generation;
         }
 
 out_reint_commit:
         rc = mds_fs_commit(mds, dir, handle);
 
 out_reint_create:
-        req->rq_rephdr->status = rc;
+        req->rq_status = rc;
         l_dput(dchild);
         l_dput(de);
         RETURN(0);
@@ -229,7 +228,7 @@ static int mds_reint_unlink(struct mds_update_record *rec,
         }
 
 out_unlink:
-        req->rq_rephdr->status = rc;
+        req->rq_status = rc;
         l_dput(dchild);
         l_dput(de);
         RETURN(0);
@@ -273,14 +272,13 @@ static int mds_reint_link(struct mds_update_record *rec,
         EXIT;
 
  out_link:
-        req->rq_rephdr->status = rc;
+        req->rq_status = rc;
         l_dput(dchild);
         l_dput(de_tgt_dir);
         l_dput(de_src);
         return 0;
 }
 
-
 static int mds_reint_rename(struct mds_update_record *rec,
                             struct ptlrpc_request *req)
 {
@@ -320,7 +318,7 @@ static int mds_reint_rename(struct mds_update_record *rec,
         EXIT;
 
  out_rename:
-        req->rq_rephdr->status = rc;
+        req->rq_status = rc;
         l_dput(de_new);
         l_dput(de_old);
         l_dput(de_tgtdir);
@@ -330,7 +328,7 @@ static int mds_reint_rename(struct mds_update_record *rec,
 
 typedef int (*mds_reinter)(struct mds_update_record *, struct ptlrpc_request*);
 
-static mds_reinter  reinters[REINT_MAX+1] = {
+static mds_reinter reinters[REINT_MAX+1] = {
         [REINT_SETATTR]   mds_reint_setattr,
         [REINT_CREATE]    mds_reint_create,
         [REINT_UNLINK]    mds_reint_unlink,
@@ -340,22 +338,21 @@ static mds_reinter  reinters[REINT_MAX+1] = {
 
 int mds_reint_rec(struct mds_update_record *rec, struct ptlrpc_request *req)
 {
-        int rc;
+        int rc, size = sizeof(struct mds_body);
 
-        if (rec->ur_opcode < 0 || rec->ur_opcode > REINT_MAX) {
+        if (rec->ur_opcode < 1 || rec->ur_opcode > REINT_MAX) {
                 CERROR("opcode %d not valid\n", rec->ur_opcode);
                 rc = req->rq_status = -EINVAL;
                 RETURN(rc);
         }
 
-        rc = mds_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc) {
                 CERROR("mds: out of memory\n");
                 rc = req->rq_status = -ENOMEM;
                 RETURN(rc);
         }
-        req->rq_rephdr->xid = req->rq_reqhdr->xid;
 
         rc = reinters[rec->ur_opcode](rec, req);
         return rc;
index a9fa49d..f89d10f 100644 (file)
@@ -481,7 +481,6 @@ int obd_register_type(struct obd_ops *ops, char *nm)
         OBD_ALLOC(type, sizeof(*type));
         if (!type)
                 RETURN(-ENOMEM);
-        memset(type, 0, sizeof(*type));
         INIT_LIST_HEAD(&type->typ_chain);
         MOD_INC_USE_COUNT;
         list_add(&type->typ_chain, obd_types.next);
index 2e4c6fc..bb2c613 100644 (file)
@@ -7,13 +7,13 @@
  *  See the file COPYING in this distribution
  *
  *  Author Peter Braam <braam@clusterfs.com>
- * 
+ *
  *  This server is single threaded at present (but can easily be multi
  *  threaded). For testing and management it is treated as an
  *  obd_device, although it does not export a full OBD method table
  *  (the requests are coming in over the wire, so object target
  *  modules do not have a full method table.)
- * 
+ *
  */
 
 #define EXPORT_SYMTAB
 struct ptlrpc_client *osc_con2cl(struct obd_conn *conn)
 {
         struct osc_obd *osc = &conn->oc_dev->u.osc;
-        return osc->osc_peer;
+        return osc->osc_client;
 }
 
 static int osc_connect(struct obd_conn *conn)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
-        
-        request = ptlrpc_prep_req(peer, OST_CONNECT, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
 
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
+        request = ptlrpc_prep_req(cl, OST_CONNECT, 0, NULL, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
 
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
-      
-        CDEBUG(D_INODE, "received connid %d\n", request->rq_rep.ost->connid); 
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
 
-        conn->oc_id = request->rq_rep.ost->connid;
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        CDEBUG(D_INODE, "received connid %d\n", body->connid);
+
+        conn->oc_id = body->connid;
+        EXIT;
  out:
         ptlrpc_free_req(request);
-        EXIT;
         return rc;
 }
 
 static int osc_disconnect(struct obd_conn *conn)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
-        
-        request = ptlrpc_prep_req(peer, OST_DISCONNECT, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        request->rq_req.ost->connid = conn->oc_id;
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
+
+        request = ptlrpc_prep_req(cl, OST_DISCONNECT, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
+
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        body->connid = conn->oc_id;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        GOTO(out, rc);
  out:
         ptlrpc_free_req(request);
-        EXIT;
         return rc;
 }
 
-
 static int osc_getattr(struct obd_conn *conn, struct obdo *oa)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        request = ptlrpc_prep_req(peer, OST_GETATTR, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-        request->rq_req.ost->oa.o_valid = ~0;
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
+        request = ptlrpc_prep_req(cl, OST_GETATTR, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
 
-        CDEBUG(D_INODE, "mode: %o\n", request->rq_rep.ost->oa.o_mode); 
-        if (oa) { 
-                memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
-        }
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->connid = conn->oc_id;
+        body->oa.o_valid = ~0;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
 
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        CDEBUG(D_INODE, "mode: %o\n", body->oa.o_mode);
+        if (oa)
+                memcpy(oa, &body->oa, sizeof(*oa));
+
+        EXIT;
  out:
         ptlrpc_free_req(request);
         return 0;
@@ -146,33 +139,33 @@ static int osc_getattr(struct obd_conn *conn, struct obdo *oa)
 static int osc_open(struct obd_conn *conn, struct obdo *oa)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        request = ptlrpc_prep_req(peer, OST_OPEN, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-        if (request->rq_req.ost->oa.o_valid != (OBD_MD_FLMODE | OBD_MD_FLID))
+        request = ptlrpc_prep_req(cl, OST_OPEN, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
+
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->connid = conn->oc_id;
+        if (body->oa.o_valid != (OBD_MD_FLMODE | OBD_MD_FLID))
                 LBUG();
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
 
-        CDEBUG(D_INODE, "mode: %o\n", request->rq_rep.ost->oa.o_mode); 
-        if (oa) { 
-                memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
-        }
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
+
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        CDEBUG(D_INODE, "mode: %o\n", body->oa.o_mode);
+        if (oa)
+                memcpy(oa, &body->oa, sizeof(*oa));
 
+        EXIT;
  out:
         ptlrpc_free_req(request);
         return 0;
@@ -181,32 +174,31 @@ static int osc_open(struct obd_conn *conn, struct obdo *oa)
 static int osc_close(struct obd_conn *conn, struct obdo *oa)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        request = ptlrpc_prep_req(peer, OST_CLOSE, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
+        request = ptlrpc_prep_req(cl, OST_CLOSE, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
 
-        CDEBUG(D_INODE, "mode: %o\n", request->rq_rep.ost->oa.o_mode); 
-        if (oa) { 
-                memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
-        }
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->connid = conn->oc_id;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
+
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        CDEBUG(D_INODE, "mode: %o\n", body->oa.o_mode);
+        if (oa)
+                memcpy(oa, &body->oa, sizeof(*oa));
 
+        EXIT;
  out:
         ptlrpc_free_req(request);
         return 0;
@@ -215,25 +207,23 @@ static int osc_close(struct obd_conn *conn, struct obdo *oa)
 static int osc_setattr(struct obd_conn *conn, struct obdo *oa)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        request = ptlrpc_prep_req(peer, OST_SETATTR, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
+        request = ptlrpc_prep_req(cl, OST_SETATTR, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
+
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->connid = conn->oc_id;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        GOTO(out, rc);
 
  out:
         ptlrpc_free_req(request);
@@ -243,31 +233,34 @@ static int osc_setattr(struct obd_conn *conn, struct obdo *oa)
 static int osc_create(struct obd_conn *conn, struct obdo *oa)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        if (!oa) { 
-                CERROR("oa NULL\n"); 
-        }
-        request = ptlrpc_prep_req(peer, OST_CREATE, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
+        if (!oa) {
+                CERROR("oa NULL\n");
+                RETURN(-EINVAL);
         }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-        request->rq_req.ost->oa.o_valid = ~0;
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
-        memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
+        request = ptlrpc_prep_req(cl, OST_CREATE, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
 
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->oa.o_valid = ~0;
+        body->connid = conn->oc_id;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
+
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        memcpy(oa, &body->oa, sizeof(*oa));
+
+        EXIT;
  out:
         ptlrpc_free_req(request);
         return 0;
@@ -277,33 +270,36 @@ static int osc_punch(struct obd_conn *conn, struct obdo *oa, obd_size count,
                      obd_off offset)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        if (!oa) { 
-                CERROR("oa NULL\n"); 
-        }
-        request = ptlrpc_prep_req(peer, OST_PUNCH, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
+        if (!oa) {
+                CERROR("oa NULL\n");
+                RETURN(-EINVAL);
         }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-        request->rq_req.ost->oa.o_valid = ~0;
-        request->rq_req.ost->oa.o_size = offset;
-        request->rq_req.ost->oa.o_blocks = count;
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
-        memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
+        request = ptlrpc_prep_req(cl, OST_PUNCH, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
+
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->connid = conn->oc_id;
+        body->oa.o_valid = ~0;
+        body->oa.o_size = offset;
+        body->oa.o_blocks = count;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
 
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        memcpy(oa, &body->oa, sizeof(*oa));
+
+        EXIT;
  out:
         ptlrpc_free_req(request);
         return 0;
@@ -312,31 +308,34 @@ static int osc_punch(struct obd_conn *conn, struct obdo *oa, obd_size count,
 static int osc_destroy(struct obd_conn *conn, struct obdo *oa)
 {
         struct ptlrpc_request *request;
-        struct ptlrpc_client *peer = osc_con2cl(conn);
-        int rc; 
+        struct ptlrpc_client *cl = osc_con2cl(conn);
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
+        ENTRY;
 
-        if (!oa) { 
-                CERROR("oa NULL\n"); 
+        if (!oa) {
+                CERROR("oa NULL\n");
+                RETURN(-EINVAL);
         }
-        request = ptlrpc_prep_req(peer, OST_DESTROY, 0, NULL, 0, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        
-        memcpy(&request->rq_req.ost->oa, oa, sizeof(*oa));
-        request->rq_req.ost->connid = conn->oc_id;
-        request->rq_req.ost->oa.o_valid = ~0;
-        request->rq_replen = 
-                sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
-        
-        rc = ptlrpc_queue_wait(peer, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
-        memcpy(oa, &request->rq_rep.ost->oa, sizeof(*oa));
+        request = ptlrpc_prep_req(cl, OST_DESTROY, 1, &size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
 
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        memcpy(&body->oa, oa, sizeof(*oa));
+        body->connid = conn->oc_id;
+        body->oa.o_valid = ~0;
+
+        request->rq_replen = lustre_msg_size(1, &size);
+
+        rc = ptlrpc_queue_wait(cl, request);
+        if (rc)
+                GOTO(out, rc);
+
+        body = lustre_msg_buf(request->rq_repmsg, 0);
+        memcpy(oa, &body->oa, sizeof(*oa));
+
+        EXIT;
  out:
         ptlrpc_free_req(request);
         return 0;
@@ -389,79 +388,71 @@ int osc_brw_read(struct obd_conn *conn, obd_count num_oa, struct obdo **oa,
 {
         struct ptlrpc_client *cl = osc_con2cl(conn);
         struct ptlrpc_request *request;
-        int pages;
-        int rc; 
+        struct ost_body *body;
         struct obd_ioobj ioo;
         struct niobuf src;
-        int size1, size2 = 0; 
+        int pages, rc, i, j, size[3] = {sizeof(*body)};
         void *ptr1, *ptr2;
-        int i, j, n;
         struct ptlrpc_bulk_desc **bulk;
+        ENTRY;
 
-        size1 = num_oa * sizeof(ioo); 
+        size[1] = num_oa * sizeof(ioo);
         pages = 0;
         for (i = 0; i < num_oa; i++)
                 pages += oa_bufs[i];
-        size2 = pages * sizeof(src);
-
-        request = ptlrpc_prep_req(cl, OST_BRW, size1, NULL, size2, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        request->rq_req.ost->cmd = OBD_BRW_READ;
+        size[2] = pages * sizeof(src);
 
         OBD_ALLOC(bulk, pages * sizeof(*bulk));
-        if (bulk == NULL) {
-                CERROR("cannot alloc bulk desc vector\n");
-                return -ENOMEM;
-        }
-        memset(bulk, 0, pages * sizeof(*bulk));
-
-        n = 0;
-        ptr1 = ost_req_buf1(request->rq_req.ost);
-        ptr2 = ost_req_buf2(request->rq_req.ost);
-        for (i = 0; i < num_oa; i++) {
-                ost_pack_ioo(&ptr1, oa[i], oa_bufs[i]); 
-                for (j = 0; j < oa_bufs[i]; j++) {
-                        bulk[n] = ptlrpc_prep_bulk(&cl->cli_server);
-                        if (bulk[n] == NULL) {
-                                CERROR("cannot alloc bulk desc\n");
-                                rc = -ENOMEM;
-                                goto out;
-                        }
+        if (bulk == NULL)
+                RETURN(-ENOMEM);
+
+        request = ptlrpc_prep_req(cl, OST_BRW, 3, size, NULL);
+        if (!request)
+                GOTO(out, rc = -ENOMEM);
+
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        body->data = OBD_BRW_READ;
+
+        ptr1 = lustre_msg_buf(request->rq_reqmsg, 1);
+        ptr2 = lustre_msg_buf(request->rq_reqmsg, 2);
+        for (pages = 0, i = 0; i < num_oa; i++) {
+                ost_pack_ioo(&ptr1, oa[i], oa_bufs[i]);
+                for (j = 0; j < oa_bufs[i]; j++, pages++) {
+                        bulk[pages] = ptlrpc_prep_bulk(&cl->cli_server);
+                        if (bulk[pages] == NULL)
+                                GOTO(out, rc = -ENOMEM);
 
                         spin_lock(&cl->cli_lock);
-                        bulk[n]->b_xid = cl->cli_xid++;
+                        bulk[pages]->b_xid = cl->cli_xid++;
                         spin_unlock(&cl->cli_lock);
-                        bulk[n]->b_buf = kmap(buf[n]);
-                        bulk[n]->b_buflen = PAGE_SIZE;
-                        bulk[n]->b_portal = OST_BULK_PORTAL;
-                        ost_pack_niobuf(&ptr2, bulk[n]->b_buf, offset[n],
-                                        count[n], flags[n], bulk[n]->b_xid);
 
-                        rc = ptlrpc_register_bulk(bulk[n]);
+                        bulk[pages]->b_buf = kmap(buf[pages]);
+                        bulk[pages]->b_buflen = PAGE_SIZE;
+                        bulk[pages]->b_portal = OST_BULK_PORTAL;
+                        ost_pack_niobuf(&ptr2, bulk[pages]->b_buf,
+                                        offset[pages], count[pages],
+                                        flags[pages], bulk[pages]->b_xid);
+
+                        rc = ptlrpc_register_bulk(bulk[pages]);
                         if (rc)
-                                goto out;
-                        n++;
+                                GOTO(out, rc);
                 }
         }
 
-        request->rq_replen = sizeof(struct ptlrep_hdr) + sizeof(struct ost_rep);
+        request->rq_replen = lustre_msg_size(1, size);
         rc = ptlrpc_queue_wait(cl, request);
+        GOTO(out, rc);
 
  out:
         /* FIXME: if we've called ptlrpc_wait_bulk but rc != 0, we need to
          * abort those bulk listeners. */
 
-        n = 0;
-        for (i = 0; i < num_oa; i++) {
-                for (j = 0; j < oa_bufs[i]; j++) {
-                        if (bulk[n] == NULL)
+        for (pages = 0, i = 0; i < num_oa; i++) {
+                for (j = 0; j < oa_bufs[i]; j++, pages++) {
+                        if (bulk[pages] == NULL)
                                 continue;
-                        kunmap(buf[n]);
-                        OBD_FREE(bulk[n], sizeof(**bulk));
-                        n++;
+                        kunmap(buf[pages]);
+                        OBD_FREE(bulk[pages], sizeof(**bulk));
                 }
         }
 
@@ -477,77 +468,69 @@ int osc_brw_write(struct obd_conn *conn, obd_count num_oa, struct obdo **oa,
         struct ptlrpc_client *cl = osc_con2cl(conn);
         struct ptlrpc_request *request;
         struct obd_ioobj ioo;
+        struct ost_body *body;
         struct niobuf *src;
-        int pages, rc, i, j, n, size1, size2 = 0; 
+        int pages, rc, i, j, size[3] = {sizeof(*body)};
         void *ptr1, *ptr2;
+        ENTRY;
 
-        size1 = num_oa * sizeof(ioo); 
+        size[1] = num_oa * sizeof(ioo);
         pages = 0;
         for (i = 0; i < num_oa; i++)
                 pages += oa_bufs[i];
-        size2 = pages * sizeof(*src);
+        size[2] = pages * sizeof(*src);
 
-        OBD_ALLOC(src, size2);
-        if (!src) { 
-                CERROR("no src memory\n");
-                return -ENOMEM;
-        }
-        memset((char *)src, 0, size2);
+        OBD_ALLOC(src, size[2]);
+        if (!src)
+                RETURN(-ENOMEM);
 
-        request = ptlrpc_prep_req(cl, OST_BRW, size1, NULL, size2, NULL);
-        if (!request) { 
-                CERROR("cannot pack req!\n"); 
-                return -ENOMEM;
-        }
-        request->rq_req.ost->cmd = OBD_BRW_WRITE;
-
-        n = 0;
-        ptr1 = ost_req_buf1(request->rq_req.ost);
-        ptr2 = ost_req_buf2(request->rq_req.ost);
-        for (i = 0; i < num_oa; i++) {
-                ost_pack_ioo(&ptr1, oa[i], oa_bufs[i]); 
-                for (j = 0; j < oa_bufs[i]; j++) {
-                        ost_pack_niobuf(&ptr2, kmap(buf[n]), offset[n],
-                                        count[n], flags[n], 0);
-                        n++;
+        request = ptlrpc_prep_req(cl, OST_BRW, 3, size, NULL);
+        if (!request)
+                RETURN(-ENOMEM);
+        body = lustre_msg_buf(request->rq_reqmsg, 0);
+        body->data = OBD_BRW_WRITE;
+
+        ptr1 = lustre_msg_buf(request->rq_reqmsg, 1);
+        ptr2 = lustre_msg_buf(request->rq_reqmsg, 2);
+        for (pages = 0, i = 0; i < num_oa; i++) {
+                ost_pack_ioo(&ptr1, oa[i], oa_bufs[i]);
+                for (j = 0; j < oa_bufs[i]; j++, pages++) {
+                        ost_pack_niobuf(&ptr2, kmap(buf[pages]), offset[pages],
+                                        count[pages], flags[pages], 0);
                 }
         }
-        memcpy((char *)src, (char *)ost_req_buf2(request->rq_req.ost), size2); 
+        memcpy(src, lustre_msg_buf(request->rq_reqmsg, 2), size[2]);
+
+        size[1] = pages * sizeof(struct niobuf);
+        request->rq_replen = lustre_msg_size(2, size);
 
-        request->rq_replen = sizeof(struct ptlrep_hdr) +
-                sizeof(struct ost_rep) + pages * sizeof(struct niobuf);
         rc = ptlrpc_queue_wait(cl, request);
-        if (rc) { 
-                EXIT;
-                goto out;
-        }
+        if (rc)
+                GOTO(out, rc);
 
-        ptr2 = ost_rep_buf2(request->rq_rep.ost);
-        if (request->rq_rep.ost->buflen2 != n * sizeof(struct niobuf)) {
+        ptr2 = lustre_msg_buf(request->rq_repmsg, 1);
+        if (ptr2 == NULL)
+                GOTO(out, rc = -EINVAL);
+
+        if (request->rq_repmsg->buflens[1] != pages * sizeof(struct niobuf)) {
                 CERROR("buffer length wrong (%d vs. %d)\n",
-                       request->rq_rep.ost->buflen2, n * sizeof(struct niobuf));
-                EXIT;
-                goto out;
+                       request->rq_repmsg->buflens[1],
+                       pages * sizeof(struct niobuf));
+                GOTO(out, rc = -EINVAL);
         }
 
-        n = 0;
-        for (i = 0; i < num_oa; i++) {
-                for (j = 0; j < oa_bufs[i]; j++) {
+        for (pages = 0, i = 0; i < num_oa; i++) {
+                for (j = 0; j < oa_bufs[i]; j++, pages++) {
                         struct niobuf *dst;
                         ost_unpack_niobuf(&ptr2, &dst);
-                        osc_sendpage(conn, request, dst, &src[n]);
-                        n++;
+                        osc_sendpage(conn, request, dst, &src[pages]);
                 }
         }
-        OBD_FREE(src, size2);
+        OBD_FREE(src, size[2]);
  out:
-        n = 0;
-        for (i = 0; i < num_oa; i++) {
-                for (j = 0; j < oa_bufs[i]; j++) {
+        for (pages = 0, i = 0; i < num_oa; i++)
+                for (j = 0; j < oa_bufs[i]; j++, pages++)
                         kunmap(buf[n]);
-                        n++;
-                }
-        }
 
         ptlrpc_free_req(request);
         return 0;
@@ -557,19 +540,18 @@ int osc_brw(int rw, struct obd_conn *conn, obd_count num_oa,
               struct obdo **oa, obd_count *oa_bufs, struct page **buf,
               obd_size *count, obd_off *offset, obd_flag *flags)
 {
-        if (rw == OBD_BRW_READ) {
+        if (rw == OBD_BRW_READ)
                 return osc_brw_read(conn, num_oa, oa, oa_bufs, buf, count,
                                     offset, flags);
-        } else {
+        else
                 return osc_brw_write(conn, num_oa, oa, oa_bufs, buf, count,
                                      offset, flags);
-        }
 }
 
 /* mount the file system (secretly) */
 static int osc_setup(struct obd_device *obddev, obd_count len,
                         void *buf)
-                        
+
 {
         struct osc_obd *osc = &obddev->u.osc;
         struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf;
@@ -577,36 +559,33 @@ static int osc_setup(struct obd_device *obddev, obd_count len,
         int dev = data->ioc_dev;
         ENTRY;
 
-        OBD_ALLOC(osc->osc_peer, sizeof(*osc->osc_peer));
-        if (osc->osc_peer == NULL)
+        OBD_ALLOC(osc->osc_client, sizeof(*osc->osc_client));
+        if (osc->osc_client == NULL)
                 RETURN(-ENOMEM);
 
         rc = ptlrpc_connect_client(dev, "ost",
-                                   OST_REQUEST_PORTAL,
-                                   OSC_REPLY_PORTAL,  
-                                   ost_pack_req,
-                                   ost_unpack_rep,
-                                   osc->osc_peer);
+                                   OST_REQUEST_PORTAL, OSC_REPLY_PORTAL,
+                                   osc->osc_client);
 
         if (rc == 0)
                 MOD_INC_USE_COUNT;
         RETURN(rc);
-} 
+}
 
 static int osc_cleanup(struct obd_device * obddev)
 {
         struct osc_obd *osc = &obddev->u.osc;
 
-        if (osc->osc_peer != NULL)
-                OBD_FREE(osc->osc_peer, sizeof(*osc->osc_peer));
+        if (osc->osc_client != NULL)
+                OBD_FREE(osc->osc_client, sizeof(*osc->osc_client));
 
         MOD_DEC_USE_COUNT;
         return 0;
 }
 
-struct obd_ops osc_obd_ops = { 
+struct obd_ops osc_obd_ops = {
         o_setup:   osc_setup,
-        o_cleanup: osc_cleanup, 
+        o_cleanup: osc_cleanup,
         o_create: osc_create,
         o_destroy: osc_destroy,
         o_getattr: osc_getattr,
@@ -632,7 +611,7 @@ static void __exit osc_exit(void)
 
 MODULE_AUTHOR("Peter J. Braam <braam@clusterfs.com>");
 MODULE_DESCRIPTION("Lustre Object Storage Client (OSC) v1.0");
-MODULE_LICENSE("GPL"); 
+MODULE_LICENSE("GPL");
 
 module_init(osc_init);
 module_exit(osc_exit);
index 29f57a4..b5f57ce 100644 (file)
 static int ost_destroy(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-
-        req->rq_rep.ost->result = obd_destroy(&conn, &req->rq_req.ost->oa);
 
+        req->rq_status = obd_destroy(&conn, &body->oa);
         RETURN(0);
 }
 
 static int ost_getattr(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body, *repbody;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-        req->rq_rep.ost->oa.o_id = req->rq_req.ost->oa.o_id;
-        req->rq_rep.ost->oa.o_valid = req->rq_req.ost->oa.o_valid;
-
-        req->rq_rep.ost->result =  obd_getattr(&conn, &req->rq_rep.ost->oa);
 
+        repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
+        req->rq_status = obd_getattr(&conn, &repbody->oa);
         RETURN(0);
 }
 
 static int ost_open(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body, *repbody;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-        req->rq_rep.ost->oa.o_id = req->rq_req.ost->oa.o_id;
-        req->rq_rep.ost->oa.o_valid = req->rq_req.ost->oa.o_valid;
-
-        req->rq_rep.ost->result =  obd_open(&conn, &req->rq_rep.ost->oa);
 
+        repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
+        req->rq_status = obd_open(&conn, &repbody->oa);
         RETURN(0);
 }
 
 static int ost_close(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body, *repbody;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-        req->rq_rep.ost->oa.o_id = req->rq_req.ost->oa.o_id;
-        req->rq_rep.ost->oa.o_valid = req->rq_req.ost->oa.o_valid;
-
-        req->rq_rep.ost->result =  obd_close(&conn, &req->rq_rep.ost->oa);
 
+        repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
+        req->rq_status = obd_close(&conn, &repbody->oa);
         RETURN(0);
 }
 
-
 static int ost_create(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body, *repbody;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-
-        memcpy(&req->rq_rep.ost->oa, &req->rq_req.ost->oa,
-               sizeof(req->rq_req.ost->oa));
-
-        req->rq_rep.ost->result =obd_create(&conn, &req->rq_rep.ost->oa);
 
+        repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
+        req->rq_status = obd_create(&conn, &repbody->oa);
         RETURN(0);
 }
 
 static int ost_punch(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body, *repbody;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-
-        memcpy(&req->rq_rep.ost->oa, &req->rq_req.ost->oa,
-               sizeof(req->rq_req.ost->oa));
-
-        req->rq_rep.ost->result = obd_punch(&conn, &req->rq_rep.ost->oa,
-                                            req->rq_rep.ost->oa.o_size,
-                                            req->rq_rep.ost->oa.o_blocks);
 
+        repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
+        req->rq_status = obd_punch(&conn, &repbody->oa,
+                                   repbody->oa.o_size, repbody->oa.o_blocks);
         RETURN(0);
 }
 
-
 static int ost_setattr(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body, *repbody;
+        int rc, size = sizeof(*body);
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-
-        memcpy(&req->rq_rep.ost->oa, &req->rq_req.ost->oa,
-               sizeof(req->rq_req.ost->oa));
-
-        req->rq_rep.ost->result = obd_setattr(&conn, &req->rq_rep.ost->oa);
 
+        repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
+        req->rq_status = obd_setattr(&conn, &repbody->oa);
         RETURN(0);
 }
 
 static int ost_connect(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
 
         conn.oc_dev = ost->ost_tgt;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
 
-        req->rq_rep.ost->result = obd_connect(&conn);
+        req->rq_status = obd_connect(&conn);
 
         CDEBUG(D_IOCTL, "rep buffer %p, id %d\n", req->rq_repbuf, conn.oc_id);
-        req->rq_rep.ost->connid = conn.oc_id;
+        body = lustre_msg_buf(req->rq_repmsg, 0);
+        body->connid = conn.oc_id;
         RETURN(0);
 }
 
 static int ost_disconnect(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-
+        struct ost_body *body;
+        int rc, size = sizeof(*body);
         ENTRY;
 
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
-        conn.oc_id = req->rq_req.ost->connid;
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0, &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-        CDEBUG(D_IOCTL, "Disconnecting %d\n", conn.oc_id);
-        req->rq_rep.ost->result = obd_disconnect(&conn);
 
+        CDEBUG(D_IOCTL, "Disconnecting %d\n", conn.oc_id);
+        req->rq_status = obd_disconnect(&conn);
         RETURN(0);
 }
 
 static int ost_get_info(struct ost_obd *ost, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-        int vallen;
-        void *val;
-        char *ptr;
-
+        struct ost_body *body;
+        int rc, size[2] = {sizeof(*body)};
+        char *bufs[2] = {NULL, NULL}, *ptr;
         ENTRY;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        conn.oc_id = body->connid;
         conn.oc_dev = ost->ost_tgt;
 
-        ptr = ost_req_buf1(req->rq_req.ost);
-        req->rq_rep.ost->result = obd_get_info(&conn, req->rq_req.ost->buflen1,
-                                               ptr, &vallen, &val);
+        ptr = lustre_msg_buf(req->rq_reqmsg, 1);
+        if (!ptr)
+                RETURN(-EINVAL);
+
+        req->rq_status = obd_get_info(&conn, req->rq_reqmsg->buflens[1], ptr,
+                                      &(size[1]), (void **)&(bufs[1]));
 
-        rc = ost_pack_rep(val, vallen, NULL, 0, &req->rq_rephdr,
-                          &req->rq_rep, &req->rq_replen, &req->rq_repbuf);
+        rc = lustre_pack_msg(2, size, bufs, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc)
                 CERROR("cannot pack reply\n");
 
@@ -291,71 +271,62 @@ static int ost_get_info(struct ost_obd *ost, struct ptlrpc_request *req)
 
 static int ost_brw_read(struct ost_obd *obddev, struct ptlrpc_request *req)
 {
-        struct ptlrpc_bulk_desc **bulk_vec = NULL;
-        struct ptlrpc_bulk_desc *bulk = NULL;
+        struct ptlrpc_bulk_desc **bulk_vec = NULL, *bulk = NULL;
         struct obd_conn conn;
-        int rc;
-        int i, j;
-        int objcount, niocount;
-        char *tmp1, *tmp2, *end2;
-        int cmd;
+        void *tmp1, *tmp2, *end2;
         struct niobuf *nb, *dst, *res = NULL;
         struct obd_ioobj *ioo;
-        struct ost_req *r = req->rq_req.ost;
-
+        struct ost_body *body;
+        int rc, cmd, i, j, objcount, niocount, size = sizeof(*body);
         ENTRY;
 
-        tmp1 = ost_req_buf1(r);
-        tmp2 = ost_req_buf2(r);
-        end2 = tmp2 + req->rq_req.ost->buflen2;
-        objcount = r->buflen1 / sizeof(*ioo);
-        niocount = r->buflen2 / sizeof(*nb);
-        cmd = r->cmd;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        tmp1 = lustre_msg_buf(req->rq_reqmsg, 1);
+        tmp2 = lustre_msg_buf(req->rq_reqmsg, 2);
+        end2 = (char *)tmp2 + req->rq_reqmsg->buflens[2];
+        objcount = req->rq_reqmsg->buflens[1] / sizeof(*ioo);
+        niocount = req->rq_reqmsg->buflens[2] / sizeof(*nb);
+        cmd = body->data;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        conn.oc_id = body->connid;
         conn.oc_dev = req->rq_obd->u.ost.ost_tgt;
 
         for (i = 0; i < objcount; i++) {
-                ost_unpack_ioo((void *)&tmp1, &ioo);
+                ost_unpack_ioo(&tmp1, &ioo);
                 if (tmp2 + ioo->ioo_bufcnt > end2) {
                         LBUG();
                         rc = -EFAULT;
                         break;
                 }
                 for (j = 0; j < ioo->ioo_bufcnt; j++)
-                        ost_unpack_niobuf((void *)&tmp2, &nb);
+                        ost_unpack_niobuf(&tmp2, &nb);
         }
 
-        rc = ost_pack_rep(NULL, 0, NULL, 0,
-                          &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
         OBD_ALLOC(res, sizeof(*res) * niocount);
         if (res == NULL)
                 RETURN(-ENOMEM);
 
         /* The unpackers move tmp1 and tmp2, so reset them before using */
-        tmp1 = ost_req_buf1(r);
-        tmp2 = ost_req_buf2(r);
-        req->rq_rep.ost->result = obd_preprw
-                (cmd, &conn, objcount, (struct obd_ioobj *)tmp1,
-                 niocount, (struct niobuf *)tmp2, res);
+        tmp1 = lustre_msg_buf(req->rq_reqmsg, 1);
+        tmp2 = lustre_msg_buf(req->rq_reqmsg, 2);
+        req->rq_status = obd_preprw(cmd, &conn, objcount,
+                                    tmp1, niocount, tmp2, res);
 
-        if (req->rq_rep.ost->result)
+        if (req->rq_status)
                 GOTO(out, 0);
 
         for (i = 0; i < niocount; i++) {
                 bulk = ptlrpc_prep_bulk(&req->rq_peer);
                 if (bulk == NULL) {
                         CERROR("cannot alloc bulk desc\n");
-                        rc = -ENOMEM;
-                        GOTO(out, rc);
+                        GOTO(out, rc = -ENOMEM);
                 }
 
-                dst = &((struct niobuf *)tmp2)[i];
+                dst = &(((struct niobuf *)tmp2)[i]);
                 bulk->b_xid = dst->xid;
                 bulk->b_buf = (void *)(unsigned long)res[i].addr;
                 bulk->b_buflen = PAGE_SIZE;
@@ -372,20 +343,11 @@ static int ost_brw_read(struct ost_obd *obddev, struct ptlrpc_request *req)
                 bulk = NULL;
         }
 
-#if 0
-        /* Local delivery */
-        dst = &((struct niobuf *)tmp2)[i];
-        memcpy((void *)(unsigned long)dst->addr,
-               (void *)(unsigned long)src->addr, PAGE_SIZE);
-#endif
-        barrier();
-
         /* The unpackers move tmp1 and tmp2, so reset them before using */
-        tmp1 = ost_req_buf1(r);
-        tmp2 = ost_req_buf2(r);
-        req->rq_rep.ost->result = obd_commitrw
-                (cmd, &conn, objcount, (struct obd_ioobj *)tmp1,
-                 niocount, res);
+        tmp1 = lustre_msg_buf(req->rq_reqmsg, 1);
+        tmp2 = lustre_msg_buf(req->rq_reqmsg, 2);
+        req->rq_status = obd_commitrw(cmd, &conn, objcount,
+                                      tmp1, niocount, res);
 
         EXIT;
  out:
@@ -394,10 +356,9 @@ static int ost_brw_read(struct ost_obd *obddev, struct ptlrpc_request *req)
         if (bulk != NULL)
                 OBD_FREE(bulk, sizeof(*bulk));
         if (bulk_vec != NULL) {
-                for (i = 0; i < niocount; i++) {
+                for (i = 0; i < niocount; i++)
                         if (bulk_vec[i] != NULL)
                                 OBD_FREE(bulk_vec[i], sizeof(*bulk));
-                }
                 OBD_FREE(bulk_vec, niocount * sizeof(*bulk_vec));
         }
 
@@ -437,26 +398,22 @@ static int ost_brw_write_cb(struct ptlrpc_bulk_desc *bulk, void *data)
 static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req)
 {
         struct obd_conn conn;
-        int rc;
-        int i, j;
-        int objcount, niocount;
-        char *tmp1, *tmp2, *end2;
-        char *res;
-        int cmd;
         struct niobuf *nb, *dst;
         struct obd_ioobj *ioo;
-        struct ost_req *r = req->rq_req.ost;
-
+        struct ost_body *body;
+        int cmd, rc, i, j, objcount, niocount, size[2] = {sizeof(*body)};
+        void *tmp1, *tmp2, *end2, *res;
         ENTRY;
 
-        tmp1 = ost_req_buf1(r);
-        tmp2 = ost_req_buf2(r);
-        end2 = tmp2 + req->rq_req.ost->buflen2;
-        objcount = r->buflen1 / sizeof(*ioo);
-        niocount = r->buflen2 / sizeof(*nb);
-        cmd = r->cmd;
+        body = lustre_msg_buf(req->rq_reqmsg, 0);
+        tmp1 = lustre_msg_buf(req->rq_reqmsg, 1);
+        tmp2 = lustre_msg_buf(req->rq_reqmsg, 2);
+        end2 = (char *)tmp2 + req->rq_reqmsg->buflens[2];
+        objcount = req->rq_reqmsg->buflens[1] / sizeof(*ioo);
+        niocount = req->rq_reqmsg->buflens[2] / sizeof(*nb);
+        cmd = body->data;
 
-        conn.oc_id = req->rq_req.ost->connid;
+        conn.oc_id = body->connid;
         conn.oc_dev = req->rq_obd->u.ost.ost_tgt;
 
         for (i = 0; i < objcount; i++) {
@@ -469,23 +426,21 @@ static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req)
                         ost_unpack_niobuf((void *)&tmp2, &nb);
         }
 
-        rc = ost_pack_rep(NULL, 0, NULL, niocount * sizeof(*nb),
-                          &req->rq_rephdr, &req->rq_rep,
-                          &req->rq_replen, &req->rq_repbuf);
-        if (rc) {
-                CERROR("cannot pack reply\n");
+        size[1] = niocount * sizeof(*nb);
+        rc = lustre_pack_msg(2, size, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
                 RETURN(rc);
-        }
-        res = ost_rep_buf2(req->rq_rep.ost);
+
+        res = lustre_msg_buf(req->rq_repmsg, 1);
 
         /* The unpackers move tmp1 and tmp2, so reset them before using */
-        tmp1 = ost_req_buf1(r);
-        tmp2 = ost_req_buf2(r);
-        req->rq_rep.ost->result = obd_preprw
-                (cmd, &conn, objcount, (struct obd_ioobj *)tmp1,
-                 niocount, (struct niobuf *)tmp2, (struct niobuf *)res);
+        tmp1 = lustre_msg_buf(req->rq_reqmsg, 1);
+        tmp2 = lustre_msg_buf(req->rq_reqmsg, 2);
+        req->rq_status = obd_preprw(cmd, &conn, objcount,
+                                    tmp1, niocount, tmp2, res);
 
-        if (req->rq_rep.ost->result)
+        if (req->rq_status)
                 GOTO(out, 0);
 
         for (i = 0; i < niocount; i++) {
@@ -493,17 +448,14 @@ static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req)
                 struct ptlrpc_service *srv = req->rq_obd->u.ost.ost_service;
 
                 bulk = ptlrpc_prep_bulk(&req->rq_peer);
-                if (bulk == NULL) {
-                        CERROR("cannot alloc bulk desc\n");
-                        rc = -ENOMEM;
-                        GOTO(out, rc);
-                }
+                if (bulk == NULL)
+                        GOTO(out, rc = -ENOMEM);
 
                 spin_lock(&srv->srv_lock);
                 bulk->b_xid = srv->srv_xid++;
                 spin_unlock(&srv->srv_lock);
 
-                dst = &((struct niobuf *)res)[i];
+                dst = &(((struct niobuf *)res)[i]);
                 dst->xid = HTON__u32(bulk->b_xid);
 
                 bulk->b_buf = (void *)(unsigned long)dst->addr;
@@ -515,15 +467,7 @@ static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req)
                 rc = ptlrpc_register_bulk(bulk);
                 if (rc)
                         GOTO(out, rc);
-
-#if 0
-                /* Local delivery */
-                src = &((struct niobuf *)tmp2)[i];
-                memcpy((void *)(unsigned long)dst->addr,
-                       (void *)(unsigned long)src->addr, src->len);
-#endif
         }
-        barrier();
 
         EXIT;
  out:
@@ -533,10 +477,9 @@ static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req)
 
 static int ost_brw(struct ost_obd *obddev, struct ptlrpc_request *req)
 {
-        struct ost_req *r = req->rq_req.ost;
-        int cmd = r->cmd;
+        struct ost_body *body = lustre_msg_buf(req->rq_reqmsg, 0);
 
-        if (cmd == OBD_BRW_READ)
+        if (body->data == OBD_BRW_READ)
                 return ost_brw_read(obddev, req);
         else
                 return ost_brw_write(obddev, req);
@@ -547,28 +490,22 @@ static int ost_handle(struct obd_device *obddev, struct ptlrpc_service *svc,
 {
         int rc;
         struct ost_obd *ost = &obddev->u.ost;
-        struct ptlreq_hdr *hdr;
-
         ENTRY;
 
-        hdr = (struct ptlreq_hdr *)req->rq_reqbuf;
-        if (NTOH__u32(hdr->type) != PTL_RPC_REQUEST) {
-                CERROR("lustre_ost: wrong packet type sent %d\n",
-                       NTOH__u32(hdr->type));
-                LBUG();
-                rc = -EINVAL;
+        rc = lustre_unpack_msg(req->rq_reqbuf, req->rq_reqlen);
+        req->rq_reqmsg = (struct lustre_msg *)req->rq_reqbuf;
+        if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_HANDLE_UNPACK)) {
+                CERROR("lustre_mds: Invalid request\n");
                 GOTO(out, rc);
         }
 
-        rc = ost_unpack_req(req->rq_reqbuf, req->rq_reqlen,
-                            &req->rq_reqhdr, &req->rq_req);
-        if (rc) {
-                CERROR("lustre_ost: Invalid request\n");
-                GOTO(out, rc);
+        if (req->rq_reqmsg->type != PTL_RPC_REQUEST) {
+                CERROR("lustre_mds: wrong packet type sent %d\n",
+                       req->rq_reqmsg->type);
+                GOTO(out, rc = -EINVAL);
         }
 
-        switch (req->rq_reqhdr->opc) {
-
+        switch (req->rq_reqmsg->opc) {
         case OST_CONNECT:
                 CDEBUG(D_INODE, "connect\n");
                 OBD_FAIL_RETURN(OBD_FAIL_OST_CONNECT_NET, 0);
@@ -632,7 +569,7 @@ static int ost_handle(struct obd_device *obddev, struct ptlrpc_service *svc,
 
         EXIT;
 out:
-        req->rq_status = rc;
+        //req->rq_status = rc;
         if (rc) {
                 CERROR("ost: processing error %d\n", rc);
                 ptlrpc_error(obddev, svc, req);
index d9ec67e..7c47ff2 100644 (file)
@@ -9,6 +9,6 @@ MODULE = ptlrpc
 modulefs_DATA = ptlrpc.o
 EXTRA_PROGRAMS = ptlrpc
 
-ptlrpc_SOURCES =  rpc.c events.c service.c client.c niobuf.c
+ptlrpc_SOURCES = rpc.c events.c service.c client.c niobuf.c pack_generic.c
 
 include $(top_srcdir)/Rules
index e963d55..3e736af 100644 (file)
 int ptlrpc_enqueue(struct ptlrpc_client *peer, struct ptlrpc_request *req)
 {
         struct ptlrpc_request *srv_req;
-        
-        if (!peer->cli_obd) { 
-                EXIT;
-                return -1;
-        }
+
+        if (!peer->cli_obd)
+                RETURN(-1);
 
         OBD_ALLOC(srv_req, sizeof(*srv_req));
-        if (!srv_req) { 
-                EXIT;
-                return -ENOMEM;
-        }
+        if (!srv_req)
+                RETURN(-ENOMEM);
 
         CDEBUG(0, "peer obd minor %d, incoming req %p, srv_req %p\n",
                peer->cli_obd->obd_minor, req, srv_req);
 
-        memset(srv_req, 0, sizeof(*req)); 
-
         /* move the request buffer */
         srv_req->rq_reqbuf = req->rq_reqbuf;
         srv_req->rq_reqlen = req->rq_reqlen;
@@ -61,41 +55,37 @@ int ptlrpc_enqueue(struct ptlrpc_client *peer, struct ptlrpc_request *req)
         srv_req->rq_reply_handle = req;
 
         spin_lock(&peer->cli_lock);
-        list_add(&srv_req->rq_list, &peer->cli_obd->obd_req_list); 
+        list_add(&srv_req->rq_list, &peer->cli_obd->obd_req_list);
         spin_unlock(&peer->cli_lock);
         wake_up(&peer->cli_obd->obd_req_waitq);
         return 0;
 }
 
-int ptlrpc_connect_client(int dev, char *uuid, int req_portal, int rep_portal, 
-                          req_pack_t req_pack, rep_unpack_t rep_unpack,
+int ptlrpc_connect_client(int dev, char *uuid, int req_portal, int rep_portal,
                           struct ptlrpc_client *cl)
 {
-        int err; 
+        int err;
 
         memset(cl, 0, sizeof(*cl));
         spin_lock_init(&cl->cli_lock);
         cl->cli_xid = 1;
-        cl->cli_obd = NULL; 
+        cl->cli_obd = NULL;
         cl->cli_request_portal = req_portal;
         cl->cli_reply_portal = rep_portal;
-        cl->cli_rep_unpack = rep_unpack;
-        cl->cli_req_pack = req_pack;
         sema_init(&cl->cli_rpc_sem, 32);
 
         /* non networked client */
         if (dev >= 0 && dev < MAX_OBD_DEVICES) {
                 struct obd_device *obd = &obd_dev[dev];
-                
+
                 if ((!obd->obd_flags & OBD_ATTACHED) ||
-                    (!obd->obd_flags & OBD_SET_UP)) { 
+                    (!obd->obd_flags & OBD_SET_UP)) {
                         CERROR("target device %d not att or setup\n", dev);
                         return -EINVAL;
                 }
-                if (strcmp(obd->obd_type->typ_name, "ost") && 
-                    strcmp(obd->obd_type->typ_name, "mds")) { 
+                if (strcmp(obd->obd_type->typ_name, "ost") &&
+                    strcmp(obd->obd_type->typ_name, "mds"))
                         return -EINVAL;
-                }
 
                 cl->cli_obd = &obd_dev[dev];
                 return 0;
@@ -115,7 +105,6 @@ struct ptlrpc_bulk_desc *ptlrpc_prep_bulk(struct lustre_peer *peer)
 
         OBD_ALLOC(bulk, sizeof(*bulk));
         if (bulk != NULL) {
-                memset(bulk, 0, sizeof(*bulk));
                 memcpy(&bulk->b_peer, peer, sizeof(*peer));
                 init_waitqueue_head(&bulk->b_waitq);
         }
@@ -123,38 +112,36 @@ struct ptlrpc_bulk_desc *ptlrpc_prep_bulk(struct lustre_peer *peer)
         return bulk;
 }
 
-struct ptlrpc_request *ptlrpc_prep_req(struct ptlrpc_client *cl, 
-                                       int opcode, int namelen, char *name,
-                                       int tgtlen, char *tgt)
+struct ptlrpc_request *ptlrpc_prep_req(struct ptlrpc_client *cl, int opcode,
+                                       int count, int *lengths, char **bufs)
 {
         struct ptlrpc_request *request;
         int rc;
-        ENTRY; 
+        ENTRY;
 
         OBD_ALLOC(request, sizeof(*request));
-        if (!request) { 
+        if (!request) {
                 CERROR("request allocation out of memory\n");
-                return NULL;
+                RETURN(NULL);
         }
 
-        memset(request, 0, sizeof(*request));
-
         spin_lock(&cl->cli_lock);
         request->rq_xid = cl->cli_xid++;
         spin_unlock(&cl->cli_lock);
 
-        rc = cl->cli_req_pack(name, namelen, tgt, tgtlen,
-                          &request->rq_reqhdr, &request->rq_req,
-                          &request->rq_reqlen, &request->rq_reqbuf);
-        if (rc) { 
-                CERROR("cannot pack request %d\n", rc); 
-                return NULL;
+        rc = lustre_pack_msg(count, lengths, bufs,
+                             &request->rq_reqlen, &request->rq_reqbuf);
+        if (rc) {
+                CERROR("cannot pack request %d\n", rc);
+                RETURN(NULL);
         }
-        request->rq_reqhdr->opc = opcode;
-        request->rq_reqhdr->xid = request->rq_xid;
+        request->rq_type = PTL_RPC_REQUEST;
+        request->rq_reqmsg = (struct lustre_msg *)request->rq_reqbuf;
+        request->rq_reqmsg->opc = HTON__u32(opcode);
+        request->rq_reqmsg->xid = HTON__u32(request->rq_xid);
+        request->rq_reqmsg->type = HTON__u32(request->rq_type);
 
-        EXIT;
-        return request;
+        RETURN(request);
 }
 
 void ptlrpc_free_req(struct ptlrpc_request *request)
@@ -178,7 +165,7 @@ static int ptlrpc_check_reply(struct ptlrpc_request *req)
 
         if (sigismember(&(current->pending.signal), SIGKILL) ||
             sigismember(&(current->pending.signal), SIGTERM) ||
-            sigismember(&(current->pending.signal), SIGINT)) { 
+            sigismember(&(current->pending.signal), SIGINT)) {
                 req->rq_flags = PTL_RPC_INTR;
                 GOTO(out, rc = 1);
         }
@@ -193,32 +180,27 @@ int ptlrpc_check_status(struct ptlrpc_request *req, int err)
 
         if (err != 0) {
                 CERROR("err is %d\n", err);
-                EXIT;
-                return err;
+                RETURN(err);
         }
 
         if (req == NULL) {
                 CERROR("req == NULL\n");
-                EXIT;
-                return -ENOMEM;
+                RETURN(-ENOMEM);
         }
 
-        if (req->rq_rephdr == NULL) {
-                CERROR("req->rq_rephdr == NULL\n");
-                EXIT;
-                return -ENOMEM;
+        if (req->rq_repmsg == NULL) {
+                CERROR("req->rq_repmsg == NULL\n");
+                RETURN(-ENOMEM);
         }
 
-        if (req->rq_rephdr->status != 0) {
-                CERROR("req->rq_rephdr->status is %d\n",
-                       req->rq_rephdr->status);
-                EXIT;
+        if (req->rq_repmsg->status != 0) {
+                CERROR("req->rq_repmsg->status is %d\n",
+                       req->rq_repmsg->status);
                 /* XXX: translate this error from net to host */
-                return req->rq_rephdr->status;
+                RETURN(req->rq_repmsg->status);
         }
 
-        EXIT;
-        return 0;
+        RETURN(0);
 }
 
 /* Abort this request and cleanup any resources associated with it. */
@@ -244,15 +226,15 @@ int ptlrpc_queue_wait(struct ptlrpc_client *cl, struct ptlrpc_request *req)
         if (cl->cli_obd) {
                 /* Local delivery */
                 down(&cl->cli_rpc_sem);
-                rc = ptlrpc_enqueue(cl, req); 
+                rc = ptlrpc_enqueue(cl, req);
         } else {
                 /* Remote delivery via portals. */
                 req->rq_req_portal = cl->cli_request_portal;
                 req->rq_reply_portal = cl->cli_reply_portal;
                 rc = ptl_send_rpc(req, cl);
         }
-        if (rc) { 
-                CERROR("error %d, opcode %d\n", rc, req->rq_reqhdr->opc);
+        if (rc) {
+                CERROR("error %d, opcode %d\n", rc, req->rq_reqmsg->opc);
                 up(&cl->cli_rpc_sem);
                 RETURN(-rc);
         }
@@ -261,30 +243,30 @@ int ptlrpc_queue_wait(struct ptlrpc_client *cl, struct ptlrpc_request *req)
         wait_event_interruptible(req->rq_wait_for_rep, ptlrpc_check_reply(req));
         CDEBUG(D_OTHER, "-- done\n");
         up(&cl->cli_rpc_sem);
-        if (req->rq_flags == PTL_RPC_INTR) { 
+        if (req->rq_flags == PTL_RPC_INTR) {
                 /* Clean up the dangling reply buffers */
                 ptlrpc_abort(req);
                 GOTO(out, rc = -EINTR);
         }
 
-        if (req->rq_flags != PTL_RPC_REPLY) { 
+        if (req->rq_flags != PTL_RPC_REPLY) {
                 CERROR("Unknown reason for wakeup\n");
                 /* XXX Phil - I end up here when I kill obdctl */
-                ptlrpc_abort(req); 
+                ptlrpc_abort(req);
                 GOTO(out, rc = -EINTR);
         }
 
-        rc = cl->cli_rep_unpack(req->rq_repbuf, req->rq_replen,
-                                &req->rq_rephdr, &req->rq_rep);
+        rc = lustre_unpack_msg(req->rq_repbuf, req->rq_replen);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
         if (rc) {
                 CERROR("unpack_rep failed: %d\n", rc);
                 GOTO(out, rc);
         }
-        CDEBUG(D_NET, "got rep %d\n", req->rq_rephdr->xid);
+        CDEBUG(D_NET, "got rep %d\n", req->rq_repmsg->xid);
 
-        if ( req->rq_rephdr->status == 0 )
+        if (req->rq_repmsg->status == 0)
                 CDEBUG(D_NET, "--> buf %p len %d status %d\n", req->rq_repbuf,
-                       req->rq_replen, req->rq_rephdr->status);
+                       req->rq_replen, req->rq_repmsg->status);
 
         EXIT;
  out:
index 22631d7..c349cc9 100644 (file)
@@ -214,7 +214,9 @@ int ptlrpc_reply(struct obd_device *obddev, struct ptlrpc_service *svc,
 
                 /* FIXME: we need to increment the count of handled events */
                 req->rq_type = PTL_RPC_REPLY;
-                req->rq_reqhdr->xid = req->rq_reqhdr->xid;
+                req->rq_repmsg->xid = HTON__u32(req->rq_reqmsg->xid);
+                req->rq_repmsg->status = HTON__u32(req->rq_status);
+                req->rq_reqmsg->type = HTON__u32(req->rq_type);
                 ptl_send_buf(req, &req->rq_peer, svc->srv_rep_portal);
         } else {
                 /* This is a local request that came from another thread. */
@@ -233,53 +235,42 @@ int ptlrpc_reply(struct obd_device *obddev, struct ptlrpc_service *svc,
                 wake_up_interruptible(&clnt_req->rq_wait_for_rep); 
         }
 
-        EXIT;
-        return 0;
+        RETURN(0);
 }
 
 int ptlrpc_error(struct obd_device *obddev, struct ptlrpc_service *svc,
                  struct ptlrpc_request *req)
 {
-        struct ptlrep_hdr *hdr;
-
+        int rc;
         ENTRY;
 
-        OBD_ALLOC(hdr, sizeof(*hdr));
-        if (!hdr) { 
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memset(hdr, 0, sizeof(*hdr));
-
-        hdr->xid = req->rq_reqhdr->xid;
-        hdr->status = req->rq_status; 
-        hdr->type = PTL_RPC_ERR;
-
-        if (req->rq_repbuf) { 
+        if (req->rq_repbuf) {
                 CERROR("req has repbuf\n");
                 LBUG();
         }
 
-        req->rq_repbuf = (char *)hdr;
-        req->rq_replen = sizeof(*hdr); 
+        rc = lustre_pack_msg(0, NULL, NULL, &req->rq_replen, &req->rq_repbuf);
+        req->rq_repmsg = (struct lustre_msg *)req->rq_repbuf;
+        if (rc)
+                RETURN(rc);
 
-        EXIT;
-        return ptlrpc_reply(obddev, svc, req);
+        req->rq_repmsg->type = HTON__u32(PTL_RPC_ERR);
+
+        rc = ptlrpc_reply(obddev, svc, req);
+        RETURN(rc);
 }
 
 int ptl_send_rpc(struct ptlrpc_request *request, struct ptlrpc_client *cl)
 {
         ptl_process_id_t local_id;
-        struct ptlreq_hdr *hdr;
         int rc;
         char *repbuf;
 
         ENTRY;
 
-        hdr = (struct ptlreq_hdr *)request->rq_reqbuf;
-        if (NTOH__u32(hdr->type) != PTL_RPC_REQUEST) {
-                CERROR("wrong packet type sent %d\n", NTOH__u32(hdr->type));
+        if (NTOH__u32(request->rq_reqmsg->type) != PTL_RPC_REQUEST) {
+                CERROR("wrong packet type sent %d\n",
+                       NTOH__u32(request->rq_reqmsg->type));
                 LBUG();
                 RETURN(-EINVAL);
         }
similarity index 56%
rename from lustre/lib/pack_generic.c
rename to lustre/ptlrpc/pack_generic.c
index 06a4306..ad66380 100644 (file)
  *
  */
 
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/sched.h>
-#include <linux/lp.h>
-#include <linux/slab.h>
-#include <linux/ioport.h>
-#include <linux/fcntl.h>
-#include <linux/delay.h>
-#include <linux/skbuff.h>
-#include <linux/proc_fs.h>
-#include <linux/fs.h>
-#include <linux/poll.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <asm/io.h>
-#include <asm/segment.h>
-#include <asm/system.h>
-#include <asm/poll.h>
-#include <asm/uaccess.h>
+#define EXPORT_SYMTAB
 
 #define DEBUG_SUBSYSTEM S_CLASS
 
@@ -53,74 +33,87 @@ int lustre_pack_msg(int count, int *lens, char **bufs, int *len, char **buf)
 {
         char *ptr;
         struct lustre_msg *m;
-        int size = 0;
-        int i;
+        int size = 0, i;
 
-        for (i=0 ; i<count; i++) { 
+        for (i = 0; i < count; i++)
                 size += size_round(lens[i]);
-        }
-        *len = sizeof(*m) + size; 
+
+        *len = sizeof(*m) + count * sizeof(__u32) + size;
 
         OBD_ALLOC(*buf, *len);
-        if (!*buf) {
-                EXIT;
-                return -ENOMEM;
-        }
+        if (!*buf)
+                RETURN(-ENOMEM);
 
-        memset(*buf, 0, *len); 
         m = (struct lustre_msg *)(*buf);
-        m->type = PTL_RPC_REQUEST;
-
         m->bufcount = HTON__u32(count);
-        for (i=0 ; i<count; i++) { 
+        for (i = 0; i < count; i++)
                 m->buflens[i] = HTON__u32(lens[i]);
-        }
-        
+
         ptr = *buf + sizeof(*m) + sizeof(__u32) * count;
-        for (i=0 ; i<count ; i++) { 
-                LOGL(buf[i], lens[i], ptr); 
+        for (i = 0; i < count; i++) {
+                char *tmp = NULL;
+                if (bufs)
+                        tmp = bufs[i];
+                LOGL(tmp, lens[i], ptr);
         }
 
         return 0;
 }
 
+/* This returns the size of the buffer that is required to hold a lustre_msg
+ * with the given sub-buffer lengths. */
+int lustre_msg_size(int count, int *lengths)
+{
+        int size = sizeof(struct lustre_msg), i;
+
+        for (i = 0; i < count; i++)
+                size += size_round(lengths[i]);
+
+        size += count * sizeof(__u32);
+
+        return size;
+}
+
 int lustre_unpack_msg(char *buf, int len)
 {
         struct lustre_msg *m = (struct lustre_msg *)buf;
         int required_len, i;
 
         required_len = sizeof(*m);
-        if (len < required_len) { 
+        if (len < required_len)
                 RETURN(-EINVAL);
-        }
 
-        m->bufcount = NTOH__u32(m->bufcount); 
+        m->opc = NTOH__u32(m->opc);
+        m->xid = NTOH__u32(m->xid);
+        m->status = NTOH__u32(m->status);
+        m->type = NTOH__u32(m->type);
+        m->connid = NTOH__u32(m->connid);
+        m->bufcount = NTOH__u32(m->bufcount);
 
-        required_len += m->bufcount * sizeof(__u32); 
-        if (len < required_len) { 
+        required_len += m->bufcount * sizeof(__u32);
+        if (len < required_len)
                 RETURN(-EINVAL);
-        }
 
-        for (i=0; i<m->bufcount; i++) { 
+        for (i = 0; i < m->bufcount; i++) {
                 m->buflens[i] = NTOH__u32(m->buflens[i]);
                 required_len += size_round(m->buflens[i]);
         }
 
-        if (len < required_len) { 
+        if (len < required_len) {
+                CERROR("len: %d, required_len %d\n", len, required_len);
                 RETURN(-EINVAL);
         }
 
-        EXIT;
-        return 0;
+        RETURN(0);
 }
 
-void *lustre_msg_buf(int n, struct lustre_msg *m)
+void *lustre_msg_buf(struct lustre_msg *m, int n)
 {
-        int i;
-        int offset;
+        int i, offset;
 
-        if (n >= m->bufcount || n < 0) { 
-                CERROR("referencing bad sub buffer!\n"); 
+        if (n < 0 || n >= m->bufcount) {
+                CERROR("referencing bad sub buffer!\n");
+                LBUG();
                 return NULL;
         }
 
@@ -129,8 +122,8 @@ void *lustre_msg_buf(int n, struct lustre_msg *m)
 
         offset = sizeof(*m) + m->bufcount * sizeof(__u32);
 
-        for (i=0; i < n;  i++ ) 
-                offset += size_round(m->buflens[i]); 
+        for (i = 0; i < n; i++)
+                offset += size_round(m->buflens[i]);
 
         return (char *)m + offset;
 }
index d9c2b96..e783c70 100644 (file)
@@ -39,10 +39,10 @@ static int ptlrpc_check_event(struct ptlrpc_service *svc)
 {
         int rc = 0;
 
-        spin_lock(&svc->srv_lock); 
+        spin_lock(&svc->srv_lock);
         if (sigismember(&(current->pending.signal), SIGKILL) ||
             sigismember(&(current->pending.signal), SIGTERM) ||
-            sigismember(&(current->pending.signal), SIGINT)) { 
+            sigismember(&(current->pending.signal), SIGINT)) {
                 svc->srv_flags |= SVC_KILLED;
                 GOTO(out, rc = 1);
         }
@@ -57,7 +57,7 @@ static int ptlrpc_check_event(struct ptlrpc_service *svc)
                 int err;
                 err = PtlEQGet(svc->srv_eq_h, &svc->srv_ev);
 
-                if (err == PTL_OK) { 
+                if (err == PTL_OK) {
                         svc->srv_flags |= SVC_EVENT;
                         GOTO(out, rc = 1);
                 }
@@ -77,7 +77,7 @@ static int ptlrpc_check_event(struct ptlrpc_service *svc)
 
         EXIT;
  out:
-        spin_unlock(&svc->srv_lock); 
+        spin_unlock(&svc->srv_lock);
         return rc;
 }
 
@@ -89,18 +89,16 @@ ptlrpc_init_svc(__u32 bufsize, int req_portal, int rep_portal, char *uuid,
         int rc, i;
         struct ptlrpc_service *service;
 
-        OBD_ALLOC(service, sizeof(*service)); 
-        if ( !service ) { 
+        OBD_ALLOC(service, sizeof(*service));
+        if (!service) {
                 LBUG();
                 RETURN(NULL);
         }
 
-        memset(service, 0, sizeof(*service)); 
-
         spin_lock_init(&service->srv_lock);
         INIT_LIST_HEAD(&service->srv_reqs);
-        init_waitqueue_head(&service->srv_ctl_waitq); 
-        init_waitqueue_head(&service->srv_waitq); 
+        init_waitqueue_head(&service->srv_ctl_waitq);
+        init_waitqueue_head(&service->srv_waitq);
 
         service->srv_thread = NULL;
         service->srv_flags = 0;
@@ -111,16 +109,16 @@ ptlrpc_init_svc(__u32 bufsize, int req_portal, int rep_portal, char *uuid,
         service->srv_handler = handler;
 
         err = kportal_uuid_to_peer(uuid, &service->srv_self);
-        if (err) { 
-                CERROR("cannot get peer for uuid %s", uuid); 
-                GOTO(err_free, NULL); 
+        if (err) {
+                CERROR("cannot get peer for uuid %s", uuid);
+                GOTO(err_free, NULL);
         }
 
         service->srv_ring_length = RPC_RING_LENGTH;
         service->srv_id.nid = PTL_ID_ANY;
         service->srv_id.pid = PTL_ID_ANY;
 
-        rc = PtlEQAlloc(service->srv_self.peer_ni, 128, 
+        rc = PtlEQAlloc(service->srv_self.peer_ni, 128,
                         server_request_callback,
                         service, &(service->srv_eq_h));
 
@@ -137,8 +135,8 @@ ptlrpc_init_svc(__u32 bufsize, int req_portal, int rep_portal, char *uuid,
                         LBUG();
                         GOTO(err_ring, NULL);
                 }
-                service->srv_ref_count[i] = 0; 
-                ptlrpc_link_svc_me(service, i); 
+                service->srv_ref_count[i] = 0;
+                ptlrpc_link_svc_me(service, i);
         }
 
         CDEBUG(D_NET, "Starting service listening on portal %d\n",
@@ -175,14 +173,14 @@ static int ptlrpc_main(void *arg)
         /* Record that the  thread is running */
         svc->srv_thread = current;
         svc->srv_flags = SVC_RUNNING;
-        wake_up(&svc->srv_ctl_waitq); 
+        wake_up(&svc->srv_ctl_waitq);
 
         /* XXX maintain a list of all managed devices: insert here */
 
         /* And now, loop forever on requests */
         while (1) {
                 wait_event(svc->srv_waitq, ptlrpc_check_event(svc));
-                
+
                 spin_lock(&svc->srv_lock);
                 if (svc->srv_flags & SVC_SIGNAL) {
                         spin_unlock(&svc->srv_lock);
@@ -196,10 +194,10 @@ static int ptlrpc_main(void *arg)
                         break;
                 }
 
-                if (svc->srv_flags & SVC_EVENT) { 
+                if (svc->srv_flags & SVC_EVENT) {
                         struct ptlrpc_request request;
                         void *start;
-                        svc->srv_flags = SVC_RUNNING; 
+                        svc->srv_flags = SVC_RUNNING;
 
                         /* FIXME: If we move to an event-driven model,
                          * we should put the request on the stack of
@@ -225,9 +223,9 @@ static int ptlrpc_main(void *arg)
                         continue;
                 }
 
-                if (svc->srv_flags & SVC_LIST) { 
+                if (svc->srv_flags & SVC_LIST) {
                         struct ptlrpc_request *request;
-                        svc->srv_flags = SVC_RUNNING; 
+                        svc->srv_flags = SVC_RUNNING;
 
                         request = list_entry(svc->srv_reqs.next,
                                              struct ptlrpc_request,
@@ -237,10 +235,10 @@ static int ptlrpc_main(void *arg)
                         rc = svc->srv_handler(obddev, svc, request);
                         continue;
                 }
-                CERROR("unknown break in service"); 
+                CERROR("unknown break in service");
                 spin_unlock(&svc->srv_lock);
                 EXIT;
-                break; 
+                break;
         }
 
         svc->srv_thread = NULL;
@@ -255,7 +253,7 @@ void ptlrpc_stop_thread(struct ptlrpc_service *svc)
         svc->srv_flags = SVC_STOPPING;
 
         wake_up(&svc->srv_waitq);
-        wait_event_interruptible(svc->srv_ctl_waitq, 
+        wait_event_interruptible(svc->srv_ctl_waitq,
                                  (svc->srv_flags & SVC_STOPPED));
 }
 
@@ -273,10 +271,10 @@ int ptlrpc_start_thread(struct obd_device *dev, struct ptlrpc_service *svc,
         init_waitqueue_head(&svc->srv_waitq);
 
         init_waitqueue_head(&svc->srv_ctl_waitq);
-        rc = kernel_thread(ptlrpc_main, (void *) &d, 
+        rc = kernel_thread(ptlrpc_main, (void *) &d,
                            CLONE_VM | CLONE_FS | CLONE_FILES);
         if (rc < 0) {
-                CERROR("cannot start thread\n"); 
+                CERROR("cannot start thread\n");
                 RETURN(-EINVAL);
         }
         wait_event(svc->srv_ctl_waitq, svc->srv_flags & SVC_RUNNING);
index 0779888..493d7cd 100755 (executable)
@@ -11,7 +11,7 @@ PORT=1234
 setup
 setup_portals
 
-new_fs ext2 /tmp/ost 25000
+new_fs ext2 /tmp/ost 10000
 OST=$LOOPDEV
 MDSFS=ext2
 new_fs ${MDSFS} /tmp/mds 10000
index 4bbeb8a..9f422d6 100755 (executable)
@@ -5,6 +5,7 @@ SRCDIR="`dirname $0`"
 
 umount /mnt/obd
 
+killall acceptor
 rmmod llight
 rmmod mdc
 
@@ -45,7 +46,6 @@ EOF
 
 rmmod kqswnal
 rmmod ksocknal
-killall acceptor
 rmmod portals
 
 losetup -d ${LOOP}0