Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-354 test: Change dev_set_rdonly() check to warning
[fs/lustre-release.git]
/
lustre
/
mdt
/
mdt_handler.c
diff --git
a/lustre/mdt/mdt_handler.c
b/lustre/mdt/mdt_handler.c
index
6e4705e
..
55ab803
100644
(file)
--- a/
lustre/mdt/mdt_handler.c
+++ b/
lustre/mdt/mdt_handler.c
@@
-28,9
+28,8
@@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
- */
-/*
- * Copyright (c) 2011 Whamcloud, Inc.
+ *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
/*
* This file is part of Lustre, http://www.lustre.org/
@@
-325,8
+324,7
@@
static int mdt_getstatus(struct mdt_thread_info *info)
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));
@@
-817,6
+815,7
@@
static int mdt_raw_lookup(struct mdt_thread_info *info,
LASSERT(!info->mti_cross_ref);
/* Only got the fid of this obj by name */
LASSERT(!info->mti_cross_ref);
/* Only got the fid of this obj by name */
+ fid_zero(child_fid);
rc = mdo_lookup(info->mti_env, next, lname, child_fid,
&info->mti_spec);
#if 0
rc = mdo_lookup(info->mti_env, next, lname, child_fid,
&info->mti_spec);
#if 0
@@
-981,6
+980,7
@@
static int mdt_getattr_name_lock(struct mdt_thread_info *info,
}
/* step 2: lookup child's fid by name */
}
/* step 2: lookup child's fid by name */
+ fid_zero(child_fid);
rc = mdo_lookup(info->mti_env, next, lname, child_fid,
&info->mti_spec);
rc = mdo_lookup(info->mti_env, next, lname, child_fid,
&info->mti_spec);
@@
-1000,8
+1000,7
@@
static int mdt_getattr_name_lock(struct mdt_thread_info *info,
*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));
@@
-1040,6
+1039,13
@@
relock:
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_INODE, 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;
@@
-2074,8
+2080,7
@@
static struct mdt_object *mdt_obj(struct lu_object *o)
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;
@@
-2084,16
+2089,9
@@
struct mdt_object *mdt_object_find(const struct lu_env *env,
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
;
else
m = mdt_obj(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);
}
RETURN(m);
}
@@
-2370,12
+2368,11
@@
void mdt_object_unlock(struct mdt_thread_info *info, struct mdt_object *o,
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)
+ __u64 ibits)
{
struct mdt_object *o;
{
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;
if (!IS_ERR(o)) {
int rc;
@@
-2479,11
+2476,10
@@
static int mdt_body_unpack(struct mdt_thread_info *info, __u32 flags)
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 */
@@
-4827,8
+4823,8
@@
static struct lu_object *mdt_object_alloc(const struct lu_env *env,
lu_object_init(o, h, d);
lu_object_add_top(h, o);
o->lo_ops = &mdt_obj_ops;
lu_object_init(o, h, d);
lu_object_add_top(h, o);
o->lo_ops = &mdt_obj_ops;
- cfs_
sema_init(&mo->mot_ioepoch_sem, 1
);
- cfs_
sema_init(&mo->mot_lov_sem, 1
);
+ cfs_
mutex_init(&mo->mot_ioepoch_mutex
);
+ cfs_
mutex_init(&mo->mot_lov_mutex
);
RETURN(o);
} else
RETURN(NULL);
RETURN(o);
} else
RETURN(NULL);
@@
-5233,7
+5229,7
@@
static int mdt_init_export(struct obd_export *exp)
CFS_INIT_LIST_HEAD(&med->med_open_head);
cfs_spin_lock_init(&med->med_open_lock);
CFS_INIT_LIST_HEAD(&med->med_open_head);
cfs_spin_lock_init(&med->med_open_lock);
- cfs_
sema_init(&med->med_idmap_sem, 1
);
+ cfs_
mutex_init(&med->med_idmap_mutex
);
med->med_idmap = NULL;
cfs_spin_lock(&exp->exp_lock);
exp->exp_connecting = 1;
med->med_idmap = NULL;
cfs_spin_lock(&exp->exp_lock);
exp->exp_connecting = 1;
@@
-5403,16
+5399,19
@@
static int mdt_fid2path(const struct lu_env *env, struct mdt_device *mdt,
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),
PTR_ERR(obj));
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);
mdt_object_put(env, obj);
CDEBUG(D_IOCTL, "nonlocal object "DFID": %d\n",
PFID(&fp->gf_fid), rc);
@@
-5510,13
+5509,9
@@
static int mdt_ioc_version_get(struct mdt_thread_info *mti, void *karg)
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))
RETURN(PTR_ERR(obj));
RETURN(PTR_ERR(obj));
- }
rc = mdt_object_exists(obj);
if (rc < 0) {
rc = mdt_object_exists(obj);
if (rc < 0) {
@@
-5526,13
+5521,15
@@
static int mdt_ioc_version_get(struct mdt_thread_info *mti, void *karg)
* 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) {
+ } 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);
-
RETURN(rc);
}
RETURN(rc);
}
@@
-5557,7
+5554,7
@@
static int mdt_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
rc = mdt_device_sync(&env, mdt);
break;
case OBD_IOC_SET_READONLY:
rc = mdt_device_sync(&env, mdt);
break;
case OBD_IOC_SET_READONLY:
- dt->dd_ops->dt_ro(&env, dt);
+
rc =
dt->dd_ops->dt_ro(&env, dt);
break;
case OBD_IOC_ABORT_RECOVERY:
CERROR("Aborting recovery for device %s\n", obd->obd_name);
break;
case OBD_IOC_ABORT_RECOVERY:
CERROR("Aborting recovery for device %s\n", obd->obd_name);