aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/amiflop.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/amiflop.c')
-rw-r--r--drivers/block/amiflop.c12
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