···224224 if (dev->blkdev) {225225 invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping,226226 0, -1);227227- close_bdev_excl(dev->blkdev);227227+ close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);228228 }229229230230 kfree(dev);···246246 return NULL;247247248248 /* Get a handle on the device */249249- bdev = open_bdev_excl(devname, O_RDWR, NULL);249249+ bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, NULL);250250#ifndef MODULE251251 if (IS_ERR(bdev)) {252252
+11-13
fs/block_dev.c
···13091309EXPORT_SYMBOL(lookup_bdev);1310131013111311/**13121312- * open_bdev_excl - open a block device by name and set it up for use13121312+ * open_bdev_exclusive - open a block device by name and set it up for use13131313 *13141314 * @path: special file representing the block device13151315- * @flags: %MS_RDONLY for opening read-only13151315+ * @mode: FMODE_... combination to pass be used13161316 * @holder: owner for exclusion13171317 *13181318 * Open the blockdevice described by the special file at @path, claim it13191319 * for the @holder.13201320 */13211321-struct block_device *open_bdev_excl(const char *path, int flags, void *holder)13211321+struct block_device *open_bdev_exclusive(const char *path, fmode_t mode, void *holder)13221322{13231323 struct block_device *bdev;13241324- fmode_t mode = FMODE_READ;13251324 int error = 0;1326132513271326 bdev = lookup_bdev(path);13281327 if (IS_ERR(bdev))13291328 return bdev;1330132913311331- if (!(flags & MS_RDONLY))13321332- mode |= FMODE_WRITE;13331330 error = blkdev_get(bdev, mode, 0);13341331 if (error)13351332 return ERR_PTR(error);13361333 error = -EACCES;13371337- if (!(flags & MS_RDONLY) && bdev_read_only(bdev))13341334+ if ((mode & FMODE_WRITE) && bdev_read_only(bdev))13381335 goto blkdev_put;13391336 error = bd_claim(bdev, holder);13401337 if (error)···13441347 return ERR_PTR(error);13451348}1346134913471347-EXPORT_SYMBOL(open_bdev_excl);13501350+EXPORT_SYMBOL(open_bdev_exclusive);1348135113491352/**13501350- * close_bdev_excl - release a blockdevice openen by open_bdev_excl()13531353+ * close_bdev_exclusive - close a blockdevice opened by open_bdev_exclusive()13511354 *13521355 * @bdev: blockdevice to close13561356+ * @mode: mode, must match that used to open.13531357 *13541354- * This is the counterpart to open_bdev_excl().13581358+ * This is the counterpart to open_bdev_exclusive().13551359 */13561356-void close_bdev_excl(struct block_device *bdev)13601360+void close_bdev_exclusive(struct block_device *bdev, fmode_t mode)13571361{13581362 bd_release(bdev);13591359- blkdev_put(bdev, 0); /* move up in the next patches */13631363+ blkdev_put(bdev, mode);13601364}1361136513621362-EXPORT_SYMBOL(close_bdev_excl);13661366+EXPORT_SYMBOL(close_bdev_exclusive);1363136713641368int __invalidate_device(struct block_device *bdev)13651369{