Whamcloud - gitweb
LU-1217 osc: to not check a cl_lock's state w/o protection
authorJinshan Xiong <jinshan.xiong@whamcloud.com>
Mon, 26 Mar 2012 19:17:17 +0000 (12:17 -0700)
committerOleg Drokin <green@whamcloud.com>
Tue, 29 May 2012 17:21:07 +0000 (13:21 -0400)
osc_page_putref_lock() used to check cl_lock's refcount and
corresponding osc_lock's ols_hold without any protection, this
is racy because other process can change the lock state so as to
make the assertion be false.

Signed-off-by: Jinshan Xiong <jinshan.xiong@whamcloud.com>
Change-Id: I65fe1fa7fc55e8642fea6789784d7bb92a45d56f
Reviewed-on: http://review.whamcloud.com/2616
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Niu Yawei <niu@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osc/osc_page.c

index 460f42d..da58fc4 100644 (file)
@@ -280,12 +280,6 @@ static void osc_page_putref_lock(const struct lu_env *env,
         cfs_atomic_dec(&olock->ols_pageref);
         opg->ops_lock = NULL;
 
-        /*
-         * Note: usually this won't be the last reference of the lock, but if
-         * it is, then all the lock_put do is at most just freeing some memory,
-         * so it would be OK that caller is holding spinlocks.
-         */
-        LASSERT(cfs_atomic_read(&lock->cll_ref) > 1 || olock->ols_hold == 0);
         cl_lock_put(env, lock);
 }