+int mdc_getlovinfo(struct obd_device *obd, struct lustre_handle *mdc_connh,
+ uuid_t **uuids, struct ptlrpc_request **request)
+{
+ struct ptlrpc_request *req;
+ struct mds_status_req *streq;
+ struct lov_obd *lov = &obd->u.lov;
+ struct mdc_obd *mdc = &lov->mdcobd->u.mdc;
+ struct ptlrpc_client *cl;
+ struct ptlrpc_connection *connection;
+ struct lustre_handle *rconn;
+ struct lov_desc *desc = &lov->desc;
+ int rc, size[2] = {sizeof(*streq)};
+ ENTRY;
+
+ mdc_con2cl(mdc_connh, &cl, &connection, &rconn);
+ req = ptlrpc_prep_req2(cl, connection, rconn,
+ MDS_LOVINFO, 1, size, NULL);
+ if (!req)
+ GOTO(out, rc = -ENOMEM);
+
+ *request = req;
+ streq = lustre_msg_buf(req->rq_reqmsg, 0);
+ streq->flags = HTON__u32(MDS_STATUS_LOV);
+ streq->repbuf = HTON__u32(8000);
+
+ /* prepare for reply */
+ req->rq_level = LUSTRE_CONN_CON;
+ size[0] = sizeof(*desc);
+ size[1] = 8000;
+ req->rq_replen = lustre_msg_size(2, size);
+
+ rc = ptlrpc_queue_wait(req);
+ rc = ptlrpc_check_status(req, rc);
+
+ if (!rc) {
+ memcpy(desc, lustre_msg_buf(req->rq_repmsg, 0), sizeof(*desc));
+ *uuids = lustre_msg_buf(req->rq_repmsg, 1);
+ lov_unpackdesc(desc);
+ }
+ mdc->mdc_max_mdsize = sizeof(*desc) +
+ desc->ld_tgt_count * sizeof(uuid_t);
+
+ EXIT;
+ out:
+ return rc;
+}
+