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-12681 osc: wrong cache of LVB attrs
[fs/lustre-release.git]
/
lustre
/
osc
/
osc_lock.c
diff --git
a/lustre/osc/osc_lock.c
b/lustre/osc/osc_lock.c
index
701818b
..
688cc7b
100644
(file)
--- a/
lustre/osc/osc_lock.c
+++ b/
lustre/osc/osc_lock.c
@@
-144,9
+144,6
@@
static void osc_lock_build_policy(const struct lu_env *env,
* with the DLM lock reply from the server. Copy of osc_update_enqueue()
* logic.
*
* with the DLM lock reply from the server. Copy of osc_update_enqueue()
* logic.
*
- * This can be optimized to not update attributes when lock is a result of a
- * local match.
- *
* Called under lock and resource spin-locks.
*/
static void osc_lock_lvb_update(const struct lu_env *env,
* Called under lock and resource spin-locks.
*/
static void osc_lock_lvb_update(const struct lu_env *env,
@@
-202,7
+199,7
@@
static void osc_lock_lvb_update(const struct lu_env *env,
}
static void osc_lock_granted(const struct lu_env *env, struct osc_lock *oscl,
}
static void osc_lock_granted(const struct lu_env *env, struct osc_lock *oscl,
- struct lustre_handle *lockh
, bool lvb_update
)
+ struct lustre_handle *lockh)
{
struct ldlm_lock *dlmlock;
{
struct ldlm_lock *dlmlock;
@@
-242,10
+239,11
@@
static void osc_lock_granted(const struct lu_env *env, struct osc_lock *oscl,
descr->cld_gid = ext->gid;
/* no lvb update for matched lock */
descr->cld_gid = ext->gid;
/* no lvb update for matched lock */
- if (
lvb_update
) {
+ if (
!ldlm_is_lvb_cached(dlmlock)
) {
LASSERT(oscl->ols_flags & LDLM_FL_LVB_READY);
osc_lock_lvb_update(env, cl2osc(oscl->ols_cl.cls_obj),
dlmlock, NULL);
LASSERT(oscl->ols_flags & LDLM_FL_LVB_READY);
osc_lock_lvb_update(env, cl2osc(oscl->ols_cl.cls_obj),
dlmlock, NULL);
+ ldlm_set_lvb_cached(dlmlock);
}
LINVRNT(osc_lock_invariant(oscl));
}
}
LINVRNT(osc_lock_invariant(oscl));
}
@@
-285,7
+283,7
@@
static int osc_lock_upcall(void *cookie, struct lustre_handle *lockh,
}
if (rc == 0)
}
if (rc == 0)
- osc_lock_granted(env, oscl, lockh
, errcode == ELDLM_OK
);
+ osc_lock_granted(env, oscl, lockh);
/* Error handling, some errors are tolerable. */
if (oscl->ols_locklessable && rc == -EUSERS) {
/* Error handling, some errors are tolerable. */
if (oscl->ols_locklessable && rc == -EUSERS) {
@@
-341,7
+339,8
@@
static int osc_lock_upcall_speculative(void *cookie,
lock_res_and_lock(dlmlock);
LASSERT(ldlm_is_granted(dlmlock));
lock_res_and_lock(dlmlock);
LASSERT(ldlm_is_granted(dlmlock));
- /* there is no osc_lock associated with speculative locks */
+ /* there is no osc_lock associated with speculative locks
+ * thus no need to set LDLM_FL_LVB_CACHED */
osc_lock_lvb_update(env, osc, dlmlock, NULL);
unlock_res_and_lock(dlmlock);
osc_lock_lvb_update(env, osc, dlmlock, NULL);
unlock_res_and_lock(dlmlock);
@@
-1035,7
+1034,6
@@
enqueue_base:
}
result = osc_enqueue_base(exp, resname, &oscl->ols_flags,
policy, &oscl->ols_lvb,
}
result = osc_enqueue_base(exp, resname, &oscl->ols_flags,
policy, &oscl->ols_lvb,
- osc->oo_oinfo->loi_kms_valid,
upcall, cookie,
&oscl->ols_einfo, PTLRPCD_SET, async,
oscl->ols_speculative);
upcall, cookie,
&oscl->ols_einfo, PTLRPCD_SET, async,
oscl->ols_speculative);