struct dynlock_handle *dlh;
int rc;
- dlh = mdd_pdo_read_lock(env, mdd_obj, name);
+ dlh = mdd_pdo_read_lock(env, mdd_obj, name, MOR_TGT_PARENT);
if (unlikely(dlh == NULL))
return -ENOMEM;
rc = __mdd_lookup(env, pobj, lname, fid, mask);
{
struct dt_it *it;
struct dt_object *obj;
- struct dt_it_ops *iops;
+ const struct dt_it_ops *iops;
int result;
ENTRY;
if (check_perm)
rc = mdd_permission_internal_locked(env, pobj, NULL,
- MAY_WRITE | MAY_EXEC);
+ MAY_WRITE | MAY_EXEC,
+ MOR_TGT_PARENT);
if (!rc && check_nlink)
rc = __mdd_may_link(env, pobj);
RETURN(-EPERM);
rc = mdd_permission_internal_locked(env, pobj, NULL,
- MAY_WRITE | MAY_EXEC);
+ MAY_WRITE | MAY_EXEC,
+ MOR_TGT_PARENT);
if (rc)
RETURN(rc);
if (check_perm) {
rc = mdd_permission_internal_locked(env, pobj, NULL,
- MAY_WRITE | MAY_EXEC);
+ MAY_WRITE | MAY_EXEC,
+ MOR_TGT_PARENT);
if (rc)
RETURN(rc);
}
if (rc == 0) {
if (is_dir) {
- mdd_write_lock(env, pobj);
+ mdd_write_lock(env, pobj, MOR_TGT_PARENT);
__mdd_ref_add(env, pobj, handle);
mdd_write_unlock(env, pobj);
}
if (name != NULL && name[0] == '.' && name[1] == 0)
is_dot = 1;
- mdd_write_lock(env, pobj);
+ mdd_write_lock(env, pobj, MOR_TGT_PARENT);
__mdd_ref_del(env, pobj, handle, is_dot);
mdd_write_unlock(env, pobj);
}
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
- dlh = mdd_pdo_write_lock(env, mdd_tobj, name);
+ dlh = mdd_pdo_write_lock(env, mdd_tobj, name, MOR_TGT_CHILD);
if (dlh == NULL)
GOTO(out_trans, rc = -ENOMEM);
- mdd_write_lock(env, mdd_sobj);
+ mdd_write_lock(env, mdd_sobj, MOR_TGT_CHILD);
rc = mdd_link_sanity_check(env, mdd_tobj, lname, mdd_sobj);
if (rc)
RETURN(PTR_ERR(handle));
- dlh = mdd_pdo_write_lock(env, mdd_pobj, name);
+ dlh = mdd_pdo_write_lock(env, mdd_pobj, name, MOR_TGT_PARENT);
if (dlh == NULL)
GOTO(out_trans, rc = -ENOMEM);
- mdd_write_lock(env, mdd_cobj);
+ mdd_write_lock(env, mdd_cobj, MOR_TGT_CHILD);
is_dir = S_ISDIR(ma->ma_attr.la_mode);
rc = mdd_unlink_sanity_check(env, mdd_pobj, mdd_cobj, ma);
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
- dlh = mdd_pdo_write_lock(env, mdd_obj, name);
+ dlh = mdd_pdo_write_lock(env, mdd_obj, name, MOR_TGT_PARENT);
if (dlh == NULL)
GOTO(out_trans, rc = -ENOMEM);
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
- dlh = mdd_pdo_write_lock(env, mdd_obj, name);
+ dlh = mdd_pdo_write_lock(env, mdd_obj, name, MOR_TGT_PARENT);
if (dlh == NULL)
GOTO(out_trans, rc = -ENOMEM);
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
- dlh = mdd_pdo_write_lock(env, mdd_tpobj, name);
+ dlh = mdd_pdo_write_lock(env, mdd_tpobj, name, MOR_TGT_PARENT);
if (dlh == NULL)
GOTO(out_trans, rc = -ENOMEM);
if (tobj)
- mdd_write_lock(env, mdd_tobj);
+ mdd_write_lock(env, mdd_tobj, MOR_TGT_CHILD);
rc = mdd_rt_sanity_check(env, mdd_tpobj, mdd_tobj, ma);
if (rc)
if (unlikely(lname->ln_namelen > m->mdd_dt_conf.ddp_max_name_len))
RETURN(-ENAMETOOLONG);
- rc = mdd_permission_internal_locked(env, mdd_obj, NULL, mask);
+ rc = mdd_permission_internal_locked(env, mdd_obj, NULL, mask,
+ MOR_TGT_PARENT);
if (rc)
RETURN(rc);
* EXEC permission have been checked
* when lookup before create already.
*/
- rc = mdd_permission_internal_locked(env, obj, NULL, MAY_WRITE);
+ rc = mdd_permission_internal_locked(env, obj, NULL, MAY_WRITE,
+ MOR_TGT_PARENT);
if (rc)
RETURN(rc);
}
ma_acl->ma_need = MA_ACL_DEF;
ma_acl->ma_valid = 0;
- mdd_read_lock(env, mdd_pobj);
+ mdd_read_lock(env, mdd_pobj, MOR_TGT_PARENT);
rc = mdd_def_acl_get(env, mdd_pobj, ma_acl);
mdd_read_unlock(env, mdd_pobj);
if (rc)
if (IS_ERR(handle))
GOTO(out_free, rc = PTR_ERR(handle));
- dlh = mdd_pdo_write_lock(env, mdd_pobj, name);
+ dlh = mdd_pdo_write_lock(env, mdd_pobj, name, MOR_TGT_PARENT);
if (dlh == NULL)
GOTO(out_trans, rc = -ENOMEM);
- mdd_write_lock(env, son);
+ mdd_write_lock(env, son, MOR_TGT_CHILD);
rc = mdd_object_create_internal(env, mdd_pobj, son, ma, handle);
if (rc) {
mdd_write_unlock(env, son);
}
if (rc2 == 0) {
- mdd_write_lock(env, son);
+ mdd_write_lock(env, son, MOR_TGT_CHILD);
__mdd_ref_del(env, son, handle, 0);
if (initialized && S_ISDIR(attr->la_mode))
__mdd_ref_del(env, son, handle, 1);
/* Get locks in determined order */
if (rc == MDD_RN_SAME) {
- sdlh = mdd_pdo_write_lock(env, mdd_spobj, sname);
+ sdlh = mdd_pdo_write_lock(env, mdd_spobj,
+ sname, MOR_SRC_PARENT);
/* check hashes to determine do we need one lock or two */
if (mdd_name2hash(sname) != mdd_name2hash(tname))
- tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname);
+ tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname,
+ MOR_TGT_PARENT);
else
tdlh = sdlh;
} else if (rc == MDD_RN_SRCTGT) {
- sdlh = mdd_pdo_write_lock(env, mdd_spobj, sname);
- tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname);
+ sdlh = mdd_pdo_write_lock(env, mdd_spobj, sname,MOR_SRC_PARENT);
+ tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname,MOR_TGT_PARENT);
} else {
- tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname);
- sdlh = mdd_pdo_write_lock(env, mdd_spobj, sname);
+ tdlh = mdd_pdo_write_lock(env, mdd_tpobj, tname,MOR_SRC_PARENT);
+ sdlh = mdd_pdo_write_lock(env, mdd_spobj, sname,MOR_TGT_PARENT);
}
if (sdlh == NULL || tdlh == NULL)
GOTO(cleanup, rc = -ENOMEM);
* it must be local one.
*/
if (tobj && mdd_object_exists(mdd_tobj)) {
- mdd_write_lock(env, mdd_tobj);
+ mdd_write_lock(env, mdd_tobj, MOR_TGT_CHILD);
__mdd_ref_del(env, mdd_tobj, handle, 0);
/* Remove dot reference. */