diff options
Diffstat (limited to 'drivers/block/amiflop.c')
-rw-r--r-- | drivers/block/amiflop.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c index 0fa26359304c..76f114f0bba3 100644 --- a/drivers/block/amiflop.c +++ b/drivers/block/amiflop.c | |||
@@ -1555,10 +1555,13 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) | |||
1555 | int old_dev; | 1555 | int old_dev; |
1556 | unsigned long flags; | 1556 | unsigned long flags; |
1557 | 1557 | ||
1558 | lock_kernel(); | ||
1558 | old_dev = fd_device[drive]; | 1559 | old_dev = fd_device[drive]; |
1559 | 1560 | ||
1560 | if (fd_ref[drive] && old_dev != system) | 1561 | if (fd_ref[drive] && old_dev != system) { |
1562 | unlock_kernel(); | ||
1561 | return -EBUSY; | 1563 | return -EBUSY; |
1564 | } | ||
1562 | 1565 | ||
1563 | if (mode & (FMODE_READ|FMODE_WRITE)) { | 1566 | if (mode & (FMODE_READ|FMODE_WRITE)) { |
1564 | check_disk_change(bdev); | 1567 | check_disk_change(bdev); |
@@ -1571,8 +1574,10 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) | |||
1571 | fd_deselect (drive); | 1574 | fd_deselect (drive); |
1572 | rel_fdc(); | 1575 | rel_fdc(); |
1573 | 1576 | ||
1574 | if (wrprot) | 1577 | if (wrprot) { |
1578 | unlock_kernel(); | ||
1575 | return -EROFS; | 1579 | return -EROFS; |
1580 | } | ||
1576 | } | 1581 | } |
1577 | } | 1582 | } |
1578 | 1583 | ||
@@ -1589,6 +1594,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) | |||
1589 | printk(KERN_INFO "fd%d: accessing %s-disk with %s-layout\n",drive, | 1594 | printk(KERN_INFO "fd%d: accessing %s-disk with %s-layout\n",drive, |
1590 | unit[drive].type->name, data_types[system].name); | 1595 | unit[drive].type->name, data_types[system].name); |
1591 | 1596 | ||
1597 | unlock_kernel(); | ||
1592 | return 0; | 1598 | return 0; |
1593 | } | 1599 | } |
1594 | 1600 | ||
@@ -1597,6 +1603,7 @@ static int floppy_release(struct gendisk *disk, fmode_t mode) | |||
1597 | struct amiga_floppy_struct *p = disk->private_data; | 1603 | struct amiga_floppy_struct *p = disk->private_data; |
1598 | int drive = p - unit; | 1604 | int drive = p - unit; |
1599 | 1605 | ||
1606 | lock_kernel(); | ||
1600 | if (unit[drive].dirty == 1) { | 1607 | if (unit[drive].dirty == 1) { |
1601 | del_timer (flush_track_timer + drive); | 1608 | del_timer (flush_track_timer + drive); |
1602 | non_int_flush_track (drive); | 1609 | non_int_flush_track (drive); |
@@ -1610,6 +1617,7 @@ static int floppy_release(struct gendisk *disk, fmode_t mode) | |||
1610 | /* the mod_use counter is handled this way */ | 1617 | /* the mod_use counter is handled this way */ |
1611 | floppy_off (drive | 0x40000000); | 1618 | floppy_off (drive | 0x40000000); |
1612 | #endif | 1619 | #endif |
1620 | unlock_kernel(); | ||
1613 | return 0; | 1621 | return 0; |
1614 | } | 1622 | } |
1615 | 1623 | ||