struct cmm_object *cmm_object_find(const struct lu_context *ctxt,
struct cmm_device *d,
- const struct lu_fid *f)
+ const struct lu_fid *f,
+ struct lustre_capa *capa)
{
struct lu_object *o;
struct cmm_object *m;
ENTRY;
- o = lu_object_find(ctxt, d->cmm_md_dev.md_lu_dev.ld_site, f);
+ o = lu_object_find(ctxt, d->cmm_md_dev.md_lu_dev.ld_site, f,
+ capa);
if (IS_ERR(o))
m = (struct cmm_object *)o;
else
int rc;
ENTRY;
- obj = cmm_object_find(ctx, cmm, fid);
+ /* XXX Since capablity will not work with split. so we
+ * pass NULL capablity here */
+ obj = cmm_object_find(ctx, cmm, fid, NULL);
if (IS_ERR(obj))
RETURN(PTR_ERR(obj));
int rc = 0;
ENTRY;
- obj = cmm_object_find(ctx, cmm, fid);
+ obj = cmm_object_find(ctx, cmm, fid, NULL);
if (IS_ERR(obj))
RETURN(PTR_ERR(obj));
struct ptlrpc_request *req = NULL;
struct ptlrpc_bulk_desc *desc = NULL;
struct mdt_body *body;
- int rc, size[2] = { sizeof(struct ptlrpc_body), sizeof(*body) };
+ int rc, size[3] = { sizeof(struct ptlrpc_body), sizeof(*body) };
ENTRY;
CDEBUG(D_INODE, "object: "DFID"\n", PFID(fid));
- req = ptlrpc_prep_req(imp, LUSTRE_MDS_VERSION, MDS_WRITEPAGE, 2, size,
+ req = ptlrpc_prep_req(imp, LUSTRE_MDS_VERSION, MDS_WRITEPAGE, 3, size,
NULL);
if (req == NULL)
GOTO(out, rc = -ENOMEM);
/* NB req now owns desc and will free it when it gets freed */
ptlrpc_prep_bulk_page(desc, (struct page*)page, 0, offset);
- mdc_readdir_pack(req, REQ_REC_OFF, 0, offset, fid);
+ mdc_readdir_pack(req, REQ_REC_OFF, 0, offset, fid, NULL);
ptlrpc_req_set_repsize(req, 2, size);
rc = ptlrpc_queue_wait(req);
return rc;
}
+static int mdt_md_connect(const struct lu_context *ctx,
+ struct lustre_handle *conn,
+ struct obd_device *mdc)
+{
+ struct obd_connect_data *ocd;
+ int rc;
+
+ OBD_ALLOC_PTR(ocd);
+ if (!ocd)
+ RETURN(-ENOMEM);
+ /* The connection between MDS must be local */
+ ocd->ocd_connect_flags |= OBD_CONNECT_LCL_CLIENT;
+ rc = obd_connect(ctx, conn, mdc, &mdc->obd_uuid, ocd);
+
+ OBD_FREE_PTR(ocd);
+
+ RETURN(rc);
+}
/*
* Init client sequence manager which is used by local MDS to talk to sequence
* controller on remote node.
rc = -EINVAL;
} else {
struct lustre_handle conn = {0, };
-
+
CDEBUG(D_CONFIG, "connect to controller %s(%s)\n",
mdc->obd_name, mdc->obd_uuid.uuid);
- rc = obd_connect(ctx, &conn, mdc, &mdc->obd_uuid, NULL);
-
+ rc = mdt_md_connect(ctx, &conn, mdc);
if (rc) {
CERROR("target %s connect error %d\n",
mdc->obd_name, rc);
mdt_body_capa, mdt_body_only);
EXPORT_SYMBOL(RQF_MDS_READPAGE);
+/* This is for split */
const struct req_format RQF_MDS_WRITEPAGE =
DEFINE_REQ_FMT0("MDS_WRITEPAGE",
- mdt_body_only, mdt_body_only);
+ mdt_body_capa, mdt_body_only);
EXPORT_SYMBOL(RQF_MDS_WRITEPAGE);
const struct req_format RQF_MDS_IS_SUBDIR =