diff options
Diffstat (limited to 'drivers/block/ataflop.c')
-rw-r--r-- | drivers/block/ataflop.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c index 1bb8bfcfdbd9..aceb96476524 100644 --- a/drivers/block/ataflop.c +++ b/drivers/block/ataflop.c | |||
@@ -1850,22 +1850,34 @@ static int floppy_open(struct block_device *bdev, fmode_t mode) | |||
1850 | return 0; | 1850 | return 0; |
1851 | } | 1851 | } |
1852 | 1852 | ||
1853 | static int floppy_unlocked_open(struct block_device *bdev, fmode_t mode) | ||
1854 | { | ||
1855 | int ret; | ||
1856 | |||
1857 | lock_kernel(); | ||
1858 | ret = floppy_open(bdev, mode); | ||
1859 | unlock_kernel(); | ||
1860 | |||
1861 | return ret; | ||
1862 | } | ||
1853 | 1863 | ||
1854 | static int floppy_release(struct gendisk *disk, fmode_t mode) | 1864 | static int floppy_release(struct gendisk *disk, fmode_t mode) |
1855 | { | 1865 | { |
1856 | struct atari_floppy_struct *p = disk->private_data; | 1866 | struct atari_floppy_struct *p = disk->private_data; |
1867 | lock_kernel(); | ||
1857 | if (p->ref < 0) | 1868 | if (p->ref < 0) |
1858 | p->ref = 0; | 1869 | p->ref = 0; |
1859 | else if (!p->ref--) { | 1870 | else if (!p->ref--) { |
1860 | printk(KERN_ERR "floppy_release with fd_ref == 0"); | 1871 | printk(KERN_ERR "floppy_release with fd_ref == 0"); |
1861 | p->ref = 0; | 1872 | p->ref = 0; |
1862 | } | 1873 | } |
1874 | unlock_kernel(); | ||
1863 | return 0; | 1875 | return 0; |
1864 | } | 1876 | } |
1865 | 1877 | ||
1866 | static const struct block_device_operations floppy_fops = { | 1878 | static const struct block_device_operations floppy_fops = { |
1867 | .owner = THIS_MODULE, | 1879 | .owner = THIS_MODULE, |
1868 | .open = floppy_open, | 1880 | .open = floppy_unlocked_open, |
1869 | .release = floppy_release, | 1881 | .release = floppy_release, |
1870 | .ioctl = fd_ioctl, | 1882 | .ioctl = fd_ioctl, |
1871 | .media_changed = check_floppy_change, | 1883 | .media_changed = check_floppy_change, |