@@ -392,13 +392,25 @@ static int nullb_update_nr_hw_queues(struct nullb_device *dev,
392392static int nullb_apply_submit_queues (struct nullb_device * dev ,
393393 unsigned int submit_queues )
394394{
395- return nullb_update_nr_hw_queues (dev , submit_queues , dev -> poll_queues );
395+ int ret ;
396+
397+ mutex_lock (& lock );
398+ ret = nullb_update_nr_hw_queues (dev , submit_queues , dev -> poll_queues );
399+ mutex_unlock (& lock );
400+
401+ return ret ;
396402}
397403
398404static int nullb_apply_poll_queues (struct nullb_device * dev ,
399405 unsigned int poll_queues )
400406{
401- return nullb_update_nr_hw_queues (dev , dev -> submit_queues , poll_queues );
407+ int ret ;
408+
409+ mutex_lock (& lock );
410+ ret = nullb_update_nr_hw_queues (dev , dev -> submit_queues , poll_queues );
411+ mutex_unlock (& lock );
412+
413+ return ret ;
402414}
403415
404416NULLB_DEVICE_ATTR (size , ulong , NULL );
@@ -444,28 +456,31 @@ static ssize_t nullb_device_power_store(struct config_item *item,
444456 if (ret < 0 )
445457 return ret ;
446458
459+ ret = count ;
460+ mutex_lock (& lock );
447461 if (!dev -> power && newp ) {
448462 if (test_and_set_bit (NULLB_DEV_FL_UP , & dev -> flags ))
449- return count ;
463+ goto out ;
464+
450465 ret = null_add_dev (dev );
451466 if (ret ) {
452467 clear_bit (NULLB_DEV_FL_UP , & dev -> flags );
453- return ret ;
468+ goto out ;
454469 }
455470
456471 set_bit (NULLB_DEV_FL_CONFIGURED , & dev -> flags );
457472 dev -> power = newp ;
458473 } else if (dev -> power && !newp ) {
459474 if (test_and_clear_bit (NULLB_DEV_FL_UP , & dev -> flags )) {
460- mutex_lock (& lock );
461475 dev -> power = newp ;
462476 null_del_dev (dev -> nullb );
463- mutex_unlock (& lock );
464477 }
465478 clear_bit (NULLB_DEV_FL_CONFIGURED , & dev -> flags );
466479 }
467480
468- return count ;
481+ out :
482+ mutex_unlock (& lock );
483+ return ret ;
469484}
470485
471486CONFIGFS_ATTR (nullb_device_ , power );
@@ -2153,15 +2168,12 @@ static int null_add_dev(struct nullb_device *dev)
21532168 nullb -> q -> queuedata = nullb ;
21542169 blk_queue_flag_set (QUEUE_FLAG_NONROT , nullb -> q );
21552170
2156- mutex_lock (& lock );
21572171 rv = ida_alloc (& nullb_indexes , GFP_KERNEL );
2158- if (rv < 0 ) {
2159- mutex_unlock (& lock );
2172+ if (rv < 0 )
21602173 goto out_cleanup_zone ;
2161- }
2174+
21622175 nullb -> index = rv ;
21632176 dev -> index = rv ;
2164- mutex_unlock (& lock );
21652177
21662178 blk_queue_logical_block_size (nullb -> q , dev -> blocksize );
21672179 blk_queue_physical_block_size (nullb -> q , dev -> blocksize );
@@ -2185,9 +2197,7 @@ static int null_add_dev(struct nullb_device *dev)
21852197 if (rv )
21862198 goto out_ida_free ;
21872199
2188- mutex_lock (& lock );
21892200 list_add_tail (& nullb -> list , & nullb_list );
2190- mutex_unlock (& lock );
21912201
21922202 pr_info ("disk %s created\n" , nullb -> disk_name );
21932203
@@ -2236,7 +2246,9 @@ static int null_create_dev(void)
22362246 if (!dev )
22372247 return - ENOMEM ;
22382248
2249+ mutex_lock (& lock );
22392250 ret = null_add_dev (dev );
2251+ mutex_unlock (& lock );
22402252 if (ret ) {
22412253 null_free_dev (dev );
22422254 return ret ;
0 commit comments