diff options
-rw-r--r-- | net/sunrpc/auth_gss/gss_mech_switch.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/net/sunrpc/auth_gss/gss_mech_switch.c b/net/sunrpc/auth_gss/gss_mech_switch.c index 5fec3abbe19b..16ac0f4cb7d8 100644 --- a/net/sunrpc/auth_gss/gss_mech_switch.c +++ b/net/sunrpc/auth_gss/gss_mech_switch.c | |||
@@ -117,7 +117,7 @@ int gss_mech_register(struct gss_api_mech *gm) | |||
117 | if (status) | 117 | if (status) |
118 | return status; | 118 | return status; |
119 | spin_lock(®istered_mechs_lock); | 119 | spin_lock(®istered_mechs_lock); |
120 | list_add(&gm->gm_list, ®istered_mechs); | 120 | list_add_rcu(&gm->gm_list, ®istered_mechs); |
121 | spin_unlock(®istered_mechs_lock); | 121 | spin_unlock(®istered_mechs_lock); |
122 | dprintk("RPC: registered gss mechanism %s\n", gm->gm_name); | 122 | dprintk("RPC: registered gss mechanism %s\n", gm->gm_name); |
123 | return 0; | 123 | return 0; |
@@ -132,7 +132,7 @@ EXPORT_SYMBOL_GPL(gss_mech_register); | |||
132 | void gss_mech_unregister(struct gss_api_mech *gm) | 132 | void gss_mech_unregister(struct gss_api_mech *gm) |
133 | { | 133 | { |
134 | spin_lock(®istered_mechs_lock); | 134 | spin_lock(®istered_mechs_lock); |
135 | list_del(&gm->gm_list); | 135 | list_del_rcu(&gm->gm_list); |
136 | spin_unlock(®istered_mechs_lock); | 136 | spin_unlock(®istered_mechs_lock); |
137 | dprintk("RPC: unregistered gss mechanism %s\n", gm->gm_name); | 137 | dprintk("RPC: unregistered gss mechanism %s\n", gm->gm_name); |
138 | gss_mech_free(gm); | 138 | gss_mech_free(gm); |
@@ -151,15 +151,15 @@ _gss_mech_get_by_name(const char *name) | |||
151 | { | 151 | { |
152 | struct gss_api_mech *pos, *gm = NULL; | 152 | struct gss_api_mech *pos, *gm = NULL; |
153 | 153 | ||
154 | spin_lock(®istered_mechs_lock); | 154 | rcu_read_lock(); |
155 | list_for_each_entry(pos, ®istered_mechs, gm_list) { | 155 | list_for_each_entry_rcu(pos, ®istered_mechs, gm_list) { |
156 | if (0 == strcmp(name, pos->gm_name)) { | 156 | if (0 == strcmp(name, pos->gm_name)) { |
157 | if (try_module_get(pos->gm_owner)) | 157 | if (try_module_get(pos->gm_owner)) |
158 | gm = pos; | 158 | gm = pos; |
159 | break; | 159 | break; |
160 | } | 160 | } |
161 | } | 161 | } |
162 | spin_unlock(®istered_mechs_lock); | 162 | rcu_read_unlock(); |
163 | return gm; | 163 | return gm; |
164 | 164 | ||
165 | } | 165 | } |
@@ -186,8 +186,8 @@ struct gss_api_mech *gss_mech_get_by_OID(struct rpcsec_gss_oid *obj) | |||
186 | dprintk("RPC: %s(%s)\n", __func__, buf); | 186 | dprintk("RPC: %s(%s)\n", __func__, buf); |
187 | request_module("rpc-auth-gss-%s", buf); | 187 | request_module("rpc-auth-gss-%s", buf); |
188 | 188 | ||
189 | spin_lock(®istered_mechs_lock); | 189 | rcu_read_lock(); |
190 | list_for_each_entry(pos, ®istered_mechs, gm_list) { | 190 | list_for_each_entry_rcu(pos, ®istered_mechs, gm_list) { |
191 | if (obj->len == pos->gm_oid.len) { | 191 | if (obj->len == pos->gm_oid.len) { |
192 | if (0 == memcmp(obj->data, pos->gm_oid.data, obj->len)) { | 192 | if (0 == memcmp(obj->data, pos->gm_oid.data, obj->len)) { |
193 | if (try_module_get(pos->gm_owner)) | 193 | if (try_module_get(pos->gm_owner)) |
@@ -196,7 +196,7 @@ struct gss_api_mech *gss_mech_get_by_OID(struct rpcsec_gss_oid *obj) | |||
196 | } | 196 | } |
197 | } | 197 | } |
198 | } | 198 | } |
199 | spin_unlock(®istered_mechs_lock); | 199 | rcu_read_unlock(); |
200 | return gm; | 200 | return gm; |
201 | } | 201 | } |
202 | 202 | ||
@@ -216,15 +216,15 @@ static struct gss_api_mech *_gss_mech_get_by_pseudoflavor(u32 pseudoflavor) | |||
216 | { | 216 | { |
217 | struct gss_api_mech *gm = NULL, *pos; | 217 | struct gss_api_mech *gm = NULL, *pos; |
218 | 218 | ||
219 | spin_lock(®istered_mechs_lock); | 219 | rcu_read_lock(); |
220 | list_for_each_entry(pos, ®istered_mechs, gm_list) { | 220 | list_for_each_entry_rcu(pos, ®istered_mechs, gm_list) { |
221 | if (!mech_supports_pseudoflavor(pos, pseudoflavor)) | 221 | if (!mech_supports_pseudoflavor(pos, pseudoflavor)) |
222 | continue; | 222 | continue; |
223 | if (try_module_get(pos->gm_owner)) | 223 | if (try_module_get(pos->gm_owner)) |
224 | gm = pos; | 224 | gm = pos; |
225 | break; | 225 | break; |
226 | } | 226 | } |
227 | spin_unlock(®istered_mechs_lock); | 227 | rcu_read_unlock(); |
228 | return gm; | 228 | return gm; |
229 | } | 229 | } |
230 | 230 | ||
@@ -257,8 +257,8 @@ int gss_mech_list_pseudoflavors(rpc_authflavor_t *array_ptr, int size) | |||
257 | struct gss_api_mech *pos = NULL; | 257 | struct gss_api_mech *pos = NULL; |
258 | int j, i = 0; | 258 | int j, i = 0; |
259 | 259 | ||
260 | spin_lock(®istered_mechs_lock); | 260 | rcu_read_lock(); |
261 | list_for_each_entry(pos, ®istered_mechs, gm_list) { | 261 | list_for_each_entry_rcu(pos, ®istered_mechs, gm_list) { |
262 | for (j = 0; j < pos->gm_pf_num; j++) { | 262 | for (j = 0; j < pos->gm_pf_num; j++) { |
263 | if (i >= size) { | 263 | if (i >= size) { |
264 | spin_unlock(®istered_mechs_lock); | 264 | spin_unlock(®istered_mechs_lock); |
@@ -267,7 +267,7 @@ int gss_mech_list_pseudoflavors(rpc_authflavor_t *array_ptr, int size) | |||
267 | array_ptr[i++] = pos->gm_pfs[j].pseudoflavor; | 267 | array_ptr[i++] = pos->gm_pfs[j].pseudoflavor; |
268 | } | 268 | } |
269 | } | 269 | } |
270 | spin_unlock(®istered_mechs_lock); | 270 | rcu_read_unlock(); |
271 | return i; | 271 | return i; |
272 | } | 272 | } |
273 | 273 | ||