diff options
Diffstat (limited to 'drivers/s390/char/tape_block.c')
-rw-r--r-- | drivers/s390/char/tape_block.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/s390/char/tape_block.c b/drivers/s390/char/tape_block.c index 85cf607fc78f..f0fa9ca5cb2c 100644 --- a/drivers/s390/char/tape_block.c +++ b/drivers/s390/char/tape_block.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <linux/blkdev.h> | 18 | #include <linux/blkdev.h> |
19 | #include <linux/smp_lock.h> | 19 | #include <linux/mutex.h> |
20 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
21 | #include <linux/buffer_head.h> | 21 | #include <linux/buffer_head.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
@@ -45,6 +45,7 @@ | |||
45 | /* | 45 | /* |
46 | * file operation structure for tape block frontend | 46 | * file operation structure for tape block frontend |
47 | */ | 47 | */ |
48 | static DEFINE_MUTEX(tape_block_mutex); | ||
48 | static int tapeblock_open(struct block_device *, fmode_t); | 49 | static int tapeblock_open(struct block_device *, fmode_t); |
49 | static int tapeblock_release(struct gendisk *, fmode_t); | 50 | static int tapeblock_release(struct gendisk *, fmode_t); |
50 | static int tapeblock_medium_changed(struct gendisk *); | 51 | static int tapeblock_medium_changed(struct gendisk *); |
@@ -361,7 +362,7 @@ tapeblock_open(struct block_device *bdev, fmode_t mode) | |||
361 | struct tape_device * device; | 362 | struct tape_device * device; |
362 | int rc; | 363 | int rc; |
363 | 364 | ||
364 | lock_kernel(); | 365 | mutex_lock(&tape_block_mutex); |
365 | device = tape_get_device(disk->private_data); | 366 | device = tape_get_device(disk->private_data); |
366 | 367 | ||
367 | if (device->required_tapemarks) { | 368 | if (device->required_tapemarks) { |
@@ -385,14 +386,14 @@ tapeblock_open(struct block_device *bdev, fmode_t mode) | |||
385 | * is called. | 386 | * is called. |
386 | */ | 387 | */ |
387 | tape_state_set(device, TS_BLKUSE); | 388 | tape_state_set(device, TS_BLKUSE); |
388 | unlock_kernel(); | 389 | mutex_unlock(&tape_block_mutex); |
389 | return 0; | 390 | return 0; |
390 | 391 | ||
391 | release: | 392 | release: |
392 | tape_release(device); | 393 | tape_release(device); |
393 | put_device: | 394 | put_device: |
394 | tape_put_device(device); | 395 | tape_put_device(device); |
395 | unlock_kernel(); | 396 | mutex_unlock(&tape_block_mutex); |
396 | return rc; | 397 | return rc; |
397 | } | 398 | } |
398 | 399 | ||
@@ -407,11 +408,11 @@ tapeblock_release(struct gendisk *disk, fmode_t mode) | |||
407 | { | 408 | { |
408 | struct tape_device *device = disk->private_data; | 409 | struct tape_device *device = disk->private_data; |
409 | 410 | ||
410 | lock_kernel(); | 411 | mutex_lock(&tape_block_mutex); |
411 | tape_state_set(device, TS_IN_USE); | 412 | tape_state_set(device, TS_IN_USE); |
412 | tape_release(device); | 413 | tape_release(device); |
413 | tape_put_device(device); | 414 | tape_put_device(device); |
414 | unlock_kernel(); | 415 | mutex_unlock(&tape_block_mutex); |
415 | 416 | ||
416 | return 0; | 417 | return 0; |
417 | } | 418 | } |