Whamcloud - gitweb
LU-4008 mdt: Use actual size for layout lock intents 71/9571/6
authorMatt Ezell <ezellma@ornl.gov>
Tue, 25 Mar 2014 12:31:56 +0000 (08:31 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 11 Apr 2014 19:22:01 +0000 (19:22 +0000)
The intent for layout looks up the size of the lov xattr. That size
should be used for the reply buffer instead of the maximum size ever
seen.

Signed-off-by: Matt Ezell <ezellma@ornl.gov>
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: I9550aa47313502288b018f5cac0d59931ce76d21
Reviewed-on: http://review.whamcloud.com/9571
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
lustre/mdt/mdt_handler.c

index abb526a..13ffb22 100644 (file)
@@ -3279,8 +3279,7 @@ static int mdt_intent_layout(enum mdt_it_code opcode,
        struct layout_intent *layout;
        struct lu_fid *fid;
        struct mdt_object *obj = NULL;
-       struct md_object *child = NULL;
-       int rc;
+       int rc = 0;
        ENTRY;
 
        if (opcode != MDT_IT_LAYOUT) {
@@ -3297,11 +3296,10 @@ static int mdt_intent_layout(enum mdt_it_code opcode,
                RETURN(PTR_ERR(obj));
 
        if (mdt_object_exists(obj) && !mdt_object_remote(obj)) {
-               child = mdt_object_child(obj);
-
                /* get the length of lsm */
-               rc = mo_xattr_get(info->mti_env, child, &LU_BUF_NULL,
-                                 XATTR_NAME_LOV);
+               rc = mdt_attr_get_eabuf_size(info, obj);
+               if (rc < 0)
+                       RETURN(rc);
 
                if (rc > info->mti_mdt->mdt_max_mdsize)
                        info->mti_mdt->mdt_max_mdsize = rc;
@@ -3310,8 +3308,7 @@ static int mdt_intent_layout(enum mdt_it_code opcode,
        mdt_object_put(info->mti_env, obj);
 
        (*lockp)->l_lvb_type = LVB_T_LAYOUT;
-       req_capsule_set_size(info->mti_pill, &RMF_DLM_LVB, RCL_SERVER,
-                       ldlm_lvbo_size(*lockp));
+       req_capsule_set_size(info->mti_pill, &RMF_DLM_LVB, RCL_SERVER, rc);
        rc = req_capsule_server_pack(info->mti_pill);
        if (rc != 0)
                RETURN(-EINVAL);