mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
gfs2: Add missing rcu locking for glock lookup
am: 4cf918c804
Change-Id: I9848a18606bc0200c0bc72c7e6fc80c4495c1132
This commit is contained in:
@@ -658,9 +658,11 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
|
||||
struct kmem_cache *cachep;
|
||||
int ret, tries = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
gl = rhashtable_lookup_fast(&gl_hash_table, &name, ht_parms);
|
||||
if (gl && !lockref_get_not_dead(&gl->gl_lockref))
|
||||
gl = NULL;
|
||||
rcu_read_unlock();
|
||||
|
||||
*glp = gl;
|
||||
if (gl)
|
||||
@@ -728,15 +730,18 @@ again:
|
||||
|
||||
if (ret == -EEXIST) {
|
||||
ret = 0;
|
||||
rcu_read_lock();
|
||||
tmp = rhashtable_lookup_fast(&gl_hash_table, &name, ht_parms);
|
||||
if (tmp == NULL || !lockref_get_not_dead(&tmp->gl_lockref)) {
|
||||
if (++tries < 100) {
|
||||
rcu_read_unlock();
|
||||
cond_resched();
|
||||
goto again;
|
||||
}
|
||||
tmp = NULL;
|
||||
ret = -ENOMEM;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
} else {
|
||||
WARN_ON_ONCE(ret);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user