@@ -79,7 +79,6 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM);
79
79
CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_DVD_RAM|CDC_GENERIC_PACKET| \
80
80
CDC_MRW|CDC_MRW_W|CDC_RAM)
81
81
82
- static DEFINE_MUTEX (sr_mutex );
83
82
static int sr_probe (struct device * );
84
83
static int sr_remove (struct device * );
85
84
static blk_status_t sr_init_command (struct scsi_cmnd * SCpnt );
@@ -536,9 +535,9 @@ static int sr_block_open(struct block_device *bdev, fmode_t mode)
536
535
scsi_autopm_get_device (sdev );
537
536
check_disk_change (bdev );
538
537
539
- mutex_lock (& sr_mutex );
538
+ mutex_lock (& cd -> lock );
540
539
ret = cdrom_open (& cd -> cdi , bdev , mode );
541
- mutex_unlock (& sr_mutex );
540
+ mutex_unlock (& cd -> lock );
542
541
543
542
scsi_autopm_put_device (sdev );
544
543
if (ret )
@@ -551,10 +550,10 @@ static int sr_block_open(struct block_device *bdev, fmode_t mode)
551
550
static void sr_block_release (struct gendisk * disk , fmode_t mode )
552
551
{
553
552
struct scsi_cd * cd = scsi_cd (disk );
554
- mutex_lock (& sr_mutex );
553
+ mutex_lock (& cd -> lock );
555
554
cdrom_release (& cd -> cdi , mode );
556
555
scsi_cd_put (cd );
557
- mutex_unlock (& sr_mutex );
556
+ mutex_unlock (& cd -> lock );
558
557
}
559
558
560
559
static int sr_block_ioctl (struct block_device * bdev , fmode_t mode , unsigned cmd ,
@@ -565,7 +564,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
565
564
void __user * argp = (void __user * )arg ;
566
565
int ret ;
567
566
568
- mutex_lock (& sr_mutex );
567
+ mutex_lock (& cd -> lock );
569
568
570
569
ret = scsi_ioctl_block_when_processing_errors (sdev , cmd ,
571
570
(mode & FMODE_NDELAY ) != 0 );
@@ -595,7 +594,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
595
594
scsi_autopm_put_device (sdev );
596
595
597
596
out :
598
- mutex_unlock (& sr_mutex );
597
+ mutex_unlock (& cd -> lock );
599
598
return ret ;
600
599
}
601
600
@@ -608,7 +607,7 @@ static int sr_block_compat_ioctl(struct block_device *bdev, fmode_t mode, unsign
608
607
void __user * argp = compat_ptr (arg );
609
608
int ret ;
610
609
611
- mutex_lock (& sr_mutex );
610
+ mutex_lock (& cd -> lock );
612
611
613
612
ret = scsi_ioctl_block_when_processing_errors (sdev , cmd ,
614
613
(mode & FMODE_NDELAY ) != 0 );
@@ -638,7 +637,7 @@ static int sr_block_compat_ioctl(struct block_device *bdev, fmode_t mode, unsign
638
637
scsi_autopm_put_device (sdev );
639
638
640
639
out :
641
- mutex_unlock (& sr_mutex );
640
+ mutex_unlock (& cd -> lock );
642
641
return ret ;
643
642
644
643
}
@@ -745,6 +744,7 @@ static int sr_probe(struct device *dev)
745
744
disk = alloc_disk (1 );
746
745
if (!disk )
747
746
goto fail_free ;
747
+ mutex_init (& cd -> lock );
748
748
749
749
spin_lock (& sr_index_lock );
750
750
minor = find_first_zero_bit (sr_index_bits , SR_DISKS );
@@ -1055,6 +1055,8 @@ static void sr_kref_release(struct kref *kref)
1055
1055
1056
1056
put_disk (disk );
1057
1057
1058
+ mutex_destroy (& cd -> lock );
1059
+
1058
1060
kfree (cd );
1059
1061
}
1060
1062
0 commit comments