diff options
| author | Borislav Petkov <petkovbb@googlemail.com> | 2009-10-10 20:25:19 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-10-29 06:09:25 -0400 |
| commit | cbba2fa7b2c512135a5a946ccb112ddf0a1a1b1e (patch) | |
| tree | 685d9ce697de9b30f45241efae171f0a51e2e7f3 /drivers/ide | |
| parent | 3f911a6e6b9c6b485a33a680c4ae29d86d2f2a54 (diff) | |
ide-tape: remove the BKL
Replace the BKL calls in the chrdev_{open,release} interfaces with a
simple sleeping mutex.
Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/ide')
| -rw-r--r-- | drivers/ide/ide-tape.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 58fc920d5c32..6a0e62542167 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
| @@ -221,6 +221,8 @@ typedef struct ide_tape_obj { | |||
| 221 | 221 | ||
| 222 | static DEFINE_MUTEX(idetape_ref_mutex); | 222 | static DEFINE_MUTEX(idetape_ref_mutex); |
| 223 | 223 | ||
| 224 | static DEFINE_MUTEX(idetape_chrdev_mutex); | ||
| 225 | |||
| 224 | static struct class *idetape_sysfs_class; | 226 | static struct class *idetape_sysfs_class; |
| 225 | 227 | ||
| 226 | static void ide_tape_release(struct device *); | 228 | static void ide_tape_release(struct device *); |
| @@ -1457,10 +1459,11 @@ static int idetape_chrdev_open(struct inode *inode, struct file *filp) | |||
| 1457 | if (i >= MAX_HWIFS * MAX_DRIVES) | 1459 | if (i >= MAX_HWIFS * MAX_DRIVES) |
| 1458 | return -ENXIO; | 1460 | return -ENXIO; |
| 1459 | 1461 | ||
| 1460 | lock_kernel(); | 1462 | mutex_lock(&idetape_chrdev_mutex); |
| 1463 | |||
| 1461 | tape = ide_tape_get(NULL, true, i); | 1464 | tape = ide_tape_get(NULL, true, i); |
| 1462 | if (!tape) { | 1465 | if (!tape) { |
| 1463 | unlock_kernel(); | 1466 | mutex_unlock(&idetape_chrdev_mutex); |
| 1464 | return -ENXIO; | 1467 | return -ENXIO; |
| 1465 | } | 1468 | } |
| 1466 | 1469 | ||
| @@ -1519,12 +1522,15 @@ static int idetape_chrdev_open(struct inode *inode, struct file *filp) | |||
| 1519 | tape->door_locked = DOOR_LOCKED; | 1522 | tape->door_locked = DOOR_LOCKED; |
| 1520 | } | 1523 | } |
| 1521 | } | 1524 | } |
| 1522 | unlock_kernel(); | 1525 | mutex_unlock(&idetape_chrdev_mutex); |
| 1526 | |||
| 1523 | return 0; | 1527 | return 0; |
| 1524 | 1528 | ||
| 1525 | out_put_tape: | 1529 | out_put_tape: |
| 1526 | ide_tape_put(tape); | 1530 | ide_tape_put(tape); |
| 1527 | unlock_kernel(); | 1531 | |
| 1532 | mutex_unlock(&idetape_chrdev_mutex); | ||
| 1533 | |||
| 1528 | return retval; | 1534 | return retval; |
| 1529 | } | 1535 | } |
| 1530 | 1536 | ||
| @@ -1551,7 +1557,8 @@ static int idetape_chrdev_release(struct inode *inode, struct file *filp) | |||
| 1551 | ide_drive_t *drive = tape->drive; | 1557 | ide_drive_t *drive = tape->drive; |
| 1552 | unsigned int minor = iminor(inode); | 1558 | unsigned int minor = iminor(inode); |
| 1553 | 1559 | ||
| 1554 | lock_kernel(); | 1560 | mutex_lock(&idetape_chrdev_mutex); |
| 1561 | |||
| 1555 | tape = drive->driver_data; | 1562 | tape = drive->driver_data; |
| 1556 | 1563 | ||
| 1557 | ide_debug_log(IDE_DBG_FUNC, "enter"); | 1564 | ide_debug_log(IDE_DBG_FUNC, "enter"); |
| @@ -1575,7 +1582,9 @@ static int idetape_chrdev_release(struct inode *inode, struct file *filp) | |||
| 1575 | } | 1582 | } |
| 1576 | clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags); | 1583 | clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags); |
| 1577 | ide_tape_put(tape); | 1584 | ide_tape_put(tape); |
| 1578 | unlock_kernel(); | 1585 | |
| 1586 | mutex_unlock(&idetape_chrdev_mutex); | ||
| 1587 | |||
| 1579 | return 0; | 1588 | return 0; |
| 1580 | } | 1589 | } |
| 1581 | 1590 | ||
