@@ -183,6 +183,7 @@ static struct blk_major_name {
183
183
void (* probe )(dev_t devt );
184
184
} * major_names [BLKDEV_MAJOR_HASH_SIZE ];
185
185
static DEFINE_MUTEX (major_names_lock );
186
+ static DEFINE_SPINLOCK (major_names_spinlock );
186
187
187
188
/* index in the above - for now: assume no multimajor ranges */
188
189
static inline int major_to_index (unsigned major )
@@ -195,11 +196,11 @@ void blkdev_show(struct seq_file *seqf, off_t offset)
195
196
{
196
197
struct blk_major_name * dp ;
197
198
198
- mutex_lock ( & major_names_lock );
199
+ spin_lock ( & major_names_spinlock );
199
200
for (dp = major_names [major_to_index (offset )]; dp ; dp = dp -> next )
200
201
if (dp -> major == offset )
201
202
seq_printf (seqf , "%3d %s\n" , dp -> major , dp -> name );
202
- mutex_unlock ( & major_names_lock );
203
+ spin_unlock ( & major_names_spinlock );
203
204
}
204
205
#endif /* CONFIG_PROC_FS */
205
206
@@ -271,6 +272,7 @@ int __register_blkdev(unsigned int major, const char *name,
271
272
p -> next = NULL ;
272
273
index = major_to_index (major );
273
274
275
+ spin_lock (& major_names_spinlock );
274
276
for (n = & major_names [index ]; * n ; n = & (* n )-> next ) {
275
277
if ((* n )-> major == major )
276
278
break ;
@@ -279,6 +281,7 @@ int __register_blkdev(unsigned int major, const char *name,
279
281
* n = p ;
280
282
else
281
283
ret = - EBUSY ;
284
+ spin_unlock (& major_names_spinlock );
282
285
283
286
if (ret < 0 ) {
284
287
printk ("register_blkdev: cannot get major %u for %s\n" ,
@@ -298,6 +301,7 @@ void unregister_blkdev(unsigned int major, const char *name)
298
301
int index = major_to_index (major );
299
302
300
303
mutex_lock (& major_names_lock );
304
+ spin_lock (& major_names_spinlock );
301
305
for (n = & major_names [index ]; * n ; n = & (* n )-> next )
302
306
if ((* n )-> major == major )
303
307
break ;
@@ -307,6 +311,7 @@ void unregister_blkdev(unsigned int major, const char *name)
307
311
p = * n ;
308
312
* n = p -> next ;
309
313
}
314
+ spin_unlock (& major_names_spinlock );
310
315
mutex_unlock (& major_names_lock );
311
316
kfree (p );
312
317
}
0 commit comments