@@ -383,6 +383,7 @@ static struct blk_major_name {
383
383
void (* probe )(dev_t devt );
384
384
} * major_names [BLKDEV_MAJOR_HASH_SIZE ];
385
385
static DEFINE_MUTEX (major_names_lock );
386
+ static DEFINE_SPINLOCK (major_names_spinlock );
386
387
387
388
/* index in the above - for now: assume no multimajor ranges */
388
389
static inline int major_to_index (unsigned major )
@@ -395,11 +396,11 @@ void blkdev_show(struct seq_file *seqf, off_t offset)
395
396
{
396
397
struct blk_major_name * dp ;
397
398
398
- mutex_lock ( & major_names_lock );
399
+ spin_lock ( & major_names_spinlock );
399
400
for (dp = major_names [major_to_index (offset )]; dp ; dp = dp -> next )
400
401
if (dp -> major == offset )
401
402
seq_printf (seqf , "%3d %s\n" , dp -> major , dp -> name );
402
- mutex_unlock ( & major_names_lock );
403
+ spin_unlock ( & major_names_spinlock );
403
404
}
404
405
#endif /* CONFIG_PROC_FS */
405
406
@@ -471,6 +472,7 @@ int __register_blkdev(unsigned int major, const char *name,
471
472
p -> next = NULL ;
472
473
index = major_to_index (major );
473
474
475
+ spin_lock (& major_names_spinlock );
474
476
for (n = & major_names [index ]; * n ; n = & (* n )-> next ) {
475
477
if ((* n )-> major == major )
476
478
break ;
@@ -479,6 +481,7 @@ int __register_blkdev(unsigned int major, const char *name,
479
481
* n = p ;
480
482
else
481
483
ret = - EBUSY ;
484
+ spin_unlock (& major_names_spinlock );
482
485
483
486
if (ret < 0 ) {
484
487
printk ("register_blkdev: cannot get major %u for %s\n" ,
@@ -498,6 +501,7 @@ void unregister_blkdev(unsigned int major, const char *name)
498
501
int index = major_to_index (major );
499
502
500
503
mutex_lock (& major_names_lock );
504
+ spin_lock (& major_names_spinlock );
501
505
for (n = & major_names [index ]; * n ; n = & (* n )-> next )
502
506
if ((* n )-> major == major )
503
507
break ;
@@ -507,6 +511,7 @@ void unregister_blkdev(unsigned int major, const char *name)
507
511
p = * n ;
508
512
* n = p -> next ;
509
513
}
514
+ spin_unlock (& major_names_spinlock );
510
515
mutex_unlock (& major_names_lock );
511
516
kfree (p );
512
517
}
0 commit comments