Whamcloud - gitweb
LU-6485 libcfs: embed kr_data into kkuc_reg
[fs/lustre-release.git] / lustre / mdc / mdc_request.c
index ce1ebbb..06daca0 100644 (file)
 
 #define REQUEST_MINOR 244
 
-struct mdc_renew_capa_args {
-        struct obd_capa        *ra_oc;
-        renew_capa_cb_t         ra_cb;
-};
-
 static int mdc_cleanup(struct obd_device *obd);
 
-static int mdc_unpack_capa(struct obd_export *exp, struct ptlrpc_request *req,
-                          const struct req_msg_field *field,
-                          struct obd_capa **oc)
-{
-        struct lustre_capa *capa;
-        struct obd_capa *c;
-        ENTRY;
-
-        /* swabbed already in mdc_enqueue */
-        capa = req_capsule_server_get(&req->rq_pill, field);
-        if (capa == NULL)
-                RETURN(-EPROTO);
-
-        c = alloc_capa(CAPA_SITE_CLIENT);
-        if (IS_ERR(c)) {
-                CDEBUG(D_INFO, "alloc capa failed!\n");
-                RETURN(PTR_ERR(c));
-        } else {
-                c->c_capa = *capa;
-                *oc = c;
-                RETURN(0);
-        }
-}
-
 static inline int mdc_queue_wait(struct ptlrpc_request *req)
 {
        struct client_obd *cli = &req->rq_import->imp_obd->u.cli;
@@ -111,56 +82,41 @@ static inline int mdc_queue_wait(struct ptlrpc_request *req)
        return rc;
 }
 
-/* Helper that implements most of mdc_getstatus and signal_completed_replay. */
-/* XXX this should become mdc_get_info("key"), sending MDS_GET_INFO RPC */
-static int send_getstatus(struct obd_import *imp, struct lu_fid *rootfid,
-                          struct obd_capa **pc, int level, int msg_flags)
+static int mdc_getstatus(struct obd_export *exp, struct lu_fid *rootfid)
 {
-        struct ptlrpc_request *req;
-        struct mdt_body       *body;
-        int                    rc;
-        ENTRY;
+       struct ptlrpc_request   *req;
+       struct mdt_body         *body;
+       int                      rc;
 
-        req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_GETSTATUS,
-                                        LUSTRE_MDS_VERSION, MDS_GETSTATUS);
-        if (req == NULL)
-                RETURN(-ENOMEM);
+       ENTRY;
 
-        mdc_pack_body(req, NULL, NULL, 0, 0, -1, 0);
-        lustre_msg_add_flags(req->rq_reqmsg, msg_flags);
-        req->rq_send_state = level;
+       req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp),
+                                       &RQF_MDS_GETSTATUS,
+                                       LUSTRE_MDS_VERSION, MDS_GETSTATUS);
+       if (req == NULL)
+               RETURN(-ENOMEM);
 
-        ptlrpc_request_set_replen(req);
+       mdc_pack_body(req, NULL, 0, 0, -1, 0);
+       req->rq_send_state = LUSTRE_IMP_FULL;
 
-        rc = ptlrpc_queue_wait(req);
-        if (rc)
-                GOTO(out, rc);
+       ptlrpc_request_set_replen(req);
 
-        body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-        if (body == NULL)
-                GOTO(out, rc = -EPROTO);
+       rc = ptlrpc_queue_wait(req);
+       if (rc)
+               GOTO(out, rc);
 
-       if (body->mbo_valid & OBD_MD_FLMDSCAPA) {
-               rc = mdc_unpack_capa(NULL, req, &RMF_CAPA1, pc);
-               if (rc)
-                       GOTO(out, rc);
-       }
+       body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
+       if (body == NULL)
+               GOTO(out, rc = -EPROTO);
 
        *rootfid = body->mbo_fid1;
        CDEBUG(D_NET, "root fid="DFID", last_committed="LPU64"\n",
               PFID(rootfid), lustre_msg_get_last_committed(req->rq_repmsg));
-        EXIT;
+       EXIT;
 out:
-        ptlrpc_req_finished(req);
-        return rc;
-}
+       ptlrpc_req_finished(req);
 
-/* This should be mdc_get_info("rootfid") */
-static int mdc_getstatus(struct obd_export *exp, struct lu_fid *rootfid,
-                        struct obd_capa **pc)
-{
-        return send_getstatus(class_exp2cliimp(exp), rootfid, pc,
-                              LUSTRE_IMP_FULL, 0);
+       return rc;
 }
 
 /*
@@ -212,13 +168,6 @@ static int mdc_getattr_common(struct obd_export *exp,
                         RETURN(-EPROTO);
         }
 
-       if (body->mbo_valid & OBD_MD_FLMDSCAPA) {
-                struct lustre_capa *capa;
-                capa = req_capsule_server_get(pill, &RMF_CAPA1);
-                if (capa == NULL)
-                        RETURN(-EPROTO);
-        }
-
         RETURN(0);
 }
 
@@ -239,16 +188,14 @@ static int mdc_getattr(struct obd_export *exp, struct md_op_data *op_data,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
         rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_GETATTR);
         if (rc) {
                 ptlrpc_request_free(req);
                 RETURN(rc);
         }
 
-        mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                      op_data->op_valid, op_data->op_mode, -1, 0);
+       mdc_pack_body(req, &op_data->op_fid1, op_data->op_valid,
+                     op_data->op_mode, -1, 0);
 
         req_capsule_set_size(&req->rq_pill, &RMF_MDT_MD, RCL_SERVER,
                              op_data->op_mode);
@@ -280,7 +227,6 @@ static int mdc_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
         req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
                              op_data->op_namelen + 1);
 
@@ -290,9 +236,8 @@ static int mdc_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
                 RETURN(rc);
         }
 
-        mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                      op_data->op_valid, op_data->op_mode,
-                      op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, op_data->op_valid,
+                     op_data->op_mode, op_data->op_suppgids[0], 0);
 
         if (op_data->op_name) {
                 char *name = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
@@ -314,8 +259,7 @@ static int mdc_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
 }
 
 static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt,
-                           const struct lu_fid *fid,
-                           struct obd_capa *oc, int opcode, u64 valid,
+                           const struct lu_fid *fid, int opcode, u64 valid,
                            const char *xattr_name, const char *input,
                            int input_size, int output_size, int flags,
                            __u32 suppgid, struct ptlrpc_request **request)
@@ -331,7 +275,6 @@ static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        mdc_set_capa_size(req, &RMF_CAPA1, oc);
         if (xattr_name) {
                 xattr_namelen = strlen(xattr_name) + 1;
                 req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT,
@@ -388,11 +331,9 @@ static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt,
                 rec->sx_time   = cfs_time_current_sec();
                 rec->sx_size   = output_size;
                 rec->sx_flags  = flags;
-
-                mdc_pack_capa(req, &RMF_CAPA1, oc);
-        } else {
-                mdc_pack_body(req, fid, oc, valid, output_size, suppgid, flags);
-        }
+       } else {
+               mdc_pack_body(req, fid, valid, output_size, suppgid, flags);
+       }
 
         if (xattr_name) {
                 tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
@@ -410,12 +351,12 @@ static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt,
 
         /* make rpc */
         if (opcode == MDS_REINT)
-                mdc_get_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+               mdc_get_mod_rpc_slot(req, NULL);
 
         rc = ptlrpc_queue_wait(req);
 
         if (opcode == MDS_REINT)
-                mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+               mdc_put_mod_rpc_slot(req, NULL);
 
         if (rc)
                 ptlrpc_req_finished(req);
@@ -425,28 +366,26 @@ static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt,
 }
 
 static int mdc_setxattr(struct obd_export *exp, const struct lu_fid *fid,
-                       struct obd_capa *oc, u64 valid,
-                       const char *xattr_name,
+                       u64 valid, const char *xattr_name,
                        const char *input, int input_size, int output_size,
                        int flags, __u32 suppgid,
                        struct ptlrpc_request **request)
 {
-        return mdc_xattr_common(exp, &RQF_MDS_REINT_SETXATTR,
-                                fid, oc, MDS_REINT, valid, xattr_name,
-                                input, input_size, output_size, flags,
-                                suppgid, request);
+       return mdc_xattr_common(exp, &RQF_MDS_REINT_SETXATTR,
+                               fid, MDS_REINT, valid, xattr_name,
+                               input, input_size, output_size, flags,
+                               suppgid, request);
 }
 
 static int mdc_getxattr(struct obd_export *exp, const struct lu_fid *fid,
-                       struct obd_capa *oc, u64 valid,
-                       const char *xattr_name,
+                       u64 valid, const char *xattr_name,
                        const char *input, int input_size, int output_size,
                        int flags, struct ptlrpc_request **request)
 {
-        return mdc_xattr_common(exp, &RQF_MDS_GETXATTR,
-                                fid, oc, MDS_GETXATTR, valid, xattr_name,
-                                input, input_size, output_size, flags,
-                                -1, request);
+       return mdc_xattr_common(exp, &RQF_MDS_GETXATTR,
+                               fid, MDS_GETXATTR, valid, xattr_name,
+                               input, input_size, output_size, flags,
+                               -1, request);
 }
 
 #ifdef CONFIG_FS_POSIX_ACL
@@ -505,9 +444,6 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req,
         LASSERT(md->body != NULL);
 
        if (md->body->mbo_valid & OBD_MD_FLEASIZE) {
-               int lmmsize;
-               struct lov_mds_md *lmm;
-
                if (!S_ISREG(md->body->mbo_mode)) {
                        CDEBUG(D_INFO, "OBD_MD_FLEASIZE set, should be a "
                               "regular file, but is not\n");
@@ -520,17 +456,15 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req,
                        GOTO(out, rc = -EPROTO);
                }
 
-               lmmsize = md->body->mbo_eadatasize;
-                lmm = req_capsule_server_sized_get(pill, &RMF_MDT_MD, lmmsize);
-                if (!lmm)
-                        GOTO(out, rc = -EPROTO);
-
-                rc = obd_unpackmd(dt_exp, &md->lsm, lmm, lmmsize);
-                if (rc < 0)
-                        GOTO(out, rc);
+               md->layout.lb_len = md->body->mbo_eadatasize;
+               md->layout.lb_buf = req_capsule_server_sized_get(pill,
+                                                       &RMF_MDT_MD,
+                                                       md->layout.lb_len);
+               if (md->layout.lb_buf == NULL)
+                       GOTO(out, rc = -EPROTO);
        } else if (md->body->mbo_valid & OBD_MD_FLDIREA) {
-               int lmvsize;
-               struct lov_mds_md *lmv;
+               const union lmv_mds_md *lmv;
+               size_t lmv_size;
 
                if (!S_ISDIR(md->body->mbo_mode)) {
                        CDEBUG(D_INFO, "OBD_MD_FLDIREA set, should be a "
@@ -538,21 +472,20 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req,
                        GOTO(out, rc = -EPROTO);
                }
 
-               if (md->body->mbo_eadatasize == 0) {
+               lmv_size = md->body->mbo_eadatasize;
+               if (lmv_size == 0) {
                        CDEBUG(D_INFO, "OBD_MD_FLDIREA is set, "
                               "but eadatasize 0\n");
                        RETURN(-EPROTO);
                }
 
                if (md->body->mbo_valid & OBD_MD_MEA) {
-                       lmvsize = md->body->mbo_eadatasize;
                        lmv = req_capsule_server_sized_get(pill, &RMF_MDT_MD,
-                                                          lmvsize);
-                       if (!lmv)
+                                                          lmv_size);
+                       if (lmv == NULL)
                                GOTO(out, rc = -EPROTO);
 
-                       rc = obd_unpackmd(md_exp, (void *)&md->lmv, lmv,
-                                         lmvsize);
+                       rc = md_unpackmd(md_exp, &md->lmv, lmv, lmv_size);
                        if (rc < 0)
                                GOTO(out, rc);
 
@@ -588,40 +521,13 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req,
 #endif
                 }
         }
-       if (md->body->mbo_valid & OBD_MD_FLMDSCAPA) {
-                struct obd_capa *oc = NULL;
-
-                rc = mdc_unpack_capa(NULL, req, &RMF_CAPA1, &oc);
-                if (rc)
-                        GOTO(out, rc);
-                md->mds_capa = oc;
-        }
-
-       if (md->body->mbo_valid & OBD_MD_FLOSSCAPA) {
-                struct obd_capa *oc = NULL;
-
-                rc = mdc_unpack_capa(NULL, req, &RMF_CAPA2, &oc);
-                if (rc)
-                        GOTO(out, rc);
-                md->oss_capa = oc;
-        }
 
         EXIT;
 out:
         if (rc) {
-                if (md->oss_capa) {
-                        capa_put(md->oss_capa);
-                        md->oss_capa = NULL;
-                }
-                if (md->mds_capa) {
-                        capa_put(md->mds_capa);
-                        md->mds_capa = NULL;
-                }
 #ifdef CONFIG_FS_POSIX_ACL
                 posix_acl_release(md->posix_acl);
 #endif
-                if (md->lsm)
-                        obd_free_memmd(dt_exp, &md->lsm);
         }
         return rc;
 }
@@ -847,8 +753,6 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
         rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_CLOSE);
         if (rc) {
                 ptlrpc_request_free(req);
@@ -886,9 +790,9 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
 
         ptlrpc_request_set_replen(req);
 
-        mdc_get_rpc_lock(obd->u.cli.cl_close_lock, NULL);
-        rc = ptlrpc_queue_wait(req);
-        mdc_put_rpc_lock(obd->u.cli.cl_close_lock, NULL);
+       mdc_get_mod_rpc_slot(req, NULL);
+       rc = ptlrpc_queue_wait(req);
+       mdc_put_mod_rpc_slot(req, NULL);
 
         if (req->rq_repmsg == NULL) {
                 CDEBUG(D_RPCTRACE, "request failed to send: %p, %d\n", req,
@@ -935,8 +839,7 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
 }
 
 static int mdc_getpage(struct obd_export *exp, const struct lu_fid *fid,
-                      __u64 offset, struct obd_capa *oc,
-                      struct page **pages, int npages,
+                      u64 offset, struct page **pages, int npages,
                       struct ptlrpc_request **request)
 {
        struct ptlrpc_request   *req;
@@ -956,8 +859,6 @@ restart_bulk:
        if (req == NULL)
                RETURN(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, oc);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_READPAGE);
        if (rc) {
                ptlrpc_request_free(req);
@@ -967,8 +868,10 @@ restart_bulk:
        req->rq_request_portal = MDS_READPAGE_PORTAL;
        ptlrpc_at_set_req_timeout(req);
 
-       desc = ptlrpc_prep_bulk_imp(req, npages, 1, BULK_PUT_SINK,
-                                   MDS_BULK_PORTAL);
+       desc = ptlrpc_prep_bulk_imp(req, npages, 1,
+                                   PTLRPC_BULK_PUT_SINK | PTLRPC_BULK_BUF_KIOV,
+                                   MDS_BULK_PORTAL,
+                                   &ptlrpc_bulk_kiov_pin_ops);
        if (desc == NULL) {
                ptlrpc_request_free(req);
                RETURN(-ENOMEM);
@@ -976,9 +879,10 @@ restart_bulk:
 
        /* NB req now owns desc and will free it when it gets freed */
        for (i = 0; i < npages; i++)
-               ptlrpc_prep_bulk_page_pin(desc, pages[i], 0, PAGE_CACHE_SIZE);
+               desc->bd_frag_ops->add_kiov_frag(desc, pages[i], 0,
+                                                PAGE_CACHE_SIZE);
 
-       mdc_readdir_pack(req, offset, PAGE_CACHE_SIZE * npages, fid, oc);
+       mdc_readdir_pack(req, offset, PAGE_CACHE_SIZE * npages, fid);
 
        ptlrpc_request_set_replen(req);
        rc = ptlrpc_queue_wait(req);
@@ -1271,8 +1175,7 @@ static int mdc_read_page_remote(void *data, struct page *page0)
                page_pool[npages] = page;
        }
 
-       rc = mdc_getpage(rp->rp_exp, fid, rp->rp_off, op_data->op_capa1,
-                        page_pool, npages, &req);
+       rc = mdc_getpage(rp->rp_exp, fid, rp->rp_off, page_pool, npages, &req);
        if (rc < 0) {
                /* page0 is special, which was added into page cache early */
                delete_from_page_cache(page0);
@@ -1597,7 +1500,7 @@ static int mdc_ioc_hsm_progress(struct obd_export *exp,
        if (req == NULL)
                GOTO(out, rc = -ENOMEM);
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
 
        /* Copy hsm_progress struct */
        req_hpk = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_PROGRESS);
@@ -1609,9 +1512,9 @@ static int mdc_ioc_hsm_progress(struct obd_export *exp,
 
        ptlrpc_request_set_replen(req);
 
-       mdc_get_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+       mdc_get_mod_rpc_slot(req, NULL);
        rc = ptlrpc_queue_wait(req);
-       mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+       mdc_put_mod_rpc_slot(req, NULL);
 
        GOTO(out, rc);
 out:
@@ -1632,7 +1535,7 @@ static int mdc_ioc_hsm_ct_register(struct obd_import *imp, __u32 archives)
        if (req == NULL)
                GOTO(out, rc = -ENOMEM);
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
 
        /* Copy hsm_progress struct */
        archive_mask = req_capsule_client_get(&req->rq_pill,
@@ -1665,16 +1568,14 @@ static int mdc_ioc_hsm_current_action(struct obd_export *exp,
        if (req == NULL)
                RETURN(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_HSM_ACTION);
        if (rc) {
                ptlrpc_request_free(req);
                RETURN(rc);
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     OBD_MD_FLRMTPERM, 0, op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, OBD_MD_FLRMTPERM, 0,
+                     op_data->op_suppgids[0], 0);
 
        ptlrpc_request_set_replen(req);
 
@@ -1707,7 +1608,7 @@ static int mdc_ioc_hsm_ct_unregister(struct obd_import *imp)
        if (req == NULL)
                GOTO(out, rc = -ENOMEM);
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
 
        ptlrpc_request_set_replen(req);
 
@@ -1732,16 +1633,14 @@ static int mdc_ioc_hsm_state_get(struct obd_export *exp,
        if (req == NULL)
                RETURN(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_HSM_STATE_GET);
        if (rc != 0) {
                ptlrpc_request_free(req);
                RETURN(rc);
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     OBD_MD_FLRMTPERM, 0, op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, OBD_MD_FLRMTPERM, 0,
+                     op_data->op_suppgids[0], 0);
 
        ptlrpc_request_set_replen(req);
 
@@ -1775,16 +1674,14 @@ static int mdc_ioc_hsm_state_set(struct obd_export *exp,
        if (req == NULL)
                RETURN(-ENOMEM);
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-
        rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_HSM_STATE_SET);
        if (rc) {
                ptlrpc_request_free(req);
                RETURN(rc);
        }
 
-       mdc_pack_body(req, &op_data->op_fid1, op_data->op_capa1,
-                     OBD_MD_FLRMTPERM, 0, op_data->op_suppgids[0], 0);
+       mdc_pack_body(req, &op_data->op_fid1, OBD_MD_FLRMTPERM, 0,
+                     op_data->op_suppgids[0], 0);
 
        /* Copy states */
        req_hss = req_capsule_client_get(&req->rq_pill, &RMF_HSM_STATE_SET);
@@ -1794,9 +1691,9 @@ static int mdc_ioc_hsm_state_set(struct obd_export *exp,
 
        ptlrpc_request_set_replen(req);
 
-       mdc_get_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+       mdc_get_mod_rpc_slot(req, NULL);
        rc = ptlrpc_queue_wait(req);
-       mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+       mdc_put_mod_rpc_slot(req, NULL);
 
        GOTO(out, rc);
 out:
@@ -1831,7 +1728,7 @@ static int mdc_ioc_hsm_request(struct obd_export *exp,
                RETURN(rc);
        }
 
-       mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
+       mdc_pack_body(req, NULL, OBD_MD_FLRMTPERM, 0, -1, 0);
 
        /* Copy hsm_request struct */
        req_hr = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_REQUEST);
@@ -1854,9 +1751,9 @@ static int mdc_ioc_hsm_request(struct obd_export *exp,
 
        ptlrpc_request_set_replen(req);
 
-       mdc_get_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+       mdc_get_mod_rpc_slot(req, NULL);
        rc = ptlrpc_queue_wait(req);
-       mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL);
+       mdc_put_mod_rpc_slot(req, NULL);
 
        GOTO(out, rc);
 
@@ -2083,9 +1980,9 @@ static int mdc_ioc_swap_layouts(struct obd_export *exp,
 
        /* When the MDT will get the MDS_SWAP_LAYOUTS RPC the
         * first thing it will do is to cancel the 2 layout
-        * locks hold by this client.
+        * locks held by this client.
         * So the client must cancel its layout locks on the 2 fids
-        * with the request RPC to avoid extra RPC round trips
+        * with the request RPC to avoid extra RPC round trips.
         */
        count = mdc_resource_get_unused(exp, &op_data->op_fid1, &cancels,
                                        LCK_EX, MDS_INODELOCK_LAYOUT |
@@ -2101,9 +1998,6 @@ static int mdc_ioc_swap_layouts(struct obd_export *exp,
                RETURN(-ENOMEM);
        }
 
-       mdc_set_capa_size(req, &RMF_CAPA1, op_data->op_capa1);
-       mdc_set_capa_size(req, &RMF_CAPA2, op_data->op_capa2);
-
        rc = mdc_prep_elc_req(exp, req, MDS_SWAP_LAYOUTS, &cancels, count);
        if (rc) {
                ptlrpc_request_free(req);
@@ -2546,7 +2440,7 @@ static int mdc_get_info(const struct lu_env *env, struct obd_export *exp,
 }
 
 static int mdc_fsync(struct obd_export *exp, const struct lu_fid *fid,
-                    struct obd_capa *oc, struct ptlrpc_request **request)
+                    struct ptlrpc_request **request)
 {
         struct ptlrpc_request *req;
         int                    rc;
@@ -2557,15 +2451,13 @@ static int mdc_fsync(struct obd_export *exp, const struct lu_fid *fid,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        mdc_set_capa_size(req, &RMF_CAPA1, oc);
-
         rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_SYNC);
         if (rc) {
                 ptlrpc_request_free(req);
                 RETURN(rc);
         }
 
-        mdc_pack_body(req, fid, oc, 0, 0, -1, 0);
+       mdc_pack_body(req, fid, 0, 0, -1, 0);
 
         ptlrpc_request_set_replen(req);
 
@@ -2711,27 +2603,16 @@ static void mdc_llog_finish(struct obd_device *obd)
 
 static int mdc_setup(struct obd_device *obd, struct lustre_cfg *cfg)
 {
-       struct client_obd               *cli = &obd->u.cli;
        int                             rc;
        ENTRY;
 
-        OBD_ALLOC(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock));
-        if (!cli->cl_rpc_lock)
-                RETURN(-ENOMEM);
-        mdc_init_rpc_lock(cli->cl_rpc_lock);
-
        rc = ptlrpcd_addref();
        if (rc < 0)
-               GOTO(err_rpc_lock, rc);
-
-        OBD_ALLOC(cli->cl_close_lock, sizeof (*cli->cl_close_lock));
-        if (!cli->cl_close_lock)
-                GOTO(err_ptlrpcd_decref, rc = -ENOMEM);
-        mdc_init_rpc_lock(cli->cl_close_lock);
+               RETURN(rc);
 
         rc = client_obd_setup(obd, cfg);
         if (rc)
-                GOTO(err_close_lock, rc);
+               GOTO(err_ptlrpcd_decref, rc);
 #ifdef CONFIG_PROC_FS
        obd->obd_vars = lprocfs_mdc_obd_vars;
        lprocfs_obd_setup(obd);
@@ -2751,17 +2632,10 @@ static int mdc_setup(struct obd_device *obd, struct lustre_cfg *cfg)
                RETURN(rc);
         }
 
-       spin_lock_init(&cli->cl_mod_rpcs_lock);
-       cli->cl_max_mod_rpcs_in_flight = OBD_MAX_RIF_DEFAULT - 1;
-
         RETURN(rc);
 
-err_close_lock:
-        OBD_FREE(cli->cl_close_lock, sizeof (*cli->cl_close_lock));
 err_ptlrpcd_decref:
         ptlrpcd_decref();
-err_rpc_lock:
-        OBD_FREE(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock));
         RETURN(rc);
 }
 
@@ -2800,7 +2674,7 @@ static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
         case OBD_CLEANUP_EXPORTS:
                /* Failsafe, ok if racy */
                if (obd->obd_type->typ_refcnt <= 1)
-                       libcfs_kkuc_group_rem(0, KUC_GRP_HSM, NULL);
+                       libcfs_kkuc_group_rem(0, KUC_GRP_HSM);
 
                 obd_cleanup_client_import(obd);
                 ptlrpc_lprocfs_unregister_obd(obd);
@@ -2814,11 +2688,6 @@ static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
 
 static int mdc_cleanup(struct obd_device *obd)
 {
-        struct client_obd *cli = &obd->u.cli;
-
-        OBD_FREE(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock));
-        OBD_FREE(cli->cl_close_lock, sizeof (*cli->cl_close_lock));
-
         ptlrpcd_decref();
 
         return client_obd_cleanup(obd);
@@ -2834,8 +2703,7 @@ static int mdc_process_config(struct obd_device *obd, size_t len, void *buf)
 
 /* get remote permission for current user on fid */
 static int mdc_get_remote_perm(struct obd_export *exp, const struct lu_fid *fid,
-                              struct obd_capa *oc, __u32 suppgid,
-                              struct ptlrpc_request **request)
+                              u32 suppgid, struct ptlrpc_request **request)
 {
         struct ptlrpc_request  *req;
         int                    rc;
@@ -2848,15 +2716,13 @@ static int mdc_get_remote_perm(struct obd_export *exp, const struct lu_fid *fid,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        mdc_set_capa_size(req, &RMF_CAPA1, oc);
-
         rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_GETATTR);
         if (rc) {
                 ptlrpc_request_free(req);
                 RETURN(rc);
         }
 
-        mdc_pack_body(req, fid, oc, OBD_MD_FLRMTPERM, 0, suppgid, 0);
+       mdc_pack_body(req, fid, OBD_MD_FLRMTPERM, 0, suppgid, 0);
 
         req_capsule_set_size(&req->rq_pill, &RMF_ACL, RCL_SERVER,
                              sizeof(struct mdt_remote_perm));
@@ -2871,61 +2737,6 @@ static int mdc_get_remote_perm(struct obd_export *exp, const struct lu_fid *fid,
         RETURN(rc);
 }
 
-static int mdc_interpret_renew_capa(const struct lu_env *env,
-                                    struct ptlrpc_request *req, void *args,
-                                    int status)
-{
-        struct mdc_renew_capa_args *ra = args;
-        struct mdt_body *body = NULL;
-        struct lustre_capa *capa;
-        ENTRY;
-
-        if (status)
-                GOTO(out, capa = ERR_PTR(status));
-
-        body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-        if (body == NULL)
-                GOTO(out, capa = ERR_PTR(-EFAULT));
-
-       if ((body->mbo_valid & OBD_MD_FLOSSCAPA) == 0)
-                GOTO(out, capa = ERR_PTR(-ENOENT));
-
-        capa = req_capsule_server_get(&req->rq_pill, &RMF_CAPA2);
-        if (!capa)
-                GOTO(out, capa = ERR_PTR(-EFAULT));
-        EXIT;
-out:
-        ra->ra_cb(ra->ra_oc, capa);
-        return 0;
-}
-
-static int mdc_renew_capa(struct obd_export *exp, struct obd_capa *oc,
-                          renew_capa_cb_t cb)
-{
-        struct ptlrpc_request *req;
-        struct mdc_renew_capa_args *ra;
-        ENTRY;
-
-        req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp), &RQF_MDS_GETATTR,
-                                        LUSTRE_MDS_VERSION, MDS_GETATTR);
-        if (req == NULL)
-                RETURN(-ENOMEM);
-
-        /* NB, OBD_MD_FLOSSCAPA is set here, but it doesn't necessarily mean the
-         * capa to renew is oss capa.
-         */
-        mdc_pack_body(req, &oc->c_capa.lc_fid, oc, OBD_MD_FLOSSCAPA, 0, -1, 0);
-        ptlrpc_request_set_replen(req);
-
-        CLASSERT(sizeof(*ra) <= sizeof(req->rq_async_args));
-        ra = ptlrpc_req_async_args(req);
-        ra->ra_oc = oc;
-        ra->ra_cb = cb;
-        req->rq_interpret_reply = mdc_interpret_renew_capa;
-        ptlrpcd_add_req(req, PDL_POLICY_LOCAL, -1);
-        RETURN(0);
-}
-
 static struct obd_ops mdc_obd_ops = {
         .o_owner            = THIS_MODULE,
         .o_setup            = mdc_setup,
@@ -2974,8 +2785,6 @@ static struct md_ops mdc_md_ops = {
         .m_free_lustre_md   = mdc_free_lustre_md,
         .m_set_open_replay_data = mdc_set_open_replay_data,
         .m_clear_open_replay_data = mdc_clear_open_replay_data,
-        .m_renew_capa       = mdc_renew_capa,
-        .m_unpack_capa      = mdc_unpack_capa,
         .m_get_remote_perm  = mdc_get_remote_perm,
         .m_intent_getattr_async = mdc_intent_getattr_async,
         .m_revalidate_lock      = mdc_revalidate_lock