Whamcloud - gitweb
- merge 0.7rc1 from b_devel to HEAD (20030612 merge point)
[fs/lustre-release.git] / lustre / mdc / mdc_reint.c
index 3553a45..68d7f0d 100644 (file)
  */
 
 #define EXPORT_SYMTAB
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-
 #define DEBUG_SUBSYSTEM S_MDC
 
+#ifdef __KERNEL__
+# include <linux/config.h>
+# include <linux/module.h>
+# include <linux/kernel.h>
+#else
+# include <liblustre.h>
+#endif
+
 #include <linux/obd_class.h>
 #include <linux/lustre_mds.h>
+#include "mdc_internal.h"
 
 /* mdc_setattr does its own semaphore handling */
 static int mdc_reint(struct ptlrpc_request *request, int level)
 {
         int rc;
-        __u32 *opcodeptr = lustre_msg_buf(request->rq_reqmsg, 0);
+        __u32 *opcodeptr;
 
+        opcodeptr = lustre_msg_buf(request->rq_reqmsg, 0, sizeof (*opcodeptr));
         request->rq_level = level;
 
         if (!(*opcodeptr == REINT_SETATTR))
@@ -44,12 +49,8 @@ static int mdc_reint(struct ptlrpc_request *request, int level)
         if (!(*opcodeptr == REINT_SETATTR))
                 mdc_put_rpc_lock(&mdc_rpc_lock, NULL);
 
-        if (rc) {
+        if (rc)
                 CDEBUG(D_INFO, "error in handling %d\n", rc);
-        } else {
-                /* For future resend/replays. */
-                *opcodeptr |= REINT_REPLAYING;
-        }
         return rc;
 }
 
@@ -59,7 +60,8 @@ static int mdc_reint(struct ptlrpc_request *request, int level)
  * If it is called with iattr->ia_valid & ATTR_FROM_OPEN, then it is a
  * magic open-path setattr that should take the setattr semaphore and
  * go to the setattr portal. */
-int mdc_setattr(struct lustre_handle *conn, struct inode *inode,
+int mdc_setattr(struct lustre_handle *conn,
+                struct mdc_op_data *data,
                 struct iattr *iattr, void *ea, int ealen,
                 struct ptlrpc_request **request)
 {
@@ -85,7 +87,7 @@ int mdc_setattr(struct lustre_handle *conn, struct inode *inode,
         } else
                 rpc_lock = &mdc_rpc_lock;
 
-        mds_setattr_pack(req, inode, iattr, ea, ealen);
+        mds_setattr_pack(req, data, iattr, ea, ealen);
 
         size[0] = sizeof(struct mds_body);
         req->rq_replen = lustre_msg_size(1, size);
@@ -101,15 +103,17 @@ int mdc_setattr(struct lustre_handle *conn, struct inode *inode,
         RETURN(rc);
 }
 
-int mdc_create(struct lustre_handle *conn, struct inode *dir,
-               const char *name, int namelen, const void *data, int datalen,
+int mdc_create(struct lustre_handle *conn,
+               struct mdc_op_data *op_data,
+               const void *data, int datalen,
                int mode, __u32 uid, __u32 gid, __u64 time, __u64 rdev,
                struct ptlrpc_request **request)
 {
         struct ptlrpc_request *req;
-        int rc, size[3] = {sizeof(struct mds_rec_create), namelen + 1, 0};
+        int rc, size[3] = {sizeof(struct mds_rec_create),
+                           op_data->namelen + 1, 0};
         int level, bufcount = 2;
-        ENTRY;
+//        ENTRY;
 
         if (data && datalen) {
                 size[bufcount] = datalen;
@@ -119,12 +123,14 @@ int mdc_create(struct lustre_handle *conn, struct inode *dir,
         req = ptlrpc_prep_req(class_conn2cliimp(conn), MDS_REINT, bufcount,
                               size, NULL);
         if (!req)
-                RETURN(-ENOMEM);
+                return -ENOMEM;
+//                RETURN(-ENOMEM);
 
         /* mds_create_pack fills msg->bufs[1] with name
          * and msg->bufs[2] with tgt, for symlinks or lov MD data */
-        mds_create_pack(req, 0, dir, mode, rdev, uid, gid, time,
-                        name, namelen, data, datalen);
+        mds_create_pack(req, 0, op_data,
+                        mode, rdev, uid, gid, time,
+                        data, datalen);
 
         size[0] = sizeof(struct mds_body);
         req->rq_replen = lustre_msg_size(1, size);
@@ -135,7 +141,6 @@ int mdc_create(struct lustre_handle *conn, struct inode *dir,
         /* Resend if we were told to. */
         if (rc == -ERESTARTSYS) {
                 level = LUSTRE_CONN_RECOVD;
-                req->rq_flags = 0;
                 goto resend;
         }
 
@@ -143,16 +148,17 @@ int mdc_create(struct lustre_handle *conn, struct inode *dir,
                 mdc_store_inode_generation(req, 0, 0);
 
         *request = req;
-        RETURN(rc);
+        return rc;
+//        RETURN(rc);
 }
 
-int mdc_unlink(struct lustre_handle *conn, struct inode *dir,
-               struct inode *child, __u32 mode, const char *name, int namelen,
+int mdc_unlink(struct lustre_handle *conn,
+               struct mdc_op_data *data,
                struct ptlrpc_request **request)
 {
         struct obd_device *obddev = class_conn2obd(conn);
         struct ptlrpc_request *req = *request;
-        int rc, size[2] = {sizeof(struct mds_rec_unlink), namelen + 1};
+        int rc, size[2] = {sizeof(struct mds_rec_unlink), data->namelen + 1};
         ENTRY;
 
         LASSERT(req == NULL);
@@ -167,7 +173,7 @@ int mdc_unlink(struct lustre_handle *conn, struct inode *dir,
         size[1] = obddev->u.cli.cl_max_mds_easize;
         req->rq_replen = lustre_msg_size(2, size);
 
-        mds_unlink_pack(req, 0, dir, child, mode, name, namelen);
+        mds_unlink_pack(req, 0, data);
 
         rc = mdc_reint(req, LUSTRE_CONN_FULL);
         if (rc == -ERESTARTSYS)
@@ -176,11 +182,11 @@ int mdc_unlink(struct lustre_handle *conn, struct inode *dir,
 }
 
 int mdc_link(struct lustre_handle *conn,
-             struct inode *src, struct inode *dir, const char *name,
-             int namelen, struct ptlrpc_request **request)
+             struct mdc_op_data *data,
+             struct ptlrpc_request **request)
 {
         struct ptlrpc_request *req;
-        int rc, size[2] = {sizeof(struct mds_rec_link), namelen + 1};
+        int rc, size[2] = {sizeof(struct mds_rec_link), data->namelen + 1};
         ENTRY;
 
         req = ptlrpc_prep_req(class_conn2cliimp(conn), MDS_REINT, 2, size,
@@ -188,7 +194,7 @@ int mdc_link(struct lustre_handle *conn,
         if (!req)
                 RETURN(-ENOMEM);
 
-        mds_link_pack(req, 0, src, dir, name, namelen);
+        mds_link_pack(req, 0, data);
 
         size[0] = sizeof(struct mds_body);
         req->rq_replen = lustre_msg_size(1, size);
@@ -202,8 +208,9 @@ int mdc_link(struct lustre_handle *conn,
 }
 
 int mdc_rename(struct lustre_handle *conn,
-               struct inode *src, struct inode *tgt, const char *old,
-               int oldlen, const char *new, int newlen,
+               struct mdc_op_data *data,
+               const char *old, int oldlen,
+               const char *new, int newlen,
                struct ptlrpc_request **request)
 {
         struct ptlrpc_request *req;
@@ -216,7 +223,7 @@ int mdc_rename(struct lustre_handle *conn,
         if (!req)
                 RETURN(-ENOMEM);
 
-        mds_rename_pack(req, 0, src, tgt, old, oldlen, new, newlen);
+        mds_rename_pack(req, 0, data, old, oldlen, new, newlen);
 
         size[0] = sizeof(struct mds_body);
         req->rq_replen = lustre_msg_size(1, size);