|
@@ -106,6 +106,7 @@ struct block_device_context {
|
|
|
int users;
|
|
|
};
|
|
|
|
|
|
+static DEFINE_MUTEX(blkvsc_mutex);
|
|
|
|
|
|
static const char *g_blk_driver_name = "blkvsc";
|
|
|
|
|
@@ -251,13 +252,34 @@ static unsigned int blkvsc_check_events(struct gendisk *gd,
|
|
|
}
|
|
|
|
|
|
|
|
|
+static int blkvsc_open(struct block_device *bdev, fmode_t mode)
|
|
|
+{
|
|
|
+ struct block_device_context *blkdev = bdev->bd_disk->private_data;
|
|
|
+
|
|
|
+ DPRINT_DBG(BLKVSC_DRV, "- users %d disk %s\n", blkdev->users,
|
|
|
+ blkdev->gd->disk_name);
|
|
|
+
|
|
|
+ mutex_lock(&blkvsc_mutex);
|
|
|
+ spin_lock(&blkdev->lock);
|
|
|
+
|
|
|
+ if (!blkdev->users && blkdev->device_type == DVD_TYPE) {
|
|
|
+ spin_unlock(&blkdev->lock);
|
|
|
+ check_disk_change(bdev);
|
|
|
+ spin_lock(&blkdev->lock);
|
|
|
+ }
|
|
|
+
|
|
|
+ blkdev->users++;
|
|
|
+
|
|
|
+ spin_unlock(&blkdev->lock);
|
|
|
+ mutex_unlock(&blkvsc_mutex);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/* Static decl */
|
|
|
-static DEFINE_MUTEX(blkvsc_mutex);
|
|
|
static int blkvsc_probe(struct device *dev);
|
|
|
static int blkvsc_remove(struct device *device);
|
|
|
static void blkvsc_shutdown(struct device *device);
|
|
|
|
|
|
-static int blkvsc_open(struct block_device *bdev, fmode_t mode);
|
|
|
static int blkvsc_release(struct gendisk *disk, fmode_t mode);
|
|
|
static int blkvsc_revalidate_disk(struct gendisk *gd);
|
|
|
static int blkvsc_getgeo(struct block_device *bd, struct hd_geometry *hg);
|
|
@@ -1368,29 +1390,6 @@ static void blkvsc_request(struct request_queue *queue)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static int blkvsc_open(struct block_device *bdev, fmode_t mode)
|
|
|
-{
|
|
|
- struct block_device_context *blkdev = bdev->bd_disk->private_data;
|
|
|
-
|
|
|
- DPRINT_DBG(BLKVSC_DRV, "- users %d disk %s\n", blkdev->users,
|
|
|
- blkdev->gd->disk_name);
|
|
|
-
|
|
|
- mutex_lock(&blkvsc_mutex);
|
|
|
- spin_lock(&blkdev->lock);
|
|
|
-
|
|
|
- if (!blkdev->users && blkdev->device_type == DVD_TYPE) {
|
|
|
- spin_unlock(&blkdev->lock);
|
|
|
- check_disk_change(bdev);
|
|
|
- spin_lock(&blkdev->lock);
|
|
|
- }
|
|
|
-
|
|
|
- blkdev->users++;
|
|
|
-
|
|
|
- spin_unlock(&blkdev->lock);
|
|
|
- mutex_unlock(&blkvsc_mutex);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int blkvsc_release(struct gendisk *disk, fmode_t mode)
|
|
|
{
|
|
|
struct block_device_context *blkdev = disk->private_data;
|