From b11981ee6b6749822e7766cacd2119c791fdd83d Mon Sep 17 00:00:00 2001 From: Mikhail Pershin Date: Wed, 17 Feb 2010 11:07:47 +0300 Subject: [PATCH 1/1] b=21718 refer to osc_io only if lock was held. i=wangdi i=ericm --- lustre/osc/osc_lock.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lustre/osc/osc_lock.c b/lustre/osc/osc_lock.c index c6e7942..b96b962 100644 --- a/lustre/osc/osc_lock.c +++ b/lustre/osc/osc_lock.c @@ -1469,13 +1469,14 @@ static void osc_lock_state(const struct lu_env *env, enum cl_lock_state state) { struct osc_lock *lock = cl2osc_lock(slice); - struct osc_io *oio = osc_env_io(env); /* * XXX multiple io contexts can use the lock at the same time. */ LINVRNT(osc_lock_invariant(lock)); if (state == CLS_HELD && slice->cls_lock->cll_state != CLS_HELD) { + struct osc_io *oio = osc_env_io(env); + LASSERT(lock->ols_owner == NULL); lock->ols_owner = oio; } else if (state != CLS_HELD) @@ -1607,10 +1608,11 @@ static void osc_lock_lockless_state(const struct lu_env *env, enum cl_lock_state state) { struct osc_lock *lock = cl2osc_lock(slice); - struct osc_io *oio = osc_env_io(env); LINVRNT(osc_lock_invariant(lock)); if (state == CLS_HELD) { + struct osc_io *oio = osc_env_io(env); + LASSERT(lock->ols_owner == NULL); lock->ols_owner = oio; -- 1.8.3.1