2525
2626#include "blk.h"
2727
28- static DEFINE_MUTEX (block_class_lock );
2928static struct kobject * block_depr ;
3029
3130struct bdev_map {
@@ -37,6 +36,7 @@ struct bdev_map {
3736 int (* lock )(dev_t , void * );
3837 void * data ;
3938} * bdev_map [255 ];
39+ static DEFINE_MUTEX (bdev_map_lock );
4040
4141/* for extended dynamic devt allocation, currently only one major is used */
4242#define NR_EXT_DEVT (1 << MINORBITS)
@@ -403,6 +403,7 @@ static struct blk_major_name {
403403 int major ;
404404 char name [16 ];
405405} * major_names [BLKDEV_MAJOR_HASH_SIZE ];
406+ static DEFINE_MUTEX (major_names_lock );
406407
407408/* index in the above - for now: assume no multimajor ranges */
408409static inline int major_to_index (unsigned major )
@@ -415,11 +416,11 @@ void blkdev_show(struct seq_file *seqf, off_t offset)
415416{
416417 struct blk_major_name * dp ;
417418
418- mutex_lock (& block_class_lock );
419+ mutex_lock (& major_names_lock );
419420 for (dp = major_names [major_to_index (offset )]; dp ; dp = dp -> next )
420421 if (dp -> major == offset )
421422 seq_printf (seqf , "%3d %s\n" , dp -> major , dp -> name );
422- mutex_unlock (& block_class_lock );
423+ mutex_unlock (& major_names_lock );
423424}
424425#endif /* CONFIG_PROC_FS */
425426
@@ -448,7 +449,7 @@ int register_blkdev(unsigned int major, const char *name)
448449 struct blk_major_name * * n , * p ;
449450 int index , ret = 0 ;
450451
451- mutex_lock (& block_class_lock );
452+ mutex_lock (& major_names_lock );
452453
453454 /* temporary */
454455 if (major == 0 ) {
@@ -501,7 +502,7 @@ int register_blkdev(unsigned int major, const char *name)
501502 kfree (p );
502503 }
503504out :
504- mutex_unlock (& block_class_lock );
505+ mutex_unlock (& major_names_lock );
505506 return ret ;
506507}
507508
@@ -513,7 +514,7 @@ void unregister_blkdev(unsigned int major, const char *name)
513514 struct blk_major_name * p = NULL ;
514515 int index = major_to_index (major );
515516
516- mutex_lock (& block_class_lock );
517+ mutex_lock (& major_names_lock );
517518 for (n = & major_names [index ]; * n ; n = & (* n )-> next )
518519 if ((* n )-> major == major )
519520 break ;
@@ -523,7 +524,7 @@ void unregister_blkdev(unsigned int major, const char *name)
523524 p = * n ;
524525 * n = p -> next ;
525526 }
526- mutex_unlock (& block_class_lock );
527+ mutex_unlock (& major_names_lock );
527528 kfree (p );
528529}
529530
@@ -674,15 +675,15 @@ void blk_register_region(dev_t devt, unsigned long range, struct module *module,
674675 p -> data = data ;
675676 }
676677
677- mutex_lock (& block_class_lock );
678+ mutex_lock (& bdev_map_lock );
678679 for (i = 0 , p -= n ; i < n ; i ++ , p ++ , index ++ ) {
679680 struct bdev_map * * s = & bdev_map [index % 255 ];
680681 while (* s && (* s )-> range < range )
681682 s = & (* s )-> next ;
682683 p -> next = * s ;
683684 * s = p ;
684685 }
685- mutex_unlock (& block_class_lock );
686+ mutex_unlock (& bdev_map_lock );
686687}
687688EXPORT_SYMBOL (blk_register_region );
688689
@@ -693,7 +694,7 @@ void blk_unregister_region(dev_t devt, unsigned long range)
693694 unsigned i ;
694695 struct bdev_map * found = NULL ;
695696
696- mutex_lock (& block_class_lock );
697+ mutex_lock (& bdev_map_lock );
697698 for (i = 0 ; i < min (n , 255u ); i ++ , index ++ ) {
698699 struct bdev_map * * s ;
699700 for (s = & bdev_map [index % 255 ]; * s ; s = & (* s )-> next ) {
@@ -706,7 +707,7 @@ void blk_unregister_region(dev_t devt, unsigned long range)
706707 }
707708 }
708709 }
709- mutex_unlock (& block_class_lock );
710+ mutex_unlock (& bdev_map_lock );
710711 kfree (found );
711712}
712713EXPORT_SYMBOL (blk_unregister_region );
@@ -1037,7 +1038,7 @@ static struct gendisk *lookup_gendisk(dev_t dev, int *partno)
10371038 unsigned long best = ~0UL ;
10381039
10391040retry :
1040- mutex_lock (& block_class_lock );
1041+ mutex_lock (& bdev_map_lock );
10411042 for (p = bdev_map [MAJOR (dev ) % 255 ]; p ; p = p -> next ) {
10421043 struct kobject * (* probe )(dev_t , int * , void * );
10431044 struct module * owner ;
@@ -1058,15 +1059,15 @@ static struct gendisk *lookup_gendisk(dev_t dev, int *partno)
10581059 module_put (owner );
10591060 continue ;
10601061 }
1061- mutex_unlock (& block_class_lock );
1062+ mutex_unlock (& bdev_map_lock );
10621063 kobj = probe (dev , partno , data );
10631064 /* Currently ->owner protects _only_ ->probe() itself. */
10641065 module_put (owner );
10651066 if (kobj )
10661067 return dev_to_disk (kobj_to_dev (kobj ));
10671068 goto retry ;
10681069 }
1069- mutex_unlock (& block_class_lock );
1070+ mutex_unlock (& bdev_map_lock );
10701071 return NULL ;
10711072}
10721073
0 commit comments