ci->mc_capa[offset] = capa;
}
+static inline const char *mdd_obj_dev_name(const struct mdd_object *obj)
+{
+ return lu_dev_name(obj->mod_obj.mo_lu.lo_dev);
+}
+
#define MAX_ATIME_DIFF 60
enum {
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_attr_set(env, next, la, handle, capa);
}
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_xattr_set(env, next, buf, name, fl, handle,
capa);
}
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_xattr_del(env, next, name, handle, capa);
}
struct lu_buf *buf, struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_xattr_list(env, next, buf, capa);
}
struct thandle *handle)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_ref_add(env, next, handle);
}
struct thandle *handle)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_ref_del(env, next, handle);
}
__u64 opc)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return ERR_PTR(-ENOENT);
+ }
return next->do_ops->do_capa_get(env, next, old, opc);
}
int mdd_data_get(const struct lu_env *env, struct mdd_object *obj,
void **data)
{
- LASSERTF(mdd_object_exists(obj), "FID is "DFID"\n",
- PFID(mdd_object_fid(obj)));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
mdo_data_get(env, obj, data);
return 0;
}
int mdd_la_get(const struct lu_env *env, struct mdd_object *obj,
struct lu_attr *la, struct lustre_capa *capa)
{
- LASSERTF(mdd_object_exists(obj), "FID is "DFID"\n",
- PFID(mdd_object_fid(obj)));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return mdo_attr_get(env, obj, la, capa);
}
ENTRY;
- LASSERT(mdd_object_exists(mdd_obj));
+ if (mdd_object_exists(mdd_obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(mdd_obj),PFID(mdd_object_fid(mdd_obj)));
+ return -ENOENT;
+ }
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
rc = mdo_xattr_get(env, mdd_obj, buf, name,
int rc;
ENTRY;
- LASSERT(mdd_object_exists(mdd_obj));
+ if (mdd_object_exists(mdd_obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(mdd_obj),PFID(mdd_object_fid(mdd_obj)));
+ return -ENOENT;
+ }
next = mdd_object_child(mdd_obj);
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
* Check -ENOENT early here because we need to get object type
* to calculate credits before transaction start
*/
- if (!mdd_object_exists(mdd_obj))
+ if (mdd_object_exists(mdd_obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(mdd_obj),PFID(mdd_object_fid(mdd_obj)));
RETURN(-ENOENT);
+ }
LASSERT(mdd_object_exists(mdd_obj) > 0);
int rc;
ENTRY;
- LASSERT(mdd_object_exists(mdd_obj));
+ if (mdd_object_exists(mdd_obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(mdd_obj),PFID(mdd_object_fid(mdd_obj)));
+ return -ENOENT;
+ }
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
rc = mdd_readpage_sanity_check(env, mdd_obj);
struct mdd_object *mdd_obj = md2mdd_obj(obj);
struct dt_object *next;
- LASSERT(mdd_object_exists(mdd_obj));
+ if (mdd_object_exists(mdd_obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(mdd_obj),PFID(mdd_object_fid(mdd_obj)));
+ return -ENOENT;
+ }
next = mdd_object_child(mdd_obj);
return next->do_ops->do_object_sync(env, next);
}
struct mdt_object *root;
struct lustre_capa *capa;
- root = mdt_object_find(info->mti_env, mdt, &repbody->fid1,
- MDT_OBJ_MUST_EXIST);
+ root = mdt_object_find(info->mti_env, mdt, &repbody->fid1);
if (IS_ERR(root))
RETURN(PTR_ERR(root));
*step 3: find the child object by fid & lock it.
* regardless if it is local or remote.
*/
- child = mdt_object_find(info->mti_env, info->mti_mdt, child_fid,
- MDT_OBJ_MUST_EXIST);
+ child = mdt_object_find(info->mti_env, info->mti_mdt, child_fid);
if (unlikely(IS_ERR(child)))
GOTO(out_parent, rc = PTR_ERR(child));
else
mdt_lock_reg_init(lhc, LCK_PR);
+ if (mdt_object_exists(child) == 0) {
+ LU_OBJECT_DEBUG(D_WARNING, info->mti_env,
+ &child->mot_obj.mo_lu,
+ "Object doesn't exist!\n");
+ GOTO(out_child, rc = -ENOENT);
+ }
+
if (!(child_bits & MDS_INODELOCK_UPDATE)) {
struct md_attr *ma = &info->mti_attr;
struct mdt_object *mdt_object_find(const struct lu_env *env,
struct mdt_device *d,
- const struct lu_fid *f,
- enum mdt_obj_exist check_exist)
+ const struct lu_fid *f)
{
struct lu_object *o;
struct mdt_object *m;
CDEBUG(D_INFO, "Find object for "DFID"\n", PFID(f));
o = lu_object_find(env, &d->mdt_md_dev.md_lu_dev, f, NULL);
if (unlikely(IS_ERR(o)))
- RETURN((struct mdt_object *)o);
+ m = (struct mdt_object *)o;
else
m = mdt_obj(o);
-
- if (check_exist == MDT_OBJ_MUST_EXIST && mdt_object_exists(m) == 0) {
- mdt_object_put(env, m);
- CERROR("%s: object "DFID" not found: rc = -2\n",
- mdt_obj_dev_name(m), PFID(f));
- RETURN(ERR_PTR(-ENOENT));
- }
RETURN(m);
}
struct mdt_object *mdt_object_find_lock(struct mdt_thread_info *info,
const struct lu_fid *f,
struct mdt_lock_handle *lh,
- __u64 ibits,
- enum mdt_obj_exist check_exist)
+ __u64 ibits)
{
struct mdt_object *o;
- o = mdt_object_find(info->mti_env, info->mti_mdt, f, check_exist);
+ o = mdt_object_find(info->mti_env, info->mti_mdt, f);
if (!IS_ERR(o)) {
int rc;
mdt_set_capainfo(info, 0, &body->fid1,
req_capsule_client_get(pill, &RMF_CAPA1));
- obj = mdt_object_find(env, info->mti_mdt, &body->fid1,
- MDT_OBJ_MAY_NOT_EXIST);
+ obj = mdt_object_find(env, info->mti_mdt, &body->fid1);
if (!IS_ERR(obj)) {
if ((flags & HABEO_CORPUS) &&
- mdt_object_exists(obj) == 0) {
+ !mdt_object_exists(obj)) {
mdt_object_put(env, obj);
/* for capability renew ENOENT will be handled in
* mdt_renew_capa */
if (!fid_is_sane(&fp->gf_fid))
RETURN(-EINVAL);
- obj = mdt_object_find(env, mdt, &fp->gf_fid, MDT_OBJ_MUST_EXIST);
+ obj = mdt_object_find(env, mdt, &fp->gf_fid);
if (obj == NULL || IS_ERR(obj)) {
- CDEBUG(D_IOCTL, "%s: no object "DFID": %ld\n",
- mdt2obd_dev(mdt)->obd_name, PFID(&fp->gf_fid),
+ CDEBUG(D_IOCTL, "no object "DFID": %ld\n", PFID(&fp->gf_fid),
PTR_ERR(obj));
- RETURN(obj == NULL ? -EINVAL : PTR_ERR(obj));
+ RETURN(-EINVAL);
}
- if (lu_object_exists(&obj->mot_obj.mo_lu) < 0) {
- rc = -EREMOTE;
+ rc = lu_object_exists(&obj->mot_obj.mo_lu);
+ if (rc <= 0) {
+ if (rc == -1)
+ rc = -EREMOTE;
+ else
+ rc = -ENOENT;
mdt_object_put(env, obj);
CDEBUG(D_IOCTL, "nonlocal object "DFID": %d\n",
PFID(&fp->gf_fid), rc);
lh = &mti->mti_lh[MDT_LH_PARENT];
mdt_lock_reg_init(lh, LCK_CR);
- obj = mdt_object_find_lock(mti, fid, lh, MDS_INODELOCK_UPDATE,
- MDT_OBJ_MUST_EXIST);
- if (IS_ERR(obj)) {
- if (PTR_ERR(obj) == -ENOENT)
- *(__u64 *)data->ioc_inlbuf2 = ENOENT_VERSION;
+ obj = mdt_object_find_lock(mti, fid, lh, MDS_INODELOCK_UPDATE);
+ if (IS_ERR(obj))
RETURN(PTR_ERR(obj));
- }
rc = mdt_object_exists(obj);
if (rc < 0) {
* fid, this is error to find remote object here
*/
CERROR("nonlocal object "DFID"\n", PFID(fid));
- } else if (rc > 0) {
+ } else if (rc == 0) {
+ *(__u64 *)data->ioc_inlbuf2 = ENOENT_VERSION;
+ rc = -ENOENT;
+ } else {
version = dt_version_get(mti->mti_env, mdt_obj2dt(obj));
*(__u64 *)data->ioc_inlbuf2 = version;
rc = 0;
}
mdt_object_unlock_put(mti, obj, lh, 1);
-
RETURN(rc);
}
MDT_TXN_LAST_RCVD_WRITE_OP,
};
-enum mdt_obj_exist{
- MDT_OBJ_MUST_EXIST,
- MDT_OBJ_MAY_NOT_EXIST,
-};
-
static inline const struct md_device_operations *
mdt_child_ops(struct mdt_device * m)
{
class_export_put(exp);
}
-static inline const char *mdt_obj_dev_name(const struct mdt_object *obj)
-{
- return lu_dev_name(obj->mot_obj.mo_lu.lo_dev);
-}
-
int mdt_get_disposition(struct ldlm_reply *rep, int flag);
void mdt_set_disposition(struct mdt_thread_info *info,
struct ldlm_reply *rep, int flag);
struct mdt_object *mdt_object_find(const struct lu_env *,
struct mdt_device *,
- const struct lu_fid *,
- enum mdt_obj_exist check_exist);
+ const struct lu_fid *);
struct mdt_object *mdt_object_find_lock(struct mdt_thread_info *,
const struct lu_fid *,
struct mdt_lock_handle *,
- __u64 ibits,
- enum mdt_obj_exist check_exist);
+ __u64);
void mdt_object_unlock_put(struct mdt_thread_info *,
struct mdt_object *,
struct mdt_lock_handle *,
* We failed after creation, but we do not know in which step
* we failed. So try to check the child object.
*/
- parent = mdt_object_find(env, mdt, rr->rr_fid1,
- MDT_OBJ_MUST_EXIST);
+ parent = mdt_object_find(env, mdt, rr->rr_fid1);
if (IS_ERR(parent)) {
rc = PTR_ERR(parent);
LCONSOLE_WARN("Parent "DFID" lookup error %d."
mdt_export_evict(exp);
RETURN_EXIT;
}
- child = mdt_object_find(env, mdt, rr->rr_fid2,
- MDT_OBJ_MAY_NOT_EXIST);
+ child = mdt_object_find(env, mdt, rr->rr_fid2);
if (IS_ERR(child)) {
rc = PTR_ERR(child);
LCONSOLE_WARN("Child "DFID" lookup error %d."
int rc;
ENTRY;
- o = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid2,
- MDT_OBJ_MUST_EXIST);
+ o = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid2);
if (IS_ERR(o))
- RETURN(PTR_ERR(o));
+ RETURN(rc = PTR_ERR(o));
rc = mdt_object_exists(o);
if (rc > 0) {
rc = mo_attr_get(env, mdt_object_child(o), ma);
if (rc == 0)
rc = mdt_finish_open(info, NULL, o, flags, 0, rep);
- } else if (rc < 0) {
+ } else if (rc == 0) {
+ rc = -ENOENT;
+ } else {
/* the child object was created on remote server */
struct mdt_body *repbody;
repbody = req_capsule_server_get(info->mti_pill, &RMF_MDT_BODY);
if (md_should_create(flags)) {
if (!lu_fid_eq(rr->rr_fid1, rr->rr_fid2)) {
- parent = mdt_object_find(env, mdt, rr->rr_fid1,
- MDT_OBJ_MUST_EXIST);
+ parent = mdt_object_find(env, mdt, rr->rr_fid1);
if (IS_ERR(parent)) {
CDEBUG(D_INODE, "Fail to find parent "DFID
" for anonymous created %ld, try to"
ma->ma_need |= MA_PFID;
}
- o = mdt_object_find(env, mdt, rr->rr_fid2, MDT_OBJ_MUST_EXIST);
- if (IS_ERR(o)) {
- if (PTR_ERR(o) == -ENOENT)
- mdt_set_disposition(info, rep, (DISP_LOOKUP_EXECD |
- DISP_LOOKUP_NEG));
- GOTO(out_parent, rc = PTR_ERR(o));
- }
+ o = mdt_object_find(env, mdt, rr->rr_fid2);
+ if (IS_ERR(o))
+ RETURN(rc = PTR_ERR(o));
rc = mdt_object_exists(o);
- if (rc < 0) {
+ if (rc == 0) {
+ mdt_set_disposition(info, rep, (DISP_LOOKUP_EXECD |
+ DISP_LOOKUP_NEG));
+ GOTO(out, rc = -ENOENT);
+ } else if (rc < 0) {
CERROR("NFS remote open shouldn't happen.\n");
- GOTO(out_child, rc);
+ GOTO(out, rc);
}
mdt_set_disposition(info, rep, (DISP_IT_EXECD |
DISP_LOOKUP_EXECD |
MDS_INODELOCK_LOOKUP | MDS_INODELOCK_OPEN,
MDT_CROSS_LOCK);
if (rc)
- GOTO(out_child, rc);
+ GOTO(out, rc);
rc = mo_attr_get(env, mdt_object_child(o), ma);
if (rc)
- GOTO(out_child, rc);
+ GOTO(out, rc);
if (ma->ma_valid & MA_PFID) {
- parent = mdt_object_find(env, mdt, &ma->ma_pfid,
- MDT_OBJ_MUST_EXIST);
+ parent = mdt_object_find(env, mdt, &ma->ma_pfid);
if (IS_ERR(parent)) {
CDEBUG(D_INODE, "Fail to find parent "DFID
" for anonymous created %ld, try to"
if (!(flags & MDS_OPEN_LOCK) || rc)
mdt_object_unlock(info, o, lhc, 1);
- GOTO(out_child, rc);
-out_child:
+ GOTO(out, rc);
+out:
mdt_object_put(env, o);
-out_parent:
if (parent != NULL)
mdt_object_put(env, parent);
return rc;
int rc;
ENTRY;
- o = mdt_object_find(info->mti_env, info->mti_mdt, fid,
- MDT_OBJ_MAY_NOT_EXIST);
+ o = mdt_object_find(info->mti_env, info->mti_mdt, fid);
if (IS_ERR(o))
RETURN(rc = PTR_ERR(o));
ma->ma_attr.la_mode, msg_flags);
if (req_is_replay(req) ||
- (req->rq_export->exp_libclient && create_flags & MDS_OPEN_HAS_EA)) {
+ (req->rq_export->exp_libclient && create_flags&MDS_OPEN_HAS_EA)) {
/* This is a replay request or from liblustre with ea. */
result = mdt_open_by_fid(info, ldlm_rep);
LCK_PW : LCK_PR, rr->rr_name, rr->rr_namelen);
parent = mdt_object_find_lock(info, rr->rr_fid1, lh,
- MDS_INODELOCK_UPDATE, MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(parent))
GOTO(out, result = PTR_ERR(parent));
mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
}
- child = mdt_object_find(info->mti_env, mdt, child_fid,
- MDT_OBJ_MAY_NOT_EXIST);
+ child = mdt_object_find(info->mti_env, mdt, child_fid);
if (IS_ERR(child))
GOTO(out_parent, result = PTR_ERR(child));
return;
/* if no error, so child was created with requested fid */
- child = mdt_object_find(mti->mti_env, mdt, mti->mti_rr.rr_fid2,
- MDT_OBJ_MUST_EXIST);
+ child = mdt_object_find(mti->mti_env, mdt, mti->mti_rr.rr_fid2);
if (IS_ERR(child)) {
rc = PTR_ERR(child);
LCONSOLE_WARN("Child "DFID" lookup error %d."
return;
body = req_capsule_server_get(mti->mti_pill, &RMF_MDT_BODY);
- obj = mdt_object_find(mti->mti_env, mdt, mti->mti_rr.rr_fid1,
- MDT_OBJ_MUST_EXIST);
+ obj = mdt_object_find(mti->mti_env, mdt, mti->mti_rr.rr_fid1);
if (IS_ERR(obj)) {
int rc = PTR_ERR(obj);
LCONSOLE_WARN(""DFID" lookup error %d."
info->mti_ver[idx] = ENOENT_VERSION;
if (rc == 0) {
struct mdt_object *child;
- child = mdt_object_find(info->mti_env, info->mti_mdt, fid,
- MDT_OBJ_MAY_NOT_EXIST);
+ child = mdt_object_find(info->mti_env, info->mti_mdt, fid);
if (likely(!IS_ERR(child))) {
mdt_obj_version_get(info, child, &info->mti_ver[idx]);
mdt_object_put(info->mti_env, child);
mdt_lock_pdo_init(lh, LCK_PW, rr->rr_name, rr->rr_namelen);
parent = mdt_object_find_lock(info, rr->rr_fid1, lh,
- MDS_INODELOCK_UPDATE, MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(parent))
RETURN(PTR_ERR(parent));
/* save version of file name for replay, it must be ENOENT here */
mdt_enoent_version_save(info, 1);
- child = mdt_object_find(info->mti_env, mdt, rr->rr_fid2,
- MDT_OBJ_MAY_NOT_EXIST);
+ child = mdt_object_find(info->mti_env, mdt, rr->rr_fid2);
if (likely(!IS_ERR(child))) {
struct md_object *next = mdt_object_child(parent);
repbody = req_capsule_server_get(info->mti_pill, &RMF_MDT_BODY);
- o = mdt_object_find(info->mti_env, mdt, info->mti_rr.rr_fid2,
- MDT_OBJ_MAY_NOT_EXIST);
+ o = mdt_object_find(info->mti_env, mdt, info->mti_rr.rr_fid2);
if (!IS_ERR(o)) {
struct md_object *next = mdt_object_child(o);
ldlm_request_cancel(req, info->mti_dlm_req, 0);
repbody = req_capsule_server_get(info->mti_pill, &RMF_MDT_BODY);
- mo = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid1,
- MDT_OBJ_MUST_EXIST);
+ mo = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid1);
if (IS_ERR(mo))
GOTO(out, rc = PTR_ERR(mo));
rr->rr_namelen);
}
mp = mdt_object_find_lock(info, rr->rr_fid1, parent_lh,
- MDS_INODELOCK_UPDATE, MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(mp)) {
rc = PTR_ERR(mp);
/* errors are possible here in cross-ref cases, see below */
GOTO(out_unlock_parent, rc);
/* We will lock the child regardless it is local or remote. No harm. */
- mc = mdt_object_find(info->mti_env, info->mti_mdt, child_fid,
- MDT_OBJ_MUST_EXIST);
+ mc = mdt_object_find(info->mti_env, info->mti_mdt, child_fid);
if (IS_ERR(mc))
GOTO(out_unlock_parent, rc = PTR_ERR(mc));
child_lh = &info->mti_lh[MDT_LH_CHILD];
lhs = &info->mti_lh[MDT_LH_CHILD];
mdt_lock_reg_init(lhs, LCK_EX);
ms = mdt_object_find_lock(info, rr->rr_fid1, lhs,
- MDS_INODELOCK_UPDATE,
- MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(ms))
RETURN(PTR_ERR(ms));
mdt_lock_pdo_init(lhp, LCK_PW, rr->rr_name,
rr->rr_namelen);
mp = mdt_object_find_lock(info, rr->rr_fid2, lhp,
- MDS_INODELOCK_UPDATE, MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(mp))
RETURN(PTR_ERR(mp));
lhs = &info->mti_lh[MDT_LH_CHILD];
mdt_lock_reg_init(lhs, LCK_EX);
- ms = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid1,
- MDT_OBJ_MUST_EXIST);
+ ms = mdt_object_find(info->mti_env, info->mti_mdt, rr->rr_fid1);
if (IS_ERR(ms))
GOTO(out_unlock_parent, rc = PTR_ERR(ms));
mdt_lock_pdo_init(lh_tgtdir, LCK_PW, rr->rr_tgt,
rr->rr_tgtlen);
mtgtdir = mdt_object_find_lock(info, rr->rr_fid1, lh_tgtdir,
- MDS_INODELOCK_UPDATE,
- MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(mtgtdir))
RETURN(PTR_ERR(mtgtdir));
mdt_lock_reg_init(lh_tgt, LCK_EX);
mtgt = mdt_object_find_lock(info, tgt_fid, lh_tgt,
- MDS_INODELOCK_LOOKUP,
- MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_LOOKUP);
if (IS_ERR(mtgt))
GOTO(out_unlock_tgtdir, rc = PTR_ERR(mtgt));
do {
LASSERT(fid_is_sane(&dst_fid));
- dst = mdt_object_find(info->mti_env, info->mti_mdt, &dst_fid,
- MDT_OBJ_MUST_EXIST);
+ dst = mdt_object_find(info->mti_env, info->mti_mdt, &dst_fid);
if (!IS_ERR(dst)) {
rc = mdo_is_subdir(info->mti_env,
mdt_object_child(dst), fid,
mdt_lock_pdo_init(lh_srcdirp, LCK_PW, rr->rr_name,
rr->rr_namelen);
msrcdir = mdt_object_find_lock(info, rr->rr_fid1, lh_srcdirp,
- MDS_INODELOCK_UPDATE,
- MDT_OBJ_MUST_EXIST);
+ MDS_INODELOCK_UPDATE);
if (IS_ERR(msrcdir))
GOTO(out_rename_lock, rc = PTR_ERR(msrcdir));
}
} else {
mtgtdir = mdt_object_find(info->mti_env, info->mti_mdt,
- rr->rr_fid2, MDT_OBJ_MUST_EXIST);
+ rr->rr_fid2);
if (IS_ERR(mtgtdir))
GOTO(out_unlock_source, rc = PTR_ERR(mtgtdir));
if (rc)
GOTO(out_put_target, rc);
- if (mdt_object_exists(mtgtdir) > 0) {
+ rc = mdt_object_exists(mtgtdir);
+ if (rc == 0) {
+ GOTO(out_put_target, rc = -ESTALE);
+ } else if (rc > 0) {
/* we lock the target dir if it is local */
rc = mdt_object_lock(info, mtgtdir, lh_tgtdirp,
MDS_INODELOCK_UPDATE,
if (lu_fid_eq(old_fid, rr->rr_fid1) || lu_fid_eq(old_fid, rr->rr_fid2))
GOTO(out_unlock_target, rc = -EINVAL);
- mold = mdt_object_find(info->mti_env, info->mti_mdt, old_fid,
- MDT_OBJ_MUST_EXIST);
+ mold = mdt_object_find(info->mti_env, info->mti_mdt, old_fid);
if (IS_ERR(mold))
GOTO(out_unlock_target, rc = PTR_ERR(mold));
GOTO(out_unlock_old, rc = -EINVAL);
mdt_lock_reg_init(lh_newp, LCK_EX);
- mnew = mdt_object_find(info->mti_env, info->mti_mdt, new_fid,
- MDT_OBJ_MAY_NOT_EXIST);
+ mnew = mdt_object_find(info->mti_env, info->mti_mdt, new_fid);
if (IS_ERR(mnew))
GOTO(out_unlock_old, rc = PTR_ERR(mnew));
/* ACLs were sent to clients under LCK_CR locks, so taking LCK_EX
* to cancel them. */
mdt_lock_reg_init(lh, LCK_EX);
- obj = mdt_object_find_lock(info, rr->rr_fid1, lh, lockpart,
- MDT_OBJ_MUST_EXIST);
+ obj = mdt_object_find_lock(info, rr->rr_fid1, lh, lockpart);
if (IS_ERR(obj))
GOTO(out, rc = PTR_ERR(obj));