diff options
| author | Andrew Price <anprice@redhat.com> | 2017-03-12 08:23:00 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-03-12 08:23:00 +0000 |
| commit | 057f4303d1f52eb25420db4d73e4e230e863c08b (patch) | |
| tree | c9c8f93ee31a4914cf5395a8df0d478641707b5a | |
| parent | dbfdd61d3aa77ed42f958c8c4ea26e798413367a (diff) | |
| parent | 70a09029b7be8091499aef3ed39a91325d841ec4 (diff) | |
gfs2: Add missing rcu locking for glock lookup
am: 70a09029b7
Change-Id: I936502d0217b7206108e4ff5eb087ff22044da40
| -rw-r--r-- | fs/gfs2/glock.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 32e74710b1aa..9cd8c92b953d 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -651,9 +651,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) @@ -721,15 +723,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); } |
