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-2789 lod: sidestep setstripe vs rename race
[fs/lustre-release.git]
/
lustre
/
mdd
/
mdd_dir.c
diff --git
a/lustre/mdd/mdd_dir.c
b/lustre/mdd/mdd_dir.c
index
c28c068
..
2a8fd65
100644
(file)
--- a/
lustre/mdd/mdd_dir.c
+++ b/
lustre/mdd/mdd_dir.c
@@
-1193,6
+1193,7
@@
static int mdd_declare_link(const struct lu_env *env,
struct mdd_object *c,
const struct lu_name *name,
struct thandle *handle,
struct mdd_object *c,
const struct lu_name *name,
struct thandle *handle,
+ struct lu_attr *la,
struct linkea_data *data)
{
int rc;
struct linkea_data *data)
{
int rc;
@@
-1205,11
+1206,13
@@
static int mdd_declare_link(const struct lu_env *env,
if (rc)
return rc;
if (rc)
return rc;
- rc = mdo_declare_attr_set(env, p, NULL, handle);
- if (rc)
- return rc;
+ la->la_valid = LA_CTIME | LA_MTIME;
+ rc = mdo_declare_attr_set(env, p, la, handle);
+ if (rc != 0)
+ return rc;
- rc = mdo_declare_attr_set(env, c, NULL, handle);
+ la->la_valid = LA_CTIME;
+ rc = mdo_declare_attr_set(env, c, la, handle);
if (rc)
return rc;
if (rc)
return rc;
@@
-1243,8
+1246,11
@@
static int mdd_link(const struct lu_env *env, struct md_object *tgt_obj,
memset(ldata, 0, sizeof(*ldata));
memset(ldata, 0, sizeof(*ldata));
+ LASSERT(ma->ma_attr.la_valid & LA_CTIME);
+ la->la_ctime = la->la_mtime = ma->ma_attr.la_ctime;
+
rc = mdd_declare_link(env, mdd, mdd_tobj, mdd_sobj, lname, handle,
rc = mdd_declare_link(env, mdd, mdd_tobj, mdd_sobj, lname, handle,
- ldata);
+ l
a, l
data);
if (rc)
GOTO(stop, rc);
if (rc)
GOTO(stop, rc);
@@
-1274,9
+1280,6
@@
static int mdd_link(const struct lu_env *env, struct md_object *tgt_obj,
GOTO(out_unlock, rc);
}
GOTO(out_unlock, rc);
}
- LASSERT(ma->ma_attr.la_valid & LA_CTIME);
- la->la_ctime = la->la_mtime = ma->ma_attr.la_ctime;
-
la->la_valid = LA_CTIME | LA_MTIME;
rc = mdd_attr_check_set_internal(env, mdd_tobj, la, handle, 0);
if (rc)
la->la_valid = LA_CTIME | LA_MTIME;
rc = mdd_attr_check_set_internal(env, mdd_tobj, la, handle, 0);
if (rc)
@@
-1412,7
+1415,8
@@
static int mdd_declare_unlink(const struct lu_env *env, struct mdd_device *mdd,
if (rc)
return rc;
if (rc)
return rc;
- rc = mdo_declare_attr_set(env, c, NULL, handle);
+ la->la_valid = LA_CTIME;
+ rc = mdo_declare_attr_set(env, c, la, handle);
if (rc)
return rc;
if (rc)
return rc;
@@
-2390,6
+2394,9
@@
static int mdd_declare_rename(const struct lu_env *env,
struct lu_attr *la = &mdd_env_info(env)->mti_la_for_fix;
int rc;
struct lu_attr *la = &mdd_env_info(env)->mti_la_for_fix;
int rc;
+ LASSERT(ma->ma_attr.la_valid & LA_CTIME);
+ la->la_ctime = la->la_mtime = ma->ma_attr.la_ctime;
+
LASSERT(mdd_spobj);
LASSERT(mdd_tpobj);
LASSERT(mdd_sobj);
LASSERT(mdd_spobj);
LASSERT(mdd_tpobj);
LASSERT(mdd_sobj);
@@
-2426,13
+2433,16
@@
static int mdd_declare_rename(const struct lu_env *env,
}
}
- rc = mdo_declare_attr_set(env, mdd_spobj, NULL, handle);
- if (rc)
- return rc;
-
- LASSERT(ma->ma_attr.la_valid & LA_CTIME);
- la->la_ctime = la->la_mtime = ma->ma_attr.la_ctime;
la->la_valid = LA_CTIME | LA_MTIME;
la->la_valid = LA_CTIME | LA_MTIME;
+ rc = mdo_declare_attr_set(env, mdd_spobj, la, handle);
+ if (rc != 0)
+ return rc;
+
+ rc = mdo_declare_attr_set(env, mdd_tpobj, la, handle);
+ if (rc != 0)
+ return rc;
+
+ la->la_valid = LA_CTIME;
rc = mdo_declare_attr_set(env, mdd_sobj, la, handle);
if (rc)
return rc;
rc = mdo_declare_attr_set(env, mdd_sobj, la, handle);
if (rc)
return rc;
@@
-2441,10
+2451,6
@@
static int mdd_declare_rename(const struct lu_env *env,
if (rc)
return rc;
if (rc)
return rc;
- rc = mdo_declare_attr_set(env, mdd_tpobj, NULL, handle);
- if (rc)
- return rc;
-
/* new name */
rc = mdo_declare_index_insert(env, mdd_tpobj, mdo2fid(mdd_sobj),
tname->ln_name, handle);
/* new name */
rc = mdo_declare_index_insert(env, mdd_tpobj, mdo2fid(mdd_sobj),
tname->ln_name, handle);
@@
-2477,7
+2483,8
@@
static int mdd_declare_rename(const struct lu_env *env,
return rc;
}
return rc;
}
- rc = mdo_declare_attr_set(env, mdd_tobj, NULL, handle);
+ la->la_valid = LA_CTIME;
+ rc = mdo_declare_attr_set(env, mdd_tobj, la, handle);
if (rc)
return rc;
if (rc)
return rc;