-static struct md_object_operations mdc_mo_ops;
-static struct md_dir_operations mdc_dir_ops;
-static struct lu_object_operations mdc_obj_ops;
+static const struct md_object_operations mdc_mo_ops;
+static const struct md_dir_operations mdc_dir_ops;
+static const struct lu_object_operations mdc_obj_ops;
struct lu_object *mdc_object_alloc(const struct lu_env *env,
const struct lu_object_header *hdr,
struct lu_device *ld)
{
struct lu_object *mdc_object_alloc(const struct lu_env *env,
const struct lu_object_header *hdr,
struct lu_device *ld)
{
lu_object_init(lo, NULL, ld);
mco->mco_obj.mo_ops = &mdc_mo_ops;
mco->mco_obj.mo_dir_ops = &mdc_dir_ops;
lo->lo_ops = &mdc_obj_ops;
RETURN(lo);
lu_object_init(lo, NULL, ld);
mco->mco_obj.mo_ops = &mdc_mo_ops;
mco->mco_obj.mo_dir_ops = &mdc_dir_ops;
lo->lo_ops = &mdc_obj_ops;
RETURN(lo);
static void mdc_object_free(const struct lu_env *env, struct lu_object *lo)
{
struct mdc_object *mco = lu2mdc_obj(lo);
static void mdc_object_free(const struct lu_env *env, struct lu_object *lo)
{
struct mdc_object *mco = lu2mdc_obj(lo);
static const struct lu_object_operations mdc_obj_ops = {
.loo_object_init = mdc_object_init,
.loo_object_free = mdc_object_free,
};
static const struct lu_object_operations mdc_obj_ops = {
.loo_object_init = mdc_object_init,
.loo_object_free = mdc_object_free,
};
static void mdc_body2attr(struct mdt_body *body, struct md_attr *ma)
{
struct lu_attr *la = &ma->ma_attr;
static void mdc_body2attr(struct mdt_body *body, struct md_attr *ma)
{
struct lu_attr *la = &ma->ma_attr;
if ((body->valid & OBD_MD_FLEASIZE) || (body->valid & OBD_MD_FLDIREA)) {
if (body->eadatasize == 0) {
CERROR("No size defined for easize field\n");
if ((body->valid & OBD_MD_FLEASIZE) || (body->valid & OBD_MD_FLDIREA)) {
if (body->eadatasize == 0) {
CERROR("No size defined for easize field\n");
ma->ma_lmm_size = body->eadatasize;
memcpy(ma->ma_lmm, md, ma->ma_lmm_size);
ma->ma_valid |= MA_LOV;
ma->ma_lmm_size = body->eadatasize;
memcpy(ma->ma_lmm, md, ma->ma_lmm_size);
ma->ma_valid |= MA_LOV;
- rc = md_getattr(mc->mc_desc.cl_exp, lu_object_fid(&mo->mo_lu),
- NULL, OBD_MD_FLMODE | OBD_MD_FLUID | OBD_MD_FLGID |
- OBD_MD_FLFLAGS | OBD_MD_FLCROSSREF, 0, &mci->mci_req);
+ memcpy(&mci->mci_opdata.op_fid1, lu_object_fid(&mo->mo_lu),
+ sizeof (struct lu_fid));
+ mci->mci_opdata.op_valid = OBD_MD_FLMODE | OBD_MD_FLUID |
+ OBD_MD_FLGID | OBD_MD_FLFLAGS |
+ OBD_MD_FLCROSSREF;
+
+ rc = md_getattr(mc->mc_desc.cl_exp, &mci->mci_opdata, &mci->mci_req);
if (rc == 0) {
/* get attr from request */
rc = mdc_req2attr_update(env, ma);
if (rc == 0) {
/* get attr from request */
rc = mdc_req2attr_update(env, ma);
*/
static int mdc_attr_set(const struct lu_env *env, struct md_object *mo,
const struct md_attr *ma)
*/
static int mdc_attr_set(const struct lu_env *env, struct md_object *mo,
const struct md_attr *ma)
static int mdc_object_create(const struct lu_env *env,
struct md_object *mo,
const struct md_op_spec *spec,
static int mdc_object_create(const struct lu_env *env,
struct md_object *mo,
const struct md_op_spec *spec,
mci = mdc_info_init(env);
mci->mci_opdata.op_bias = MDS_CROSS_REF;
mci->mci_opdata.op_fid2 = *lu_object_fid(&mo->mo_lu);
mci = mdc_info_init(env);
mci->mci_opdata.op_bias = MDS_CROSS_REF;
mci->mci_opdata.op_fid2 = *lu_object_fid(&mo->mo_lu);
/* Parent fid is needed to create dotdot on the remote node. */
mci->mci_opdata.op_fid1 = *(spec->u.sp_pfid);
mci->mci_opdata.op_mod_time = la->la_ctime;
/* Parent fid is needed to create dotdot on the remote node. */
mci->mci_opdata.op_fid1 = *(spec->u.sp_pfid);
mci->mci_opdata.op_mod_time = la->la_ctime;
static int mdc_ref_add(const struct lu_env *env, struct md_object *mo,
const struct md_attr *ma)
{
static int mdc_ref_add(const struct lu_env *env, struct md_object *mo,
const struct md_attr *ma)
{
int mdc_send_page(struct cmm_device *cm, const struct lu_env *env,
struct md_object *mo, struct page *page, __u32 offset)
{
int mdc_send_page(struct cmm_device *cm, const struct lu_env *env,
struct md_object *mo, struct page *page, __u32 offset)
{
.moo_attr_get = mdc_attr_get,
.moo_attr_set = mdc_attr_set,
.moo_object_create = mdc_object_create,
.moo_ref_add = mdc_ref_add,
.moo_ref_del = mdc_ref_del,
};
.moo_attr_get = mdc_attr_get,
.moo_attr_set = mdc_attr_set,
.moo_object_create = mdc_object_create,
.moo_ref_add = mdc_ref_add,
.moo_ref_del = mdc_ref_del,
};
static int mdc_rename_tgt(const struct lu_env *env, struct md_object *mo_p,
struct md_object *mo_t, const struct lu_fid *lf,
const struct lu_name *lname, struct md_attr *ma)
static int mdc_rename_tgt(const struct lu_env *env, struct md_object *mo_p,
struct md_object *mo_t, const struct lu_fid *lf,
const struct lu_name *lname, struct md_attr *ma)
-/*
- * Return resulting fid in sfid
- * 0: fids are not relatives
- * fid: fid at which search stopped
+/**
+ * Check the fids are not relatives.
+ * The md_dir_operations::mdo_is_subdir() in mdc.
+ *
+ * Return resulting fid in sfid.
+ * \retval \a sfid = 0 fids are not relatives
+ * \retval \a sfid = FID at which search stopped
*/
static int mdc_is_subdir(const struct lu_env *env, struct md_object *mo,
const struct lu_fid *fid, struct lu_fid *sfid)
*/
static int mdc_is_subdir(const struct lu_env *env, struct md_object *mo,
const struct lu_fid *fid, struct lu_fid *sfid)
body = req_capsule_server_get(&mci->mci_req->rq_pill,
&RMF_MDT_BODY);
LASSERT(body->valid & OBD_MD_FLID);
body = req_capsule_server_get(&mci->mci_req->rq_pill,
&RMF_MDT_BODY);
LASSERT(body->valid & OBD_MD_FLID);
CDEBUG(D_INFO, "Remote mdo_is_subdir(), new src "DFID"\n",
PFID(&body->fid1));
*sfid = body->fid1;
CDEBUG(D_INFO, "Remote mdo_is_subdir(), new src "DFID"\n",
PFID(&body->fid1));
*sfid = body->fid1;
.mdo_is_subdir = mdc_is_subdir,
.mdo_rename_tgt = mdc_rename_tgt
};
.mdo_is_subdir = mdc_is_subdir,
.mdo_rename_tgt = mdc_rename_tgt
};