Whamcloud - gitweb
LU-3963 libcfs: convert md[d/t]/mg[c/s] to linux atomic primitives
[fs/lustre-release.git] / lustre / mdt / mdt_handler.c
index bd23719..1b09982 100644 (file)
@@ -735,23 +735,34 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
        }
 
        buffer->lb_len = reqbody->eadatasize;
-       if (buffer->lb_len > 0)
+       if (buffer->lb_len > 0) {
                buffer->lb_buf = req_capsule_server_get(pill, &RMF_MDT_MD);
-       else
+               if (buffer->lb_buf == NULL)
+                       GOTO(out, rc = -EPROTO);
+       } else {
                buffer->lb_buf = NULL;
+               ma_need &= ~(MA_LOV | MA_LMV);
+               CDEBUG(D_INFO, "%s: RPC from %s: does not need LOVEA.\n",
+                      mdt_obd_name(info->mti_mdt),
+                      req->rq_export->exp_client_uuid.uuid);
+       }
 
-        /* If it is dir object and client require MEA, then we got MEA */
-        if (S_ISDIR(lu_object_attr(&next->mo_lu)) &&
-            reqbody->valid & OBD_MD_MEA) {
-                /* Assumption: MDT_MD size is enough for lmv size. */
-                ma->ma_lmv = buffer->lb_buf;
-                ma->ma_lmv_size = buffer->lb_len;
-                ma->ma_need = MA_LMV | MA_INODE;
-        } else {
-                ma->ma_lmm = buffer->lb_buf;
-                ma->ma_lmm_size = buffer->lb_len;
-               ma->ma_need = MA_LOV | MA_INODE | MA_HSM;
-        }
+       /* If it is dir object and client require MEA, then we got MEA */
+       if (S_ISDIR(lu_object_attr(&next->mo_lu)) &&
+           reqbody->valid & OBD_MD_MEA) {
+               /* Assumption: MDT_MD size is enough for lmv size. */
+               ma->ma_lmv = buffer->lb_buf;
+               ma->ma_lmv_size = buffer->lb_len;
+               ma->ma_need = MA_INODE;
+               if (ma->ma_lmm_size > 0)
+                       ma->ma_need |= MA_LMV;
+       } else {
+               ma->ma_lmm = buffer->lb_buf;
+               ma->ma_lmm_size = buffer->lb_len;
+               ma->ma_need = MA_INODE | MA_HSM;
+               if (ma->ma_lmm_size > 0)
+                       ma->ma_need |= MA_LOV;
+       }
 
         if (S_ISDIR(lu_object_attr(&next->mo_lu)) &&
             reqbody->valid & OBD_MD_FLDIREA  &&
@@ -4227,7 +4238,7 @@ static void mdt_fini(const struct lu_env *env, struct mdt_device *m)
         */
        mdt_stack_fini(env, m, md2lu_dev(m->mdt_child));
 
-       LASSERT(cfs_atomic_read(&d->ld_ref) == 0);
+       LASSERT(atomic_read(&d->ld_ref) == 0);
 
        server_put_mount(mdt_obd_name(m));