]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
oracleasm: claim FMODE_EXCL access on disk during asm_open
authorSrinivas Eeda <srinivas.eeda@oracle.com>
Sat, 16 Aug 2014 17:04:57 +0000 (10:04 -0700)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Mon, 29 Jun 2015 15:34:53 +0000 (08:34 -0700)
Orabug: 19454829

asm_open_disk should take exclusive access on asm disk during open to
prevent it from getting deleted while in use.

Signed-off-by: Srinivas Eeda <srinivas.eeda@oracle.com>
Signed-off-by: Guangyu Sun <guangyu.sun@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/block/oracleasm/driver.c

index f56799333ca7d691b82914332010e3dbdf30b92b..5c9e86dd06131721a54a7e99c67124e98a0d8ea0 100644 (file)
@@ -333,7 +333,7 @@ static void asmdisk_evict_inode(struct inode *inode)
                mlog(ML_DISK,
                     "Releasing disk 0x%p (bdev 0x%p, dev %X)\n",
                     d, d->d_bdev, d->d_bdev->bd_dev);
-               blkdev_put(d->d_bdev, FMODE_WRITE | FMODE_READ);
+               blkdev_put(d->d_bdev, FMODE_WRITE | FMODE_READ | FMODE_EXCL);
                d->d_bdev = NULL;
        }
 
@@ -720,7 +720,7 @@ static int asm_open_disk(struct file *file, struct block_device *bdev)
 
        mlog_entry("(0x%p, 0x%p)\n", file, bdev);
 
-       ret = blkdev_get(bdev, FMODE_WRITE | FMODE_READ, inode->i_sb);
+       ret = blkdev_get(bdev, FMODE_WRITE | FMODE_READ | FMODE_EXCL, inode->i_sb);
        if (ret)
                goto out;
 
@@ -772,7 +772,7 @@ static int asm_open_disk(struct file *file, struct block_device *bdev)
                mlog(ML_DISK,
                     "Open of disk 0x%p (bdev 0x%p, dev %X)\n",
                     d, d->d_bdev, d->d_bdev->bd_dev);
-               blkdev_put(bdev, FMODE_WRITE | FMODE_READ);
+               blkdev_put(bdev, FMODE_WRITE | FMODE_READ | FMODE_EXCL);
        }
 
        h->h_disk = d;
@@ -793,7 +793,7 @@ out_head:
        kfree(h);
 
 out_get:
-       blkdev_put(bdev, FMODE_WRITE | FMODE_READ);
+       blkdev_put(bdev, FMODE_WRITE | FMODE_READ | FMODE_EXCL);
 
 out:
        mlog_exit(ret);