Use original patch which replaces LASSERT with CERROR in MDD,
because checking object exists in MDT ruins VBR recovery.
It happens too early but VBR should check that too before reply
to the client.
Signed-off-by: Mikhail Pershin <tappro@whamcloud.com>
Change-Id: If31586c9d1cc86c4c8059a7227c231acdc82a0f1
Reviewed-on: http://review.whamcloud.com/2148
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Niu Yawei <niu@whamcloud.com>
Reviewed-by: Bobi Jam <bobijam@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Yu Jian <yujian@whamcloud.com>
Tested-by: Yu Jian <yujian@whamcloud.com>
ci->mc_capa[offset] = capa;
}
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 {
#define MAX_ATIME_DIFF 60
enum {
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
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);
}
return next->do_ops->do_attr_set(env, next, la, handle, capa);
}
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
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);
}
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);
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);
}
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);
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);
}
return next->do_ops->do_xattr_list(env, next, buf, capa);
}
struct thandle *handle)
{
struct dt_object *next = mdd_object_child(obj);
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);
}
return next->do_ops->do_ref_add(env, next, handle);
}
struct thandle *handle)
{
struct dt_object *next = mdd_object_child(obj);
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);
}
return next->do_ops->do_ref_del(env, next, handle);
}
__u64 opc)
{
struct dt_object *next = mdd_object_child(obj);
__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);
}
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)
{
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;
}
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)
{
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);
}
return mdo_attr_get(env, obj, la, capa);
}
- 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,
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
rc = mdo_xattr_get(env, mdd_obj, buf, name,
- 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);
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
*/
* 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)));
LASSERT(mdd_object_exists(mdd_obj) > 0);
LASSERT(mdd_object_exists(mdd_obj) > 0);
- 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);
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;
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);
}
next = mdd_object_child(mdd_obj);
return next->do_ops->do_object_sync(env, next);
}
struct mdt_object *root;
struct lustre_capa *capa;
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));
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.
*/
*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));
if (unlikely(IS_ERR(child)))
GOTO(out_parent, rc = PTR_ERR(child));
else
mdt_lock_reg_init(lhc, LCK_PR);
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;
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,
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;
{
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)))
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;
-
- 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));
- }
struct mdt_object *mdt_object_find_lock(struct mdt_thread_info *info,
const struct lu_fid *f,
struct mdt_lock_handle *lh,
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)
- 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;
if (!IS_ERR(o)) {
int rc;
mdt_set_capainfo(info, 0, &body->fid1,
req_capsule_client_get(pill, &RMF_CAPA1));
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) &&
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 */
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);
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)) {
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),
- RETURN(obj == NULL ? -EINVAL : PTR_ERR(obj));
- 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);
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);
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))
rc = mdt_object_exists(obj);
if (rc < 0) {
rc = mdt_object_exists(obj);
if (rc < 0) {
* fid, this is error to find remote object here
*/
CERROR("nonlocal object "DFID"\n", PFID(fid));
* fid, this is error to find remote object here
*/
CERROR("nonlocal object "DFID"\n", PFID(fid));
+ } 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);
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);
MDT_TXN_LAST_RCVD_WRITE_OP,
};
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)
{
static inline const struct md_device_operations *
mdt_child_ops(struct mdt_device * m)
{
-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);
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 *,
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 *,
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);
void mdt_object_unlock_put(struct mdt_thread_info *,
struct mdt_object *,
struct mdt_lock_handle *,
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.
*/
* 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."
if (IS_ERR(parent)) {
rc = PTR_ERR(parent);
LCONSOLE_WARN("Parent "DFID" lookup error %d."
mdt_export_evict(exp);
RETURN_EXIT;
}
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."
if (IS_ERR(child)) {
rc = PTR_ERR(child);
LCONSOLE_WARN("Child "DFID" lookup error %d."
- 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);
+ RETURN(rc = PTR_ERR(o));
rc = mdt_object_exists(o);
if (rc > 0) {
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);
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) {
+ 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);
/* 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)) {
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"
if (IS_ERR(parent)) {
CDEBUG(D_INODE, "Fail to find parent "DFID
" for anonymous created %ld, try to"
ma->ma_need |= MA_PFID;
}
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);
rc = mdt_object_exists(o);
+ 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");
CERROR("NFS remote open shouldn't happen.\n");
}
mdt_set_disposition(info, rep, (DISP_IT_EXECD |
DISP_LOOKUP_EXECD |
}
mdt_set_disposition(info, rep, (DISP_IT_EXECD |
DISP_LOOKUP_EXECD |
MDS_INODELOCK_LOOKUP | MDS_INODELOCK_OPEN,
MDT_CROSS_LOCK);
if (rc)
MDS_INODELOCK_LOOKUP | MDS_INODELOCK_OPEN,
MDT_CROSS_LOCK);
if (rc)
rc = mo_attr_get(env, mdt_object_child(o), ma);
if (rc)
rc = mo_attr_get(env, mdt_object_child(o), ma);
if (rc)
if (ma->ma_valid & MA_PFID) {
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 (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);
if (!(flags & MDS_OPEN_LOCK) || rc)
mdt_object_unlock(info, o, lhc, 1);
- GOTO(out_child, rc);
-out_child:
if (parent != NULL)
mdt_object_put(env, parent);
return rc;
if (parent != NULL)
mdt_object_put(env, parent);
return rc;
- 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));
if (IS_ERR(o))
RETURN(rc = PTR_ERR(o));
ma->ma_attr.la_mode, msg_flags);
if (req_is_replay(req) ||
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);
/* 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,
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);
if (IS_ERR(parent))
GOTO(out, result = PTR_ERR(parent));
if (IS_ERR(parent))
GOTO(out, result = PTR_ERR(parent));
mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
}
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));
if (IS_ERR(child))
GOTO(out_parent, result = PTR_ERR(child));
return;
/* if no error, so child was created with requested fid */
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."
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);
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."
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;
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);
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,
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);
if (IS_ERR(parent))
RETURN(PTR_ERR(parent));
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);
/* 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);
if (likely(!IS_ERR(child))) {
struct md_object *next = mdt_object_child(parent);
repbody = req_capsule_server_get(info->mti_pill, &RMF_MDT_BODY);
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);
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);
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));
if (IS_ERR(mo))
GOTO(out, rc = PTR_ERR(mo));
rr->rr_namelen);
}
mp = mdt_object_find_lock(info, rr->rr_fid1, parent_lh,
rr->rr_namelen);
}
mp = mdt_object_find_lock(info, rr->rr_fid1, parent_lh,
- MDS_INODELOCK_UPDATE, MDT_OBJ_MUST_EXIST);
if (IS_ERR(mp)) {
rc = PTR_ERR(mp);
/* errors are possible here in cross-ref cases, see below */
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. */
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];
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,
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);
if (IS_ERR(ms))
RETURN(PTR_ERR(ms));
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,
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);
if (IS_ERR(mp))
RETURN(PTR_ERR(mp));
if (IS_ERR(mp))
RETURN(PTR_ERR(mp));
lhs = &info->mti_lh[MDT_LH_CHILD];
mdt_lock_reg_init(lhs, LCK_EX);
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));
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,
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);
if (IS_ERR(mtgtdir))
RETURN(PTR_ERR(mtgtdir));
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,
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);
if (IS_ERR(mtgt))
GOTO(out_unlock_tgtdir, rc = PTR_ERR(mtgt));
if (IS_ERR(mtgt))
GOTO(out_unlock_tgtdir, rc = PTR_ERR(mtgt));
do {
LASSERT(fid_is_sane(&dst_fid));
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,
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,
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);
if (IS_ERR(msrcdir))
GOTO(out_rename_lock, rc = PTR_ERR(msrcdir));
if (IS_ERR(msrcdir))
GOTO(out_rename_lock, rc = PTR_ERR(msrcdir));
}
} else {
mtgtdir = mdt_object_find(info->mti_env, info->mti_mdt,
}
} else {
mtgtdir = mdt_object_find(info->mti_env, info->mti_mdt,
- rr->rr_fid2, MDT_OBJ_MUST_EXIST);
if (IS_ERR(mtgtdir))
GOTO(out_unlock_source, rc = PTR_ERR(mtgtdir));
if (IS_ERR(mtgtdir))
GOTO(out_unlock_source, rc = PTR_ERR(mtgtdir));
if (rc)
GOTO(out_put_target, rc);
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,
/* 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);
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));
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);
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));
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);
/* 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));
if (IS_ERR(obj))
GOTO(out, rc = PTR_ERR(obj));