if (minfo == NULL)
return ERR_PTR(-ENOMEM);
- op_data = ll_prep_md_op_data(&minfo->mi_data, dir, child, NULL, 0, 0,
+ op_data = ll_prep_md_op_data(&minfo->mi_data, dir, child,
+ entry->se_qstr.name, entry->se_qstr.len, 0,
LUSTRE_OPC_ANY, NULL);
if (IS_ERR(op_data)) {
OBD_FREE_PTR(minfo);
int lmv_intent_getattr_async(struct obd_export *exp,
struct md_enqueue_info *minfo)
{
- struct md_op_data *op_data = &minfo->mi_data;
- struct obd_device *obd = exp->exp_obd;
- struct lmv_obd *lmv = &obd->u.lmv;
- struct lmv_tgt_desc *ptgt = NULL;
- struct lmv_tgt_desc *ctgt = NULL;
- int rc;
+ struct md_op_data *op_data = &minfo->mi_data;
+ struct obd_device *obd = exp->exp_obd;
+ struct lmv_obd *lmv = &obd->u.lmv;
+ struct lmv_tgt_desc *tgt = NULL;
+ int rc;
ENTRY;
if (!fid_is_sane(&op_data->op_fid2))
RETURN(-EINVAL);
- ptgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
- if (IS_ERR(ptgt))
- RETURN(PTR_ERR(ptgt));
-
- ctgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid2);
- if (IS_ERR(ctgt))
- RETURN(PTR_ERR(ctgt));
+ tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
+ if (IS_ERR(tgt))
+ RETURN(PTR_ERR(tgt));
/*
- * if child is on remote MDT, we need 2 async RPCs to fetch both LOOKUP
- * lock on parent, and UPDATE lock on child MDT, which makes all
- * complicated. Considering remote dir is rare case, and not supporting
- * it in statahead won't cause any issue, drop its support for now.
+ * no special handle for remote dir, which needs to fetch both LOOKUP
+ * lock on parent, and then UPDATE lock on child MDT, which makes all
+ * complicated because this is done async. So only LOOKUP lock is
+ * fetched for remote dir, but considering remote dir is rare case,
+ * and not supporting it in statahead won't cause any issue, just leave
+ * it as is.
*/
- if (ptgt != ctgt)
- RETURN(-ENOTSUPP);
- rc = md_intent_getattr_async(ptgt->ltd_exp, minfo);
+ rc = md_intent_getattr_async(tgt->ltd_exp, minfo);
RETURN(rc);
}