@@ -117,7 +117,7 @@ int gss_mech_register(struct gss_api_mech *gm)
117
117
if (status )
118
118
return status ;
119
119
spin_lock (& registered_mechs_lock );
120
- list_add (& gm -> gm_list , & registered_mechs );
120
+ list_add_rcu (& gm -> gm_list , & registered_mechs );
121
121
spin_unlock (& registered_mechs_lock );
122
122
dprintk ("RPC: registered gss mechanism %s\n" , gm -> gm_name );
123
123
return 0 ;
@@ -132,7 +132,7 @@ EXPORT_SYMBOL_GPL(gss_mech_register);
132
132
void gss_mech_unregister (struct gss_api_mech * gm )
133
133
{
134
134
spin_lock (& registered_mechs_lock );
135
- list_del (& gm -> gm_list );
135
+ list_del_rcu (& gm -> gm_list );
136
136
spin_unlock (& registered_mechs_lock );
137
137
dprintk ("RPC: unregistered gss mechanism %s\n" , gm -> gm_name );
138
138
gss_mech_free (gm );
@@ -151,15 +151,15 @@ _gss_mech_get_by_name(const char *name)
151
151
{
152
152
struct gss_api_mech * pos , * gm = NULL ;
153
153
154
- spin_lock ( & registered_mechs_lock );
155
- list_for_each_entry (pos , & registered_mechs , gm_list ) {
154
+ rcu_read_lock ( );
155
+ list_for_each_entry_rcu (pos , & registered_mechs , gm_list ) {
156
156
if (0 == strcmp (name , pos -> gm_name )) {
157
157
if (try_module_get (pos -> gm_owner ))
158
158
gm = pos ;
159
159
break ;
160
160
}
161
161
}
162
- spin_unlock ( & registered_mechs_lock );
162
+ rcu_read_unlock ( );
163
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
186
dprintk ("RPC: %s(%s)\n" , __func__ , buf );
187
187
request_module ("rpc-auth-gss-%s" , buf );
188
188
189
- spin_lock ( & registered_mechs_lock );
190
- list_for_each_entry (pos , & registered_mechs , gm_list ) {
189
+ rcu_read_lock ( );
190
+ list_for_each_entry_rcu (pos , & registered_mechs , gm_list ) {
191
191
if (obj -> len == pos -> gm_oid .len ) {
192
192
if (0 == memcmp (obj -> data , pos -> gm_oid .data , obj -> len )) {
193
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 ( & registered_mechs_lock );
199
+ rcu_read_unlock ( );
200
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
217
struct gss_api_mech * gm = NULL , * pos ;
218
218
219
- spin_lock ( & registered_mechs_lock );
220
- list_for_each_entry (pos , & registered_mechs , gm_list ) {
219
+ rcu_read_lock ( );
220
+ list_for_each_entry_rcu (pos , & registered_mechs , gm_list ) {
221
221
if (!mech_supports_pseudoflavor (pos , pseudoflavor ))
222
222
continue ;
223
223
if (try_module_get (pos -> gm_owner ))
224
224
gm = pos ;
225
225
break ;
226
226
}
227
- spin_unlock ( & registered_mechs_lock );
227
+ rcu_read_unlock ( );
228
228
return gm ;
229
229
}
230
230
@@ -257,8 +257,8 @@ int gss_mech_list_pseudoflavors(rpc_authflavor_t *array_ptr, int size)
257
257
struct gss_api_mech * pos = NULL ;
258
258
int j , i = 0 ;
259
259
260
- spin_lock ( & registered_mechs_lock );
261
- list_for_each_entry (pos , & registered_mechs , gm_list ) {
260
+ rcu_read_lock ( );
261
+ list_for_each_entry_rcu (pos , & registered_mechs , gm_list ) {
262
262
for (j = 0 ; j < pos -> gm_pf_num ; j ++ ) {
263
263
if (i >= size ) {
264
264
spin_unlock (& registered_mechs_lock );
@@ -267,7 +267,7 @@ int gss_mech_list_pseudoflavors(rpc_authflavor_t *array_ptr, int size)
267
267
array_ptr [i ++ ] = pos -> gm_pfs [j ].pseudoflavor ;
268
268
}
269
269
}
270
- spin_unlock ( & registered_mechs_lock );
270
+ rcu_read_unlock ( );
271
271
return i ;
272
272
}
273
273
0 commit comments