Whamcloud - gitweb
passed second round code review and compilation.
authorhuanghua <huanghua>
Fri, 30 Jun 2006 09:33:17 +0000 (09:33 +0000)
committerhuanghua <huanghua>
Fri, 30 Jun 2006 09:33:17 +0000 (09:33 +0000)
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_reint.c
lustre/mdt/mdt_xattr.c

index 4456fec..0a718da 100644 (file)
@@ -110,6 +110,9 @@ static int mdt_getstatus(struct mdt_thread_info *info)
 
         ENTRY;
 
+        /* Can I remove the OBD_FAIL_CHECK here? because the packing result
+         * has already been checked.
+         */
         if (OBD_FAIL_CHECK(OBD_FAIL_MDS_GETSTATUS_PACK))
                 result = -ENOMEM;
         else {
@@ -175,6 +178,7 @@ static int mdt_getattr_pack_msg(struct mdt_thread_info *info)
 #ifdef MDT_CODE
         const struct mdt_body *body = info->mti_body;
         struct req_capsule *pill = &info->mti_pill;
+        struct ptlrpc_request *req = mdt_info_req(info);
 #endif
         struct md_object *next = mdt_object_child(info->mti_object);
         struct lu_attr *la = &info->mti_attr;
@@ -205,16 +209,19 @@ static int mdt_getattr_pack_msg(struct mdt_thread_info *info)
                         CERROR("MD size %d larger than maximum possible %u\n",
                                rc, MAX_MD_SIZE);
                 } else {
-                        req_capsule_set_size(pill, &RMF_MDT_MD, RCL_SERVER, rc);
+                        req_capsule_set_size(pill, &RMF_MDT_MD, 
+                                             RCL_SERVER, rc);
                 }
         } else if (S_ISLNK(la->la_mode) && (body->valid & OBD_MD_LINKNAME)) {
-                /* It also uese the mdt_md to hold symname */
+                /* XXX:It also uese the mdt_md to hold symname.
+                 * Are there any problem? will be swabbed? hope not.
+                 */
                 int len = min_t(int, la->la_size + 1, body->eadatasize);
                 req_capsule_set_size(pill, &RMF_MDT_MD, RCL_SERVER, len);
         }
 
 #ifdef CONFIG_FS_POSIX_ACL
-        if ((mdt_info_req(info)->rq_export->exp_connect_flags & OBD_CONNECT_ACL) &&
+        if ((req->rq_export->exp_connect_flags & OBD_CONNECT_ACL) &&
             (body->valid & OBD_MD_FLACL)) {
 
                 rc = mo_xattr_get(info->mti_ctxt, next,
@@ -226,7 +233,8 @@ static int mdt_getattr_pack_msg(struct mdt_thread_info *info)
                         }
                         req_capsule_set_size(pill, &RMF_EADATA, RCL_SERVER, 0);
                 } else
-                        req_capsule_set_size(pill, &RMF_EADATA, RCL_SERVER, rc);
+                        req_capsule_set_size(pill, &RMF_EADATA, 
+                                             RCL_SERVER, rc);
         }
 #endif
 #endif
@@ -253,6 +261,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info)
 #ifdef MDT_CODE
         void *buffer;
         int length;
+        struct ptlrpc_request *req = mdt_info_req(info);
 #endif
         ENTRY;
 
@@ -298,19 +307,19 @@ static int mdt_getattr_internal(struct mdt_thread_info *info)
                         repbody->valid |= OBD_MD_LINKNAME;
                         repbody->eadatasize = rc + 1;
                         ((char*)buffer)[rc] = 0;        /* NULL terminate */
-                        CDEBUG(D_INODE, "read symlink dest %s\n", (char*)buffer);
+                        CDEBUG(D_INODE, "symlink dest %s\n", (char*)buffer);
                 }
         }
 
         if (reqbody->valid & OBD_MD_FLMODEASIZE) {
-                repbody->max_cookiesize = MAX_MD_SIZE; /*FIXME*/
-                repbody->max_mdsize = MAX_MD_SIZE;
+                repbody->max_cookiesize = info->mti_mdt->mdt_max_cookiesize;
+                repbody->max_mdsize = info->mti_mdt->mdt_max_mdsize;
                 repbody->valid |= OBD_MD_FLMODEASIZE;
         }
 
 
 #ifdef CONFIG_FS_POSIX_ACL
-        if ((mdt_info_req(info)->rq_export->exp_connect_flags & OBD_CONNECT_ACL) &&
+        if ((req->rq_export->exp_connect_flags & OBD_CONNECT_ACL) &&
             (reqbody->valid & OBD_MD_FLACL)) {
                 buffer = req_capsule_server_get(&info->mti_pill,
                                                 &RMF_EADATA);
@@ -394,37 +403,22 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info,
         if (result != 0)
                 GOTO(out_parent, result);
 
-        /*step 3: find the child object by fid */
-        child = mdt_object_find(info->mti_ctxt, info->mti_mdt, &child_fid);
+        /*step 3: find the child object by fid & lock it*/
+        lhc->mlh_mode = LCK_CR;
+        child = mdt_object_find_lock(info->mti_ctxt, info->mti_mdt, 
+                                     &child_fid, lhc, child_bits);
         if (IS_ERR(child))
                 GOTO(out_parent, result = PTR_ERR(child));
 
-        /*step 4: lock child: this lock is returned back to caller
-         *                    if successfully get attr.
-         */
-        lhc->mlh_mode = LCK_CR;
-        result = mdt_object_lock(ns, child, lhc, child_bits);
-        if (result != 0)
-                GOTO(out_child, result);
-
         /* finally, we can get attr for child. */
         result = mdt_getattr_pack_msg(info);
         if (result == 0) {
-                struct ldlm_reply *ldlm_rep;
-                ldlm_rep = req_capsule_server_get(&info->mti_pill, &RMF_DLM_REP);
-                LASSERT(ldlm_rep);
-                intent_set_disposition(ldlm_rep, DISP_IT_EXECD);
                 result = mdt_getattr_internal(info);
-                if (result)
-                        intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
-                else
-                        intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
         }
         if (result != 0)
                 mdt_object_unlock(ns, child, lhc);
         EXIT;
 
-out_child:
         mdt_object_put(info->mti_ctxt, child);
 out_parent:
         mdt_object_unlock(ns, parent, lhp);
@@ -1480,9 +1474,12 @@ static int mdt_intent_getattr(enum mdt_it_code opcode,
         }
 
         rc = mdt_getattr_name_lock(info, &lhc, child_bits);
+        ldlm_rep = req_capsule_server_get(&info->mti_pill, 
+                                          &RMF_DLM_REP);
         if (rc)
-                RETURN(rc);
-        ldlm_rep = req_capsule_server_get(&info->mti_pill, &RMF_DLM_REP);
+                intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
+        else
+                intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
         ldlm_rep->lock_policy_res2 = rc;
 
         intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD);
@@ -1503,7 +1500,7 @@ static int mdt_intent_getattr(enum mdt_it_code opcode,
 
         *lockp = new_lock;
 
-        /* FIXME:This only happen when I can handle RESENT */
+        /* FIXME:This only happens when MDT can handle RESENT */
         if (new_lock->l_export == req->rq_export) {
                 /* Already gave this to the client, which means that we
                  * reconstructed a reply. */
@@ -2438,7 +2435,6 @@ static struct lu_device *mdt_device_alloc(const struct lu_context *ctx,
                         OBD_FREE_PTR(m);
                         l = ERR_PTR(result);
                 }
-
         } else
                 l = ERR_PTR(-ENOMEM);
         return l;
index 3358a15..1330dcb 100644 (file)
@@ -178,7 +178,8 @@ static int mdt_reint_setattr(struct mdt_thread_info *info)
         /* MDS_CHECK_RESENT */
 
         if (attr->la_valid & ATTR_FROM_OPEN) {
-                mo = mdt_object_find(info->mti_ctxt, info->mti_mdt, rr->rr_fid1);
+                mo = mdt_object_find(info->mti_ctxt, info->mti_mdt, 
+                                     rr->rr_fid1);
                 if (IS_ERR(mo))
                         RETURN(rc = PTR_ERR(mo));
         } else {
@@ -343,7 +344,7 @@ static int mdt_reint_unlink(struct mdt_thread_info *info)
         if (rc != 0)
                 GOTO(out_unlock_child, rc);
 
-        if ((S_ISREG(attr->la_mode) && attr->la_nlink == 1)) {
+        if (S_ISREG(attr->la_mode) && attr->la_nlink == 1) {
                 /* && if opencount == 0*/
                 /* see mds_reint */
                 void * lmm = req_capsule_server_get(&info->mti_pill,
index 1752b1e..c925cfa 100644 (file)
 static int mdt_getxattr_pack_reply(struct mdt_thread_info * info)
 {
         char *xattr_name;
-        int rc = -EOPNOTSUPP, rc2;
-        struct req_capsule *pill;
+        int rc = -EOPNOTSUPP;
+        int rc2;
+        struct req_capsule *pill = &info->mti_pill ;
         struct ptlrpc_request *req = mdt_info_req(info);
 
-        pill = &info->mti_pill;
-
         /* Imagine how many bytes we need */
         if (info->mti_body->valid & OBD_MD_FLXATTR) {
                 xattr_name = req_capsule_client_get(pill, &RMF_NAME);
@@ -83,7 +82,6 @@ static int mdt_getxattr_pack_reply(struct mdt_thread_info * info)
 
         if (OBD_FAIL_CHECK(OBD_FAIL_MDS_GETXATTR_PACK)) {
                 CERROR("failed MDS_GETXATTR_PACK test\n");
-                req->rq_status = -ENOMEM;
                 return -ENOMEM;
         }
 
@@ -110,17 +108,19 @@ int mdt_getxattr(struct mdt_thread_info *info)
         ENTRY;
 
         if (OBD_FAIL_CHECK(OBD_FAIL_MDS_GETXATTR_PACK)) {
-                CERROR(LUSTRE_MDT0_NAME": getxattr lustre_pack_reply failed\n");
+                CERROR(LUSTRE_MDT0_NAME":getxattr pack_reply failed\n");
                 RETURN(rc = -ENOMEM);
         }
 
         next = mdt_object_child(info->mti_object);
 
-        buflen = mdt_getxattr_pack_reply(info);
-        if (buflen < 0)
-                RETURN(rc = buflen);
+        rc = mdt_getxattr_pack_reply(info);
+        if (rc < 0)
+                RETURN(rc);
         buf = req_capsule_server_get(&info->mti_pill,
                                      &RMF_EADATA);
+        buflen = req_capsule_get_size(&info->mti_pill,
+                                      &RMF_EADATA, RCL_SERVER);
         rep_body = req_capsule_server_get(&info->mti_pill,
                                           &RMF_MDT_BODY);
 
@@ -150,7 +150,6 @@ int mdt_getxattr(struct mdt_thread_info *info)
         }
 
         RETURN(rc);
-        return 0;
 }
 
 
@@ -184,7 +183,7 @@ int mdt_setxattr(struct mdt_thread_info *info)
                 GOTO(out, rc = -EPROTO);
         }
 
-        CDEBUG(D_INODE, "%sxattr %s\n",
+        CDEBUG(D_INODE, "%s xattr %s\n",
                   info->mti_body->valid & OBD_MD_FLXATTR ? "set" : "remove",
                   xattr_name);
 
@@ -206,7 +205,6 @@ int mdt_setxattr(struct mdt_thread_info *info)
         if (rc != 0)
                 GOTO(out, rc);
 
-
         if (info->mti_body->valid & OBD_MD_FLXATTR) {
                 char * xattr; 
                 if (!req_capsule_field_present(&info->mti_pill, &RMF_EADATA)) {
@@ -226,13 +224,13 @@ int mdt_setxattr(struct mdt_thread_info *info)
                 }
         } else if (info->mti_body->valid & OBD_MD_FLXATTRRM) {
                 rc = mo_xattr_del(info->mti_ctxt, 
-                                     mdt_object_child(info->mti_object),
-                                     xattr_name);
+                                  mdt_object_child(info->mti_object),
+                                  xattr_name);
         } else {
                 CERROR("valid bits: "LPX64"\n", info->mti_body->valid);
                 rc = -EINVAL;
         }
-
+        EXIT;
 out_unlock:
         mdt_object_unlock(info->mti_mdt->mdt_namespace, 
                           info->mti_object, lh);