aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/cpqarray.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/cpqarray.c')
-rw-r--r--drivers/block/cpqarray.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
index c459aeea3c0c..28937b661564 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -158,7 +158,7 @@ static int sendcmd(
158 unsigned int blkcnt, 158 unsigned int blkcnt,
159 unsigned int log_unit ); 159 unsigned int log_unit );
160 160
161static int ida_open(struct block_device *bdev, fmode_t mode); 161static int ida_unlocked_open(struct block_device *bdev, fmode_t mode);
162static int ida_release(struct gendisk *disk, fmode_t mode); 162static int ida_release(struct gendisk *disk, fmode_t mode);
163static int ida_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); 163static int ida_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg);
164static int ida_getgeo(struct block_device *bdev, struct hd_geometry *geo); 164static int ida_getgeo(struct block_device *bdev, struct hd_geometry *geo);
@@ -196,7 +196,7 @@ static inline ctlr_info_t *get_host(struct gendisk *disk)
196 196
197static const struct block_device_operations ida_fops = { 197static const struct block_device_operations ida_fops = {
198 .owner = THIS_MODULE, 198 .owner = THIS_MODULE,
199 .open = ida_open, 199 .open = ida_unlocked_open,
200 .release = ida_release, 200 .release = ida_release,
201 .ioctl = ida_ioctl, 201 .ioctl = ida_ioctl,
202 .getgeo = ida_getgeo, 202 .getgeo = ida_getgeo,
@@ -841,13 +841,29 @@ static int ida_open(struct block_device *bdev, fmode_t mode)
841 return 0; 841 return 0;
842} 842}
843 843
844static int ida_unlocked_open(struct block_device *bdev, fmode_t mode)
845{
846 int ret;
847
848 lock_kernel();
849 ret = ida_open(bdev, mode);
850 unlock_kernel();
851
852 return ret;
853}
854
844/* 855/*
845 * Close. Sync first. 856 * Close. Sync first.
846 */ 857 */
847static int ida_release(struct gendisk *disk, fmode_t mode) 858static int ida_release(struct gendisk *disk, fmode_t mode)
848{ 859{
849 ctlr_info_t *host = get_host(disk); 860 ctlr_info_t *host;
861
862 lock_kernel();
863 host = get_host(disk);
850 host->usage_count--; 864 host->usage_count--;
865 unlock_kernel();
866
851 return 0; 867 return 0;
852} 868}
853 869