block: replace fmode_t with a block-specific type for block open flags

The only overlap between the block open flags mapped into the fmode_t and
other uses of fmode_t are FMODE_READ and FMODE_WRITE.  Define a new
blk_mode_t instead for use in blkdev_get_by_{dev,path}, ->open and
->ioctl and stop abusing fmode_t.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Jack Wang <jinpu.wang@ionos.com>		[rnbd]
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Link: https://lore.kernel.org/r/20230608110258.189493-28-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Christoph Hellwig 2023-06-08 13:02:55 +02:00 committed by Jens Axboe
parent 5e4ea83467
commit 05bdb99653
82 changed files with 334 additions and 315 deletions

View file

@ -108,9 +108,9 @@ static inline void ubd_set_bit(__u64 bit, unsigned char *data)
static DEFINE_MUTEX(ubd_lock); static DEFINE_MUTEX(ubd_lock);
static DEFINE_MUTEX(ubd_mutex); /* replaces BKL, might not be needed */ static DEFINE_MUTEX(ubd_mutex); /* replaces BKL, might not be needed */
static int ubd_open(struct gendisk *disk, fmode_t mode); static int ubd_open(struct gendisk *disk, blk_mode_t mode);
static void ubd_release(struct gendisk *disk); static void ubd_release(struct gendisk *disk);
static int ubd_ioctl(struct block_device *bdev, fmode_t mode, static int ubd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo); static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo);
@ -1154,7 +1154,7 @@ static int __init ubd_driver_init(void){
device_initcall(ubd_driver_init); device_initcall(ubd_driver_init);
static int ubd_open(struct gendisk *disk, fmode_t mode) static int ubd_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct ubd *ubd_dev = disk->private_data; struct ubd *ubd_dev = disk->private_data;
int err = 0; int err = 0;
@ -1389,7 +1389,7 @@ static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
return 0; return 0;
} }
static int ubd_ioctl(struct block_device *bdev, fmode_t mode, static int ubd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct ubd *ubd_dev = bdev->bd_disk->private_data; struct ubd *ubd_dev = bdev->bd_disk->private_data;

View file

@ -120,7 +120,7 @@ static void simdisk_submit_bio(struct bio *bio)
bio_endio(bio); bio_endio(bio);
} }
static int simdisk_open(struct gendisk *disk, fmode_t mode) static int simdisk_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct simdisk *dev = disk->private_data; struct simdisk *dev = disk->private_data;

View file

@ -93,7 +93,7 @@ EXPORT_SYMBOL(invalidate_bdev);
* Drop all buffers & page cache for given bdev range. This function bails * Drop all buffers & page cache for given bdev range. This function bails
* with error if bdev has other exclusive owner (such as filesystem). * with error if bdev has other exclusive owner (such as filesystem).
*/ */
int truncate_bdev_range(struct block_device *bdev, fmode_t mode, int truncate_bdev_range(struct block_device *bdev, blk_mode_t mode,
loff_t lstart, loff_t lend) loff_t lstart, loff_t lend)
{ {
/* /*
@ -101,14 +101,14 @@ int truncate_bdev_range(struct block_device *bdev, fmode_t mode,
* while we discard the buffer cache to avoid discarding buffers * while we discard the buffer cache to avoid discarding buffers
* under live filesystem. * under live filesystem.
*/ */
if (!(mode & FMODE_EXCL)) { if (!(mode & BLK_OPEN_EXCL)) {
int err = bd_prepare_to_claim(bdev, truncate_bdev_range, NULL); int err = bd_prepare_to_claim(bdev, truncate_bdev_range, NULL);
if (err) if (err)
goto invalidate; goto invalidate;
} }
truncate_inode_pages_range(bdev->bd_inode->i_mapping, lstart, lend); truncate_inode_pages_range(bdev->bd_inode->i_mapping, lstart, lend);
if (!(mode & FMODE_EXCL)) if (!(mode & BLK_OPEN_EXCL))
bd_abort_claiming(bdev, truncate_bdev_range); bd_abort_claiming(bdev, truncate_bdev_range);
return 0; return 0;
@ -647,7 +647,7 @@ static void blkdev_flush_mapping(struct block_device *bdev)
bdev_write_inode(bdev); bdev_write_inode(bdev);
} }
static int blkdev_get_whole(struct block_device *bdev, fmode_t mode) static int blkdev_get_whole(struct block_device *bdev, blk_mode_t mode)
{ {
struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk;
int ret; int ret;
@ -679,7 +679,7 @@ static void blkdev_put_whole(struct block_device *bdev)
bdev->bd_disk->fops->release(bdev->bd_disk); bdev->bd_disk->fops->release(bdev->bd_disk);
} }
static int blkdev_get_part(struct block_device *part, fmode_t mode) static int blkdev_get_part(struct block_device *part, blk_mode_t mode)
{ {
struct gendisk *disk = part->bd_disk; struct gendisk *disk = part->bd_disk;
int ret; int ret;
@ -747,7 +747,7 @@ void blkdev_put_no_open(struct block_device *bdev)
/** /**
* blkdev_get_by_dev - open a block device by device number * blkdev_get_by_dev - open a block device by device number
* @dev: device number of block device to open * @dev: device number of block device to open
* @mode: FMODE_* mask * @mode: open mode (BLK_OPEN_*)
* @holder: exclusive holder identifier * @holder: exclusive holder identifier
* @hops: holder operations * @hops: holder operations
* *
@ -765,7 +765,7 @@ void blkdev_put_no_open(struct block_device *bdev)
* RETURNS: * RETURNS:
* Reference to the block_device on success, ERR_PTR(-errno) on failure. * Reference to the block_device on success, ERR_PTR(-errno) on failure.
*/ */
struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder, struct block_device *blkdev_get_by_dev(dev_t dev, blk_mode_t mode, void *holder,
const struct blk_holder_ops *hops) const struct blk_holder_ops *hops)
{ {
bool unblock_events = true; bool unblock_events = true;
@ -775,8 +775,8 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder,
ret = devcgroup_check_permission(DEVCG_DEV_BLOCK, ret = devcgroup_check_permission(DEVCG_DEV_BLOCK,
MAJOR(dev), MINOR(dev), MAJOR(dev), MINOR(dev),
((mode & FMODE_READ) ? DEVCG_ACC_READ : 0) | ((mode & BLK_OPEN_READ) ? DEVCG_ACC_READ : 0) |
((mode & FMODE_WRITE) ? DEVCG_ACC_WRITE : 0)); ((mode & BLK_OPEN_WRITE) ? DEVCG_ACC_WRITE : 0));
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
@ -786,12 +786,12 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder,
disk = bdev->bd_disk; disk = bdev->bd_disk;
if (holder) { if (holder) {
mode |= FMODE_EXCL; mode |= BLK_OPEN_EXCL;
ret = bd_prepare_to_claim(bdev, holder, hops); ret = bd_prepare_to_claim(bdev, holder, hops);
if (ret) if (ret)
goto put_blkdev; goto put_blkdev;
} else { } else {
if (WARN_ON_ONCE(mode & FMODE_EXCL)) { if (WARN_ON_ONCE(mode & BLK_OPEN_EXCL)) {
ret = -EIO; ret = -EIO;
goto put_blkdev; goto put_blkdev;
} }
@ -821,7 +821,7 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder,
* writeable reference is too fragile given the way @mode is * writeable reference is too fragile given the way @mode is
* used in blkdev_get/put(). * used in blkdev_get/put().
*/ */
if ((mode & FMODE_WRITE) && !bdev->bd_write_holder && if ((mode & BLK_OPEN_WRITE) && !bdev->bd_write_holder &&
(disk->event_flags & DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE)) { (disk->event_flags & DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE)) {
bdev->bd_write_holder = true; bdev->bd_write_holder = true;
unblock_events = false; unblock_events = false;
@ -848,7 +848,7 @@ EXPORT_SYMBOL(blkdev_get_by_dev);
/** /**
* blkdev_get_by_path - open a block device by name * blkdev_get_by_path - open a block device by name
* @path: path to the block device to open * @path: path to the block device to open
* @mode: FMODE_* mask * @mode: open mode (BLK_OPEN_*)
* @holder: exclusive holder identifier * @holder: exclusive holder identifier
* *
* Open the block device described by the device file at @path. If @holder is * Open the block device described by the device file at @path. If @holder is
@ -861,7 +861,7 @@ EXPORT_SYMBOL(blkdev_get_by_dev);
* RETURNS: * RETURNS:
* Reference to the block_device on success, ERR_PTR(-errno) on failure. * Reference to the block_device on success, ERR_PTR(-errno) on failure.
*/ */
struct block_device *blkdev_get_by_path(const char *path, fmode_t mode, struct block_device *blkdev_get_by_path(const char *path, blk_mode_t mode,
void *holder, const struct blk_holder_ops *hops) void *holder, const struct blk_holder_ops *hops)
{ {
struct block_device *bdev; struct block_device *bdev;
@ -873,7 +873,7 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
return ERR_PTR(error); return ERR_PTR(error);
bdev = blkdev_get_by_dev(dev, mode, holder, hops); bdev = blkdev_get_by_dev(dev, mode, holder, hops);
if (!IS_ERR(bdev) && (mode & FMODE_WRITE) && bdev_read_only(bdev)) { if (!IS_ERR(bdev) && (mode & BLK_OPEN_WRITE) && bdev_read_only(bdev)) {
blkdev_put(bdev, holder); blkdev_put(bdev, holder);
return ERR_PTR(-EACCES); return ERR_PTR(-EACCES);
} }

View file

@ -356,8 +356,8 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, unsigned int cmd,
return 0; return 0;
} }
static int blkdev_truncate_zone_range(struct block_device *bdev, fmode_t mode, static int blkdev_truncate_zone_range(struct block_device *bdev,
const struct blk_zone_range *zrange) blk_mode_t mode, const struct blk_zone_range *zrange)
{ {
loff_t start, end; loff_t start, end;
@ -376,7 +376,7 @@ static int blkdev_truncate_zone_range(struct block_device *bdev, fmode_t mode,
* BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing. * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing.
* Called from blkdev_ioctl. * Called from blkdev_ioctl.
*/ */
int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, int blkdev_zone_mgmt_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
void __user *argp = (void __user *)arg; void __user *argp = (void __user *)arg;
@ -390,7 +390,7 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,
if (!bdev_is_zoned(bdev)) if (!bdev_is_zoned(bdev))
return -ENOTTY; return -ENOTTY;
if (!(mode & FMODE_WRITE)) if (!(mode & BLK_OPEN_WRITE))
return -EBADF; return -EBADF;
if (copy_from_user(&zrange, argp, sizeof(struct blk_zone_range))) if (copy_from_user(&zrange, argp, sizeof(struct blk_zone_range)))

View file

@ -396,7 +396,7 @@ void disk_free_zone_bitmaps(struct gendisk *disk);
void disk_clear_zone_settings(struct gendisk *disk); void disk_clear_zone_settings(struct gendisk *disk);
int blkdev_report_zones_ioctl(struct block_device *bdev, unsigned int cmd, int blkdev_report_zones_ioctl(struct block_device *bdev, unsigned int cmd,
unsigned long arg); unsigned long arg);
int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, int blkdev_zone_mgmt_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
#else /* CONFIG_BLK_DEV_ZONED */ #else /* CONFIG_BLK_DEV_ZONED */
static inline void disk_free_zone_bitmaps(struct gendisk *disk) {} static inline void disk_free_zone_bitmaps(struct gendisk *disk) {}
@ -407,7 +407,7 @@ static inline int blkdev_report_zones_ioctl(struct block_device *bdev,
return -ENOTTY; return -ENOTTY;
} }
static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev, static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev,
fmode_t mode, unsigned int cmd, unsigned long arg) blk_mode_t mode, unsigned int cmd, unsigned long arg)
{ {
return -ENOTTY; return -ENOTTY;
} }
@ -451,7 +451,7 @@ static inline void bio_release_page(struct bio *bio, struct page *page)
struct request_queue *blk_alloc_queue(int node_id); struct request_queue *blk_alloc_queue(int node_id);
int disk_scan_partitions(struct gendisk *disk, fmode_t mode); int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode);
int disk_alloc_events(struct gendisk *disk); int disk_alloc_events(struct gendisk *disk);
void disk_add_events(struct gendisk *disk); void disk_add_events(struct gendisk *disk);
@ -466,8 +466,9 @@ extern struct device_attribute dev_attr_events_poll_msecs;
extern struct attribute_group blk_trace_attr_group; extern struct attribute_group blk_trace_attr_group;
int truncate_bdev_range(struct block_device *bdev, fmode_t mode, loff_t lstart, blk_mode_t file_to_blk_mode(struct file *file);
loff_t lend); int truncate_bdev_range(struct block_device *bdev, blk_mode_t mode,
loff_t lstart, loff_t lend);
long blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg); long blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg);
long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg); long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg);

View file

@ -470,6 +470,30 @@ static int blkdev_fsync(struct file *filp, loff_t start, loff_t end,
return error; return error;
} }
blk_mode_t file_to_blk_mode(struct file *file)
{
blk_mode_t mode = 0;
if (file->f_mode & FMODE_READ)
mode |= BLK_OPEN_READ;
if (file->f_mode & FMODE_WRITE)
mode |= BLK_OPEN_WRITE;
if (file->f_mode & FMODE_EXCL)
mode |= BLK_OPEN_EXCL;
if (file->f_flags & O_NDELAY)
mode |= BLK_OPEN_NDELAY;
/*
* If all bits in O_ACCMODE set (aka O_RDWR | O_WRONLY), the floppy
* driver has historically allowed ioctls as if the file was opened for
* writing, but does not allow and actual reads or writes.
*/
if ((file->f_flags & O_ACCMODE) == (O_RDWR | O_WRONLY))
mode |= BLK_OPEN_WRITE_IOCTL;
return mode;
}
static int blkdev_open(struct inode *inode, struct file *filp) static int blkdev_open(struct inode *inode, struct file *filp)
{ {
struct block_device *bdev; struct block_device *bdev;
@ -483,14 +507,10 @@ static int blkdev_open(struct inode *inode, struct file *filp)
filp->f_flags |= O_LARGEFILE; filp->f_flags |= O_LARGEFILE;
filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC; filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC;
if (filp->f_flags & O_NDELAY)
filp->f_mode |= FMODE_NDELAY;
if (filp->f_flags & O_EXCL) if (filp->f_flags & O_EXCL)
filp->f_mode |= FMODE_EXCL; filp->f_mode |= FMODE_EXCL;
if ((filp->f_flags & O_ACCMODE) == 3)
filp->f_mode |= FMODE_WRITE_IOCTL;
bdev = blkdev_get_by_dev(inode->i_rdev, filp->f_mode, bdev = blkdev_get_by_dev(inode->i_rdev, file_to_blk_mode(filp),
(filp->f_mode & FMODE_EXCL) ? filp : NULL, (filp->f_mode & FMODE_EXCL) ? filp : NULL,
NULL); NULL);
if (IS_ERR(bdev)) if (IS_ERR(bdev))
@ -648,7 +668,7 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
filemap_invalidate_lock(inode->i_mapping); filemap_invalidate_lock(inode->i_mapping);
/* Invalidate the page cache, including dirty pages. */ /* Invalidate the page cache, including dirty pages. */
error = truncate_bdev_range(bdev, file->f_mode, start, end); error = truncate_bdev_range(bdev, file_to_blk_mode(file), start, end);
if (error) if (error)
goto fail; goto fail;

View file

@ -339,7 +339,7 @@ void disk_uevent(struct gendisk *disk, enum kobject_action action)
} }
EXPORT_SYMBOL_GPL(disk_uevent); EXPORT_SYMBOL_GPL(disk_uevent);
int disk_scan_partitions(struct gendisk *disk, fmode_t mode) int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode)
{ {
struct block_device *bdev; struct block_device *bdev;
int ret = 0; int ret = 0;
@ -357,7 +357,7 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)
* synchronize with other exclusive openers and other partition * synchronize with other exclusive openers and other partition
* scanners. * scanners.
*/ */
if (!(mode & FMODE_EXCL)) { if (!(mode & BLK_OPEN_EXCL)) {
ret = bd_prepare_to_claim(disk->part0, disk_scan_partitions, ret = bd_prepare_to_claim(disk->part0, disk_scan_partitions,
NULL); NULL);
if (ret) if (ret)
@ -377,7 +377,7 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)
* creat partition for underlying disk. * creat partition for underlying disk.
*/ */
clear_bit(GD_NEED_PART_SCAN, &disk->state); clear_bit(GD_NEED_PART_SCAN, &disk->state);
if (!(mode & FMODE_EXCL)) if (!(mode & BLK_OPEN_EXCL))
bd_abort_claiming(disk->part0, disk_scan_partitions); bd_abort_claiming(disk->part0, disk_scan_partitions);
return ret; return ret;
} }
@ -505,7 +505,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
bdev_add(disk->part0, ddev->devt); bdev_add(disk->part0, ddev->devt);
if (get_capacity(disk)) if (get_capacity(disk))
disk_scan_partitions(disk, FMODE_READ); disk_scan_partitions(disk, BLK_OPEN_READ);
/* /*
* Announce the disk and partitions after all partitions are * Announce the disk and partitions after all partitions are

View file

@ -82,7 +82,7 @@ static int compat_blkpg_ioctl(struct block_device *bdev,
} }
#endif #endif
static int blk_ioctl_discard(struct block_device *bdev, fmode_t mode, static int blk_ioctl_discard(struct block_device *bdev, blk_mode_t mode,
unsigned long arg) unsigned long arg)
{ {
uint64_t range[2]; uint64_t range[2];
@ -90,7 +90,7 @@ static int blk_ioctl_discard(struct block_device *bdev, fmode_t mode,
struct inode *inode = bdev->bd_inode; struct inode *inode = bdev->bd_inode;
int err; int err;
if (!(mode & FMODE_WRITE)) if (!(mode & BLK_OPEN_WRITE))
return -EBADF; return -EBADF;
if (!bdev_max_discard_sectors(bdev)) if (!bdev_max_discard_sectors(bdev))
@ -120,14 +120,14 @@ fail:
return err; return err;
} }
static int blk_ioctl_secure_erase(struct block_device *bdev, fmode_t mode, static int blk_ioctl_secure_erase(struct block_device *bdev, blk_mode_t mode,
void __user *argp) void __user *argp)
{ {
uint64_t start, len; uint64_t start, len;
uint64_t range[2]; uint64_t range[2];
int err; int err;
if (!(mode & FMODE_WRITE)) if (!(mode & BLK_OPEN_WRITE))
return -EBADF; return -EBADF;
if (!bdev_max_secure_erase_sectors(bdev)) if (!bdev_max_secure_erase_sectors(bdev))
return -EOPNOTSUPP; return -EOPNOTSUPP;
@ -151,7 +151,7 @@ static int blk_ioctl_secure_erase(struct block_device *bdev, fmode_t mode,
} }
static int blk_ioctl_zeroout(struct block_device *bdev, fmode_t mode, static int blk_ioctl_zeroout(struct block_device *bdev, blk_mode_t mode,
unsigned long arg) unsigned long arg)
{ {
uint64_t range[2]; uint64_t range[2];
@ -159,7 +159,7 @@ static int blk_ioctl_zeroout(struct block_device *bdev, fmode_t mode,
struct inode *inode = bdev->bd_inode; struct inode *inode = bdev->bd_inode;
int err; int err;
if (!(mode & FMODE_WRITE)) if (!(mode & BLK_OPEN_WRITE))
return -EBADF; return -EBADF;
if (copy_from_user(range, (void __user *)arg, sizeof(range))) if (copy_from_user(range, (void __user *)arg, sizeof(range)))
@ -240,7 +240,7 @@ static int compat_put_ulong(compat_ulong_t __user *argp, compat_ulong_t val)
* drivers that implement only commands that are completely compatible * drivers that implement only commands that are completely compatible
* between 32-bit and 64-bit user space * between 32-bit and 64-bit user space
*/ */
int blkdev_compat_ptr_ioctl(struct block_device *bdev, fmode_t mode, int blkdev_compat_ptr_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned cmd, unsigned long arg) unsigned cmd, unsigned long arg)
{ {
struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk;
@ -439,7 +439,7 @@ static int compat_hdio_getgeo(struct block_device *bdev,
#endif #endif
/* set the logical block size */ /* set the logical block size */
static int blkdev_bszset(struct block_device *bdev, fmode_t mode, static int blkdev_bszset(struct block_device *bdev, blk_mode_t mode,
int __user *argp) int __user *argp)
{ {
int ret, n; int ret, n;
@ -451,7 +451,7 @@ static int blkdev_bszset(struct block_device *bdev, fmode_t mode,
if (get_user(n, argp)) if (get_user(n, argp))
return -EFAULT; return -EFAULT;
if (mode & FMODE_EXCL) if (mode & BLK_OPEN_EXCL)
return set_blocksize(bdev, n); return set_blocksize(bdev, n);
if (IS_ERR(blkdev_get_by_dev(bdev->bd_dev, mode, &bdev, NULL))) if (IS_ERR(blkdev_get_by_dev(bdev->bd_dev, mode, &bdev, NULL)))
@ -467,7 +467,7 @@ static int blkdev_bszset(struct block_device *bdev, fmode_t mode,
* user space. Note the separate arg/argp parameters that are needed * user space. Note the separate arg/argp parameters that are needed
* to deal with the compat_ptr() conversion. * to deal with the compat_ptr() conversion.
*/ */
static int blkdev_common_ioctl(struct block_device *bdev, fmode_t mode, static int blkdev_common_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg, unsigned int cmd, unsigned long arg,
void __user *argp) void __user *argp)
{ {
@ -560,18 +560,9 @@ long blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
{ {
struct block_device *bdev = I_BDEV(file->f_mapping->host); struct block_device *bdev = I_BDEV(file->f_mapping->host);
void __user *argp = (void __user *)arg; void __user *argp = (void __user *)arg;
fmode_t mode = file->f_mode; blk_mode_t mode = file_to_blk_mode(file);
int ret; int ret;
/*
* O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have
* to updated it before every ioctl.
*/
if (file->f_flags & O_NDELAY)
mode |= FMODE_NDELAY;
else
mode &= ~FMODE_NDELAY;
switch (cmd) { switch (cmd) {
/* These need separate implementations for the data structure */ /* These need separate implementations for the data structure */
case HDIO_GETGEO: case HDIO_GETGEO:
@ -630,16 +621,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
void __user *argp = compat_ptr(arg); void __user *argp = compat_ptr(arg);
struct block_device *bdev = I_BDEV(file->f_mapping->host); struct block_device *bdev = I_BDEV(file->f_mapping->host);
struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk;
fmode_t mode = file->f_mode; blk_mode_t mode = file_to_blk_mode(file);
/*
* O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have
* to updated it before every ioctl.
*/
if (file->f_flags & O_NDELAY)
mode |= FMODE_NDELAY;
else
mode &= ~FMODE_NDELAY;
switch (cmd) { switch (cmd) {
/* These need separate implementations for the data structure */ /* These need separate implementations for the data structure */

View file

@ -1532,7 +1532,7 @@ static int fd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
return 0; return 0;
} }
static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, static int fd_locked_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
struct amiga_floppy_struct *p = bdev->bd_disk->private_data; struct amiga_floppy_struct *p = bdev->bd_disk->private_data;
@ -1607,7 +1607,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode,
return 0; return 0;
} }
static int fd_ioctl(struct block_device *bdev, fmode_t mode, static int fd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
int ret; int ret;
@ -1654,7 +1654,7 @@ static void fd_probe(int dev)
* /dev/PS0 etc), and disallows simultaneous access to the same * /dev/PS0 etc), and disallows simultaneous access to the same
* drive with different device numbers. * drive with different device numbers.
*/ */
static int floppy_open(struct gendisk *disk, fmode_t mode) static int floppy_open(struct gendisk *disk, blk_mode_t mode)
{ {
int drive = disk->first_minor & 3; int drive = disk->first_minor & 3;
int system = (disk->first_minor & 4) >> 2; int system = (disk->first_minor & 4) >> 2;
@ -1673,10 +1673,9 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
mutex_unlock(&amiflop_mutex); mutex_unlock(&amiflop_mutex);
return -ENXIO; return -ENXIO;
} }
if (mode & (BLK_OPEN_READ | BLK_OPEN_WRITE)) {
if (mode & (FMODE_READ|FMODE_WRITE)) {
disk_check_media_change(disk); disk_check_media_change(disk);
if (mode & FMODE_WRITE) { if (mode & BLK_OPEN_WRITE) {
int wrprot; int wrprot;
get_fdc(drive); get_fdc(drive);
@ -1691,7 +1690,6 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
} }
} }
} }
local_irq_save(flags); local_irq_save(flags);
fd_ref[drive]++; fd_ref[drive]++;
fd_device[drive] = system; fd_device[drive] = system;

View file

@ -204,7 +204,7 @@ aoedisk_rm_debugfs(struct aoedev *d)
} }
static int static int
aoeblk_open(struct gendisk *disk, fmode_t mode) aoeblk_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct aoedev *d = disk->private_data; struct aoedev *d = disk->private_data;
ulong flags; ulong flags;
@ -285,7 +285,7 @@ aoeblk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
} }
static int static int
aoeblk_ioctl(struct block_device *bdev, fmode_t mode, uint cmd, ulong arg) aoeblk_ioctl(struct block_device *bdev, blk_mode_t mode, uint cmd, ulong arg)
{ {
struct aoedev *d; struct aoedev *d;

View file

@ -442,12 +442,12 @@ static void fd_times_out(struct timer_list *unused);
static void finish_fdc( void ); static void finish_fdc( void );
static void finish_fdc_done( int dummy ); static void finish_fdc_done( int dummy );
static void setup_req_params( int drive ); static void setup_req_params( int drive );
static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int static int fd_locked_ioctl(struct block_device *bdev, blk_mode_t mode,
cmd, unsigned long param); unsigned int cmd, unsigned long param);
static void fd_probe( int drive ); static void fd_probe( int drive );
static int fd_test_drive_present( int drive ); static int fd_test_drive_present( int drive );
static void config_types( void ); static void config_types( void );
static int floppy_open(struct gendisk *disk, fmode_t mode); static int floppy_open(struct gendisk *disk, blk_mode_t mode);
static void floppy_release(struct gendisk *disk); static void floppy_release(struct gendisk *disk);
/************************* End of Prototypes **************************/ /************************* End of Prototypes **************************/
@ -1581,7 +1581,7 @@ out:
return BLK_STS_OK; return BLK_STS_OK;
} }
static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, static int fd_locked_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk;
@ -1768,7 +1768,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode,
} }
} }
static int fd_ioctl(struct block_device *bdev, fmode_t mode, static int fd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
int ret; int ret;
@ -1915,7 +1915,7 @@ static void __init config_types( void )
* drive with different device numbers. * drive with different device numbers.
*/ */
static int floppy_open(struct gendisk *disk, fmode_t mode) static int floppy_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct atari_floppy_struct *p = disk->private_data; struct atari_floppy_struct *p = disk->private_data;
int type = disk->first_minor >> 2; int type = disk->first_minor >> 2;
@ -1924,23 +1924,22 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
if (p->ref && p->type != type) if (p->ref && p->type != type)
return -EBUSY; return -EBUSY;
if (p->ref == -1 || (p->ref && mode & FMODE_EXCL)) if (p->ref == -1 || (p->ref && mode & BLK_OPEN_EXCL))
return -EBUSY; return -EBUSY;
if (mode & BLK_OPEN_EXCL)
if (mode & FMODE_EXCL)
p->ref = -1; p->ref = -1;
else else
p->ref++; p->ref++;
p->type = type; p->type = type;
if (mode & FMODE_NDELAY) if (mode & BLK_OPEN_NDELAY)
return 0; return 0;
if (mode & (FMODE_READ|FMODE_WRITE)) { if (mode & (BLK_OPEN_READ | BLK_OPEN_WRITE)) {
if (disk_check_media_change(disk)) if (disk_check_media_change(disk))
floppy_revalidate(disk); floppy_revalidate(disk);
if (mode & FMODE_WRITE) { if (mode & BLK_OPEN_WRITE) {
if (p->wpstat) { if (p->wpstat) {
if (p->ref < 0) if (p->ref < 0)
p->ref = 0; p->ref = 0;
@ -1953,7 +1952,7 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
return 0; return 0;
} }
static int floppy_unlocked_open(struct gendisk *disk, fmode_t mode) static int floppy_unlocked_open(struct gendisk *disk, blk_mode_t mode)
{ {
int ret; int ret;

View file

@ -49,7 +49,7 @@
#include "drbd_debugfs.h" #include "drbd_debugfs.h"
static DEFINE_MUTEX(drbd_main_mutex); static DEFINE_MUTEX(drbd_main_mutex);
static int drbd_open(struct gendisk *disk, fmode_t mode); static int drbd_open(struct gendisk *disk, blk_mode_t mode);
static void drbd_release(struct gendisk *gd); static void drbd_release(struct gendisk *gd);
static void md_sync_timer_fn(struct timer_list *t); static void md_sync_timer_fn(struct timer_list *t);
static int w_bitmap_io(struct drbd_work *w, int unused); static int w_bitmap_io(struct drbd_work *w, int unused);
@ -1882,7 +1882,7 @@ int drbd_send_all(struct drbd_connection *connection, struct socket *sock, void
return 0; return 0;
} }
static int drbd_open(struct gendisk *disk, fmode_t mode) static int drbd_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct drbd_device *device = disk->private_data; struct drbd_device *device = disk->private_data;
unsigned long flags; unsigned long flags;
@ -1894,7 +1894,7 @@ static int drbd_open(struct gendisk *disk, fmode_t mode)
* and no race with updating open_cnt */ * and no race with updating open_cnt */
if (device->state.role != R_PRIMARY) { if (device->state.role != R_PRIMARY) {
if (mode & FMODE_WRITE) if (mode & BLK_OPEN_WRITE)
rv = -EROFS; rv = -EROFS;
else if (!drbd_allow_oos) else if (!drbd_allow_oos)
rv = -EMEDIUMTYPE; rv = -EMEDIUMTYPE;
@ -1911,6 +1911,7 @@ static int drbd_open(struct gendisk *disk, fmode_t mode)
static void drbd_release(struct gendisk *gd) static void drbd_release(struct gendisk *gd)
{ {
struct drbd_device *device = gd->private_data; struct drbd_device *device = gd->private_data;
mutex_lock(&drbd_main_mutex); mutex_lock(&drbd_main_mutex);
device->open_cnt--; device->open_cnt--;
mutex_unlock(&drbd_main_mutex); mutex_unlock(&drbd_main_mutex);

View file

@ -1640,7 +1640,7 @@ static struct block_device *open_backing_dev(struct drbd_device *device,
struct block_device *bdev; struct block_device *bdev;
int err = 0; int err = 0;
bdev = blkdev_get_by_path(bdev_path, FMODE_READ | FMODE_WRITE, bdev = blkdev_get_by_path(bdev_path, BLK_OPEN_READ | BLK_OPEN_WRITE,
claim_ptr, NULL); claim_ptr, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
drbd_err(device, "open(\"%s\") failed with %ld\n", drbd_err(device, "open(\"%s\") failed with %ld\n",

View file

@ -3394,8 +3394,8 @@ static bool valid_floppy_drive_params(const short autodetect[FD_AUTODETECT_SIZE]
return true; return true;
} }
static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, static int fd_locked_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned long param) unsigned int cmd, unsigned long param)
{ {
int drive = (long)bdev->bd_disk->private_data; int drive = (long)bdev->bd_disk->private_data;
int type = ITYPE(drive_state[drive].fd_device); int type = ITYPE(drive_state[drive].fd_device);
@ -3428,7 +3428,8 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
return ret; return ret;
/* permission checks */ /* permission checks */
if (((cmd & 0x40) && !(mode & (FMODE_WRITE | FMODE_WRITE_IOCTL))) || if (((cmd & 0x40) &&
!(mode & (BLK_OPEN_WRITE | BLK_OPEN_WRITE_IOCTL))) ||
((cmd & 0x80) && !capable(CAP_SYS_ADMIN))) ((cmd & 0x80) && !capable(CAP_SYS_ADMIN)))
return -EPERM; return -EPERM;
@ -3566,7 +3567,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
return 0; return 0;
} }
static int fd_ioctl(struct block_device *bdev, fmode_t mode, static int fd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
int ret; int ret;
@ -3654,8 +3655,8 @@ struct compat_floppy_write_errors {
#define FDGETFDCSTAT32 _IOR(2, 0x15, struct compat_floppy_fdc_state) #define FDGETFDCSTAT32 _IOR(2, 0x15, struct compat_floppy_fdc_state)
#define FDWERRORGET32 _IOR(2, 0x17, struct compat_floppy_write_errors) #define FDWERRORGET32 _IOR(2, 0x17, struct compat_floppy_write_errors)
static int compat_set_geometry(struct block_device *bdev, fmode_t mode, unsigned int cmd, static int compat_set_geometry(struct block_device *bdev, blk_mode_t mode,
struct compat_floppy_struct __user *arg) unsigned int cmd, struct compat_floppy_struct __user *arg)
{ {
struct floppy_struct v; struct floppy_struct v;
int drive, type; int drive, type;
@ -3664,7 +3665,7 @@ static int compat_set_geometry(struct block_device *bdev, fmode_t mode, unsigned
BUILD_BUG_ON(offsetof(struct floppy_struct, name) != BUILD_BUG_ON(offsetof(struct floppy_struct, name) !=
offsetof(struct compat_floppy_struct, name)); offsetof(struct compat_floppy_struct, name));
if (!(mode & (FMODE_WRITE | FMODE_WRITE_IOCTL))) if (!(mode & (BLK_OPEN_WRITE | BLK_OPEN_WRITE_IOCTL)))
return -EPERM; return -EPERM;
memset(&v, 0, sizeof(struct floppy_struct)); memset(&v, 0, sizeof(struct floppy_struct));
@ -3861,8 +3862,8 @@ static int compat_werrorget(int drive,
return 0; return 0;
} }
static int fd_compat_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, static int fd_compat_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned long param) unsigned int cmd, unsigned long param)
{ {
int drive = (long)bdev->bd_disk->private_data; int drive = (long)bdev->bd_disk->private_data;
switch (cmd) { switch (cmd) {
@ -3984,7 +3985,7 @@ static void floppy_release(struct gendisk *disk)
* /dev/PS0 etc), and disallows simultaneous access to the same * /dev/PS0 etc), and disallows simultaneous access to the same
* drive with different device numbers. * drive with different device numbers.
*/ */
static int floppy_open(struct gendisk *disk, fmode_t mode) static int floppy_open(struct gendisk *disk, blk_mode_t mode)
{ {
int drive = (long)disk->private_data; int drive = (long)disk->private_data;
int old_dev, new_dev; int old_dev, new_dev;
@ -4049,9 +4050,8 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
if (fdc_state[FDC(drive)].rawcmd == 1) if (fdc_state[FDC(drive)].rawcmd == 1)
fdc_state[FDC(drive)].rawcmd = 2; fdc_state[FDC(drive)].rawcmd = 2;
if (!(mode & BLK_OPEN_NDELAY)) {
if (!(mode & FMODE_NDELAY)) { if (mode & (BLK_OPEN_READ | BLK_OPEN_WRITE)) {
if (mode & (FMODE_READ|FMODE_WRITE)) {
drive_state[drive].last_checked = 0; drive_state[drive].last_checked = 0;
clear_bit(FD_OPEN_SHOULD_FAIL_BIT, clear_bit(FD_OPEN_SHOULD_FAIL_BIT,
&drive_state[drive].flags); &drive_state[drive].flags);
@ -4063,7 +4063,7 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
goto out; goto out;
} }
res = -EROFS; res = -EROFS;
if ((mode & FMODE_WRITE) && if ((mode & BLK_OPEN_WRITE) &&
!test_bit(FD_DISK_WRITABLE_BIT, &drive_state[drive].flags)) !test_bit(FD_DISK_WRITABLE_BIT, &drive_state[drive].flags))
goto out; goto out;
} }

View file

@ -990,7 +990,7 @@ loop_set_status_from_info(struct loop_device *lo,
return 0; return 0;
} }
static int loop_configure(struct loop_device *lo, fmode_t mode, static int loop_configure(struct loop_device *lo, blk_mode_t mode,
struct block_device *bdev, struct block_device *bdev,
const struct loop_config *config) const struct loop_config *config)
{ {
@ -1014,7 +1014,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
* If we don't hold exclusive handle for the device, upgrade to it * If we don't hold exclusive handle for the device, upgrade to it
* here to avoid changing device under exclusive owner. * here to avoid changing device under exclusive owner.
*/ */
if (!(mode & FMODE_EXCL)) { if (!(mode & BLK_OPEN_EXCL)) {
error = bd_prepare_to_claim(bdev, loop_configure, NULL); error = bd_prepare_to_claim(bdev, loop_configure, NULL);
if (error) if (error)
goto out_putf; goto out_putf;
@ -1050,7 +1050,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
if (error) if (error)
goto out_unlock; goto out_unlock;
if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) || if (!(file->f_mode & FMODE_WRITE) || !(mode & BLK_OPEN_WRITE) ||
!file->f_op->write_iter) !file->f_op->write_iter)
lo->lo_flags |= LO_FLAGS_READ_ONLY; lo->lo_flags |= LO_FLAGS_READ_ONLY;
@ -1116,7 +1116,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
if (partscan) if (partscan)
loop_reread_partitions(lo); loop_reread_partitions(lo);
if (!(mode & FMODE_EXCL)) if (!(mode & BLK_OPEN_EXCL))
bd_abort_claiming(bdev, loop_configure); bd_abort_claiming(bdev, loop_configure);
return 0; return 0;
@ -1124,7 +1124,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
out_unlock: out_unlock:
loop_global_unlock(lo, is_loop); loop_global_unlock(lo, is_loop);
out_bdev: out_bdev:
if (!(mode & FMODE_EXCL)) if (!(mode & BLK_OPEN_EXCL))
bd_abort_claiming(bdev, loop_configure); bd_abort_claiming(bdev, loop_configure);
out_putf: out_putf:
fput(file); fput(file);
@ -1528,7 +1528,7 @@ static int lo_simple_ioctl(struct loop_device *lo, unsigned int cmd,
return err; return err;
} }
static int lo_ioctl(struct block_device *bdev, fmode_t mode, static int lo_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct loop_device *lo = bdev->bd_disk->private_data; struct loop_device *lo = bdev->bd_disk->private_data;
@ -1563,24 +1563,22 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
return loop_clr_fd(lo); return loop_clr_fd(lo);
case LOOP_SET_STATUS: case LOOP_SET_STATUS:
err = -EPERM; err = -EPERM;
if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) { if ((mode & BLK_OPEN_WRITE) || capable(CAP_SYS_ADMIN))
err = loop_set_status_old(lo, argp); err = loop_set_status_old(lo, argp);
}
break; break;
case LOOP_GET_STATUS: case LOOP_GET_STATUS:
return loop_get_status_old(lo, argp); return loop_get_status_old(lo, argp);
case LOOP_SET_STATUS64: case LOOP_SET_STATUS64:
err = -EPERM; err = -EPERM;
if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) { if ((mode & BLK_OPEN_WRITE) || capable(CAP_SYS_ADMIN))
err = loop_set_status64(lo, argp); err = loop_set_status64(lo, argp);
}
break; break;
case LOOP_GET_STATUS64: case LOOP_GET_STATUS64:
return loop_get_status64(lo, argp); return loop_get_status64(lo, argp);
case LOOP_SET_CAPACITY: case LOOP_SET_CAPACITY:
case LOOP_SET_DIRECT_IO: case LOOP_SET_DIRECT_IO:
case LOOP_SET_BLOCK_SIZE: case LOOP_SET_BLOCK_SIZE:
if (!(mode & FMODE_WRITE) && !capable(CAP_SYS_ADMIN)) if (!(mode & BLK_OPEN_WRITE) && !capable(CAP_SYS_ADMIN))
return -EPERM; return -EPERM;
fallthrough; fallthrough;
default: default:
@ -1691,7 +1689,7 @@ loop_get_status_compat(struct loop_device *lo,
return err; return err;
} }
static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode, static int lo_compat_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct loop_device *lo = bdev->bd_disk->private_data; struct loop_device *lo = bdev->bd_disk->private_data;

View file

@ -3041,7 +3041,7 @@ static int rssd_disk_name_format(char *prefix,
* structure pointer. * structure pointer.
*/ */
static int mtip_block_ioctl(struct block_device *dev, static int mtip_block_ioctl(struct block_device *dev,
fmode_t mode, blk_mode_t mode,
unsigned cmd, unsigned cmd,
unsigned long arg) unsigned long arg)
{ {
@ -3079,7 +3079,7 @@ static int mtip_block_ioctl(struct block_device *dev,
* structure pointer. * structure pointer.
*/ */
static int mtip_block_compat_ioctl(struct block_device *dev, static int mtip_block_compat_ioctl(struct block_device *dev,
fmode_t mode, blk_mode_t mode,
unsigned cmd, unsigned cmd,
unsigned long arg) unsigned long arg)
{ {

View file

@ -1502,7 +1502,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
return -ENOTTY; return -ENOTTY;
} }
static int nbd_ioctl(struct block_device *bdev, fmode_t mode, static int nbd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct nbd_device *nbd = bdev->bd_disk->private_data; struct nbd_device *nbd = bdev->bd_disk->private_data;
@ -1553,7 +1553,7 @@ static struct nbd_config *nbd_alloc_config(void)
return config; return config;
} }
static int nbd_open(struct gendisk *disk, fmode_t mode) static int nbd_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct nbd_device *nbd; struct nbd_device *nbd;
int ret = 0; int ret = 0;

View file

@ -2154,7 +2154,7 @@ static int pkt_open_write(struct pktcdvd_device *pd)
/* /*
* called at open time. * called at open time.
*/ */
static int pkt_open_dev(struct pktcdvd_device *pd, fmode_t write) static int pkt_open_dev(struct pktcdvd_device *pd, bool write)
{ {
struct device *ddev = disk_to_dev(pd->disk); struct device *ddev = disk_to_dev(pd->disk);
int ret; int ret;
@ -2167,7 +2167,7 @@ static int pkt_open_dev(struct pktcdvd_device *pd, fmode_t write)
* to read/write from/to it. It is already opened in O_NONBLOCK mode * to read/write from/to it. It is already opened in O_NONBLOCK mode
* so open should not fail. * so open should not fail.
*/ */
bdev = blkdev_get_by_dev(pd->bdev->bd_dev, FMODE_READ, pd, NULL); bdev = blkdev_get_by_dev(pd->bdev->bd_dev, BLK_OPEN_READ, pd, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
ret = PTR_ERR(bdev); ret = PTR_ERR(bdev);
goto out; goto out;
@ -2247,7 +2247,7 @@ static struct pktcdvd_device *pkt_find_dev_from_minor(unsigned int dev_minor)
return pkt_devs[dev_minor]; return pkt_devs[dev_minor];
} }
static int pkt_open(struct gendisk *disk, fmode_t mode) static int pkt_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct pktcdvd_device *pd = NULL; struct pktcdvd_device *pd = NULL;
int ret; int ret;
@ -2263,13 +2263,13 @@ static int pkt_open(struct gendisk *disk, fmode_t mode)
pd->refcnt++; pd->refcnt++;
if (pd->refcnt > 1) { if (pd->refcnt > 1) {
if ((mode & FMODE_WRITE) && if ((mode & BLK_OPEN_WRITE) &&
!test_bit(PACKET_WRITABLE, &pd->flags)) { !test_bit(PACKET_WRITABLE, &pd->flags)) {
ret = -EBUSY; ret = -EBUSY;
goto out_dec; goto out_dec;
} }
} else { } else {
ret = pkt_open_dev(pd, mode & FMODE_WRITE); ret = pkt_open_dev(pd, mode & BLK_OPEN_WRITE);
if (ret) if (ret)
goto out_dec; goto out_dec;
/* /*
@ -2278,7 +2278,6 @@ static int pkt_open(struct gendisk *disk, fmode_t mode)
*/ */
set_blocksize(disk->part0, CD_FRAMESIZE); set_blocksize(disk->part0, CD_FRAMESIZE);
} }
mutex_unlock(&ctl_mutex); mutex_unlock(&ctl_mutex);
mutex_unlock(&pktcdvd_mutex); mutex_unlock(&pktcdvd_mutex);
return 0; return 0;
@ -2514,7 +2513,8 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)
} }
} }
bdev = blkdev_get_by_dev(dev, FMODE_READ | FMODE_NDELAY, NULL, NULL); bdev = blkdev_get_by_dev(dev, BLK_OPEN_READ | BLK_OPEN_NDELAY, NULL,
NULL);
if (IS_ERR(bdev)) if (IS_ERR(bdev))
return PTR_ERR(bdev); return PTR_ERR(bdev);
sdev = scsi_device_from_queue(bdev->bd_disk->queue); sdev = scsi_device_from_queue(bdev->bd_disk->queue);
@ -2550,7 +2550,8 @@ out_mem:
return -ENOMEM; return -ENOMEM;
} }
static int pkt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) static int pkt_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg)
{ {
struct pktcdvd_device *pd = bdev->bd_disk->private_data; struct pktcdvd_device *pd = bdev->bd_disk->private_data;
struct device *ddev = disk_to_dev(pd->disk); struct device *ddev = disk_to_dev(pd->disk);

View file

@ -660,7 +660,7 @@ static bool pending_result_dec(struct pending_result *pending, int *result)
return true; return true;
} }
static int rbd_open(struct gendisk *disk, fmode_t mode) static int rbd_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct rbd_device *rbd_dev = disk->private_data; struct rbd_device *rbd_dev = disk->private_data;
bool removing = false; bool removing = false;

View file

@ -921,11 +921,11 @@ rnbd_clt_session *find_or_create_sess(const char *sessname, bool *first)
return sess; return sess;
} }
static int rnbd_client_open(struct gendisk *disk, fmode_t mode) static int rnbd_client_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct rnbd_clt_dev *dev = disk->private_data; struct rnbd_clt_dev *dev = disk->private_data;
if (get_disk_ro(dev->gd) && (mode & FMODE_WRITE)) if (get_disk_ro(dev->gd) && (mode & BLK_OPEN_WRITE))
return -EPERM; return -EPERM;
if (dev->dev_state == DEV_STATE_UNMAPPED || if (dev->dev_state == DEV_STATE_UNMAPPED ||

View file

@ -677,14 +677,14 @@ static int process_msg_open(struct rnbd_srv_session *srv_sess,
struct rnbd_srv_sess_dev *srv_sess_dev; struct rnbd_srv_sess_dev *srv_sess_dev;
const struct rnbd_msg_open *open_msg = msg; const struct rnbd_msg_open *open_msg = msg;
struct block_device *bdev; struct block_device *bdev;
fmode_t open_flags = FMODE_READ; blk_mode_t open_flags = BLK_OPEN_READ;
char *full_path; char *full_path;
struct rnbd_msg_open_rsp *rsp = data; struct rnbd_msg_open_rsp *rsp = data;
trace_process_msg_open(srv_sess, open_msg); trace_process_msg_open(srv_sess, open_msg);
if (open_msg->access_mode != RNBD_ACCESS_RO) if (open_msg->access_mode != RNBD_ACCESS_RO)
open_flags |= FMODE_WRITE; open_flags |= BLK_OPEN_WRITE;
mutex_lock(&srv_sess->lock); mutex_lock(&srv_sess->lock);

View file

@ -139,7 +139,7 @@ static int vdc_getgeo(struct block_device *bdev, struct hd_geometry *geo)
* when vdisk_mtype is VD_MEDIA_TYPE_CD or VD_MEDIA_TYPE_DVD. * when vdisk_mtype is VD_MEDIA_TYPE_CD or VD_MEDIA_TYPE_DVD.
* Needed to be able to install inside an ldom from an iso image. * Needed to be able to install inside an ldom from an iso image.
*/ */
static int vdc_ioctl(struct block_device *bdev, fmode_t mode, static int vdc_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned command, unsigned long argument) unsigned command, unsigned long argument)
{ {
struct vdc_port *port = bdev->bd_disk->private_data; struct vdc_port *port = bdev->bd_disk->private_data;

View file

@ -608,20 +608,18 @@ static void setup_medium(struct floppy_state *fs)
} }
} }
static int floppy_open(struct gendisk *disk, fmode_t mode) static int floppy_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct floppy_state *fs = disk->private_data; struct floppy_state *fs = disk->private_data;
struct swim __iomem *base = fs->swd->base; struct swim __iomem *base = fs->swd->base;
int err; int err;
if (fs->ref_count == -1 || (fs->ref_count && mode & FMODE_EXCL)) if (fs->ref_count == -1 || (fs->ref_count && mode & BLK_OPEN_EXCL))
return -EBUSY; return -EBUSY;
if (mode & BLK_OPEN_EXCL)
if (mode & FMODE_EXCL)
fs->ref_count = -1; fs->ref_count = -1;
else else
fs->ref_count++; fs->ref_count++;
swim_write(base, setup, S_IBM_DRIVE | S_FCLK_DIV2); swim_write(base, setup, S_IBM_DRIVE | S_FCLK_DIV2);
udelay(10); udelay(10);
swim_drive(base, fs->location); swim_drive(base, fs->location);
@ -636,10 +634,10 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
set_capacity(fs->disk, fs->total_secs); set_capacity(fs->disk, fs->total_secs);
if (mode & FMODE_NDELAY) if (mode & BLK_OPEN_NDELAY)
return 0; return 0;
if (mode & (FMODE_READ|FMODE_WRITE)) { if (mode & (BLK_OPEN_READ | BLK_OPEN_WRITE)) {
if (disk_check_media_change(disk) && fs->disk_in) if (disk_check_media_change(disk) && fs->disk_in)
fs->ejected = 0; fs->ejected = 0;
if ((mode & FMODE_WRITE) && fs->write_protected) { if ((mode & FMODE_WRITE) && fs->write_protected) {
@ -659,7 +657,7 @@ out:
return err; return err;
} }
static int floppy_unlocked_open(struct gendisk *disk, fmode_t mode) static int floppy_unlocked_open(struct gendisk *disk, blk_mode_t mode)
{ {
int ret; int ret;
@ -686,7 +684,7 @@ static void floppy_release(struct gendisk *disk)
mutex_unlock(&swim_mutex); mutex_unlock(&swim_mutex);
} }
static int floppy_ioctl(struct block_device *bdev, fmode_t mode, static int floppy_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
struct floppy_state *fs = bdev->bd_disk->private_data; struct floppy_state *fs = bdev->bd_disk->private_data;

View file

@ -246,9 +246,9 @@ static int grab_drive(struct floppy_state *fs, enum swim_state state,
int interruptible); int interruptible);
static void release_drive(struct floppy_state *fs); static void release_drive(struct floppy_state *fs);
static int fd_eject(struct floppy_state *fs); static int fd_eject(struct floppy_state *fs);
static int floppy_ioctl(struct block_device *bdev, fmode_t mode, static int floppy_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param); unsigned int cmd, unsigned long param);
static int floppy_open(struct gendisk *disk, fmode_t mode); static int floppy_open(struct gendisk *disk, blk_mode_t mode);
static unsigned int floppy_check_events(struct gendisk *disk, static unsigned int floppy_check_events(struct gendisk *disk,
unsigned int clearing); unsigned int clearing);
static int floppy_revalidate(struct gendisk *disk); static int floppy_revalidate(struct gendisk *disk);
@ -882,7 +882,7 @@ static int fd_eject(struct floppy_state *fs)
static struct floppy_struct floppy_type = static struct floppy_struct floppy_type =
{ 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,NULL }; /* 7 1.44MB 3.5" */ { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,NULL }; /* 7 1.44MB 3.5" */
static int floppy_locked_ioctl(struct block_device *bdev, fmode_t mode, static int floppy_locked_ioctl(struct block_device *bdev,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
struct floppy_state *fs = bdev->bd_disk->private_data; struct floppy_state *fs = bdev->bd_disk->private_data;
@ -910,7 +910,7 @@ static int floppy_locked_ioctl(struct block_device *bdev, fmode_t mode,
return -ENOTTY; return -ENOTTY;
} }
static int floppy_ioctl(struct block_device *bdev, fmode_t mode, static int floppy_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long param) unsigned int cmd, unsigned long param)
{ {
int ret; int ret;
@ -922,7 +922,7 @@ static int floppy_ioctl(struct block_device *bdev, fmode_t mode,
return ret; return ret;
} }
static int floppy_open(struct gendisk *disk, fmode_t mode) static int floppy_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct floppy_state *fs = disk->private_data; struct floppy_state *fs = disk->private_data;
struct swim3 __iomem *sw = fs->swim3; struct swim3 __iomem *sw = fs->swim3;
@ -957,18 +957,18 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
swim3_action(fs, SETMFM); swim3_action(fs, SETMFM);
swim3_select(fs, RELAX); swim3_select(fs, RELAX);
} else if (fs->ref_count == -1 || mode & FMODE_EXCL) } else if (fs->ref_count == -1 || mode & BLK_OPEN_EXCL)
return -EBUSY; return -EBUSY;
if (err == 0 && (mode & FMODE_NDELAY) == 0 if (err == 0 && !(mode & BLK_OPEN_NDELAY) &&
&& (mode & (FMODE_READ|FMODE_WRITE))) { (mode & (BLK_OPEN_READ | BLK_OPEN_WRITE))) {
if (disk_check_media_change(disk)) if (disk_check_media_change(disk))
floppy_revalidate(disk); floppy_revalidate(disk);
if (fs->ejected) if (fs->ejected)
err = -ENXIO; err = -ENXIO;
} }
if (err == 0 && (mode & FMODE_WRITE)) { if (err == 0 && (mode & BLK_OPEN_WRITE)) {
if (fs->write_prot < 0) if (fs->write_prot < 0)
fs->write_prot = swim3_readbit(fs, WRITE_PROT); fs->write_prot = swim3_readbit(fs, WRITE_PROT);
if (fs->write_prot) if (fs->write_prot)
@ -984,7 +984,7 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
return err; return err;
} }
if (mode & FMODE_EXCL) if (mode & BLK_OPEN_EXCL)
fs->ref_count = -1; fs->ref_count = -1;
else else
++fs->ref_count; ++fs->ref_count;
@ -992,12 +992,12 @@ static int floppy_open(struct gendisk *disk, fmode_t mode)
return 0; return 0;
} }
static int floppy_unlocked_open(struct block_device *bdev, fmode_t mode) static int floppy_unlocked_open(struct gendisk *disk, blk_mode_t mode)
{ {
int ret; int ret;
mutex_lock(&swim3_mutex); mutex_lock(&swim3_mutex);
ret = floppy_open(bdev, mode); ret = floppy_open(disk, mode);
mutex_unlock(&swim3_mutex); mutex_unlock(&swim3_mutex);
return ret; return ret;

View file

@ -447,7 +447,7 @@ static void ublk_store_owner_uid_gid(unsigned int *owner_uid,
*owner_gid = from_kgid(&init_user_ns, gid); *owner_gid = from_kgid(&init_user_ns, gid);
} }
static int ublk_open(struct gendisk *disk, fmode_t mode) static int ublk_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct ublk_device *ub = disk->private_data; struct ublk_device *ub = disk->private_data;

View file

@ -492,7 +492,7 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
vbd->pdevice = MKDEV(major, minor); vbd->pdevice = MKDEV(major, minor);
bdev = blkdev_get_by_dev(vbd->pdevice, vbd->readonly ? bdev = blkdev_get_by_dev(vbd->pdevice, vbd->readonly ?
FMODE_READ : FMODE_WRITE, NULL, NULL); BLK_OPEN_READ : BLK_OPEN_WRITE, NULL, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
pr_warn("xen_vbd_create: device %08x could not be opened\n", pr_warn("xen_vbd_create: device %08x could not be opened\n",

View file

@ -509,7 +509,7 @@ static int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg)
return 0; return 0;
} }
static int blkif_ioctl(struct block_device *bdev, fmode_t mode, static int blkif_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned command, unsigned long argument) unsigned command, unsigned long argument)
{ {
struct blkfront_info *info = bdev->bd_disk->private_data; struct blkfront_info *info = bdev->bd_disk->private_data;

View file

@ -140,7 +140,7 @@ static void get_chipram(void)
return; return;
} }
static int z2_open(struct gendisk *disk, fmode_t mode) static int z2_open(struct gendisk *disk, blk_mode_t mode)
{ {
int device = disk->first_minor; int device = disk->first_minor;
int max_z2_map = (Z2RAM_SIZE / Z2RAM_CHUNKSIZE) * sizeof(z2ram_map[0]); int max_z2_map = (Z2RAM_SIZE / Z2RAM_CHUNKSIZE) * sizeof(z2ram_map[0]);

View file

@ -507,8 +507,8 @@ static ssize_t backing_dev_store(struct device *dev,
goto out; goto out;
} }
bdev = blkdev_get_by_dev(inode->i_rdev, FMODE_READ | FMODE_WRITE, zram, bdev = blkdev_get_by_dev(inode->i_rdev, BLK_OPEN_READ | BLK_OPEN_WRITE,
NULL); zram, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
err = PTR_ERR(bdev); err = PTR_ERR(bdev);
bdev = NULL; bdev = NULL;
@ -2097,7 +2097,7 @@ static ssize_t reset_store(struct device *dev,
return len; return len;
} }
static int zram_open(struct gendisk *disk, fmode_t mode) static int zram_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct zram *zram = disk->private_data; struct zram *zram = disk->private_data;

View file

@ -1146,7 +1146,7 @@ clean_up_and_return:
* is in their own interest: device control becomes a lot easier * is in their own interest: device control becomes a lot easier
* this way. * this way.
*/ */
int cdrom_open(struct cdrom_device_info *cdi, fmode_t mode) int cdrom_open(struct cdrom_device_info *cdi, blk_mode_t mode)
{ {
int ret; int ret;
@ -1155,7 +1155,7 @@ int cdrom_open(struct cdrom_device_info *cdi, fmode_t mode)
/* if this was a O_NONBLOCK open and we should honor the flags, /* if this was a O_NONBLOCK open and we should honor the flags,
* do a quick open without drive/disc integrity checks. */ * do a quick open without drive/disc integrity checks. */
cdi->use_count++; cdi->use_count++;
if ((mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) { if ((mode & BLK_OPEN_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) {
ret = cdi->ops->open(cdi, 1); ret = cdi->ops->open(cdi, 1);
} else { } else {
ret = open_for_data(cdi); ret = open_for_data(cdi);
@ -1163,7 +1163,7 @@ int cdrom_open(struct cdrom_device_info *cdi, fmode_t mode)
goto err; goto err;
if (CDROM_CAN(CDC_GENERIC_PACKET)) if (CDROM_CAN(CDC_GENERIC_PACKET))
cdrom_mmc3_profile(cdi); cdrom_mmc3_profile(cdi);
if (mode & FMODE_WRITE) { if (mode & BLK_OPEN_WRITE) {
ret = -EROFS; ret = -EROFS;
if (cdrom_open_write(cdi)) if (cdrom_open_write(cdi))
goto err_release; goto err_release;

View file

@ -474,7 +474,7 @@ static const struct cdrom_device_ops gdrom_ops = {
CDC_RESET | CDC_DRIVE_STATUS | CDC_CD_R, CDC_RESET | CDC_DRIVE_STATUS | CDC_CD_R,
}; };
static int gdrom_bdops_open(struct gendisk *disk, fmode_t mode) static int gdrom_bdops_open(struct gendisk *disk, blk_mode_t mode)
{ {
int ret; int ret;
@ -499,7 +499,7 @@ static unsigned int gdrom_bdops_check_events(struct gendisk *disk,
return cdrom_check_events(gd.cd_info, clearing); return cdrom_check_events(gd.cd_info, clearing);
} }
static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode, static int gdrom_bdops_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned cmd, unsigned long arg) unsigned cmd, unsigned long arg)
{ {
int ret; int ret;

View file

@ -275,7 +275,7 @@ struct bcache_device {
int (*cache_miss)(struct btree *b, struct search *s, int (*cache_miss)(struct btree *b, struct search *s,
struct bio *bio, unsigned int sectors); struct bio *bio, unsigned int sectors);
int (*ioctl)(struct bcache_device *d, fmode_t mode, int (*ioctl)(struct bcache_device *d, blk_mode_t mode,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
}; };

View file

@ -1228,7 +1228,7 @@ void cached_dev_submit_bio(struct bio *bio)
detached_dev_do_request(d, bio, orig_bdev, start_time); detached_dev_do_request(d, bio, orig_bdev, start_time);
} }
static int cached_dev_ioctl(struct bcache_device *d, fmode_t mode, static int cached_dev_ioctl(struct bcache_device *d, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct cached_dev *dc = container_of(d, struct cached_dev, disk); struct cached_dev *dc = container_of(d, struct cached_dev, disk);
@ -1318,7 +1318,7 @@ void flash_dev_submit_bio(struct bio *bio)
continue_at(cl, search_free, NULL); continue_at(cl, search_free, NULL);
} }
static int flash_dev_ioctl(struct bcache_device *d, fmode_t mode, static int flash_dev_ioctl(struct bcache_device *d, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
return -ENOTTY; return -ENOTTY;

View file

@ -732,7 +732,7 @@ out:
/* Bcache device */ /* Bcache device */
static int open_dev(struct gendisk *disk, fmode_t mode) static int open_dev(struct gendisk *disk, blk_mode_t mode)
{ {
struct bcache_device *d = disk->private_data; struct bcache_device *d = disk->private_data;
@ -750,7 +750,7 @@ static void release_dev(struct gendisk *b)
closure_put(&d->cl); closure_put(&d->cl);
} }
static int ioctl_dev(struct block_device *b, fmode_t mode, static int ioctl_dev(struct block_device *b, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct bcache_device *d = b->bd_disk->private_data; struct bcache_device *d = b->bd_disk->private_data;
@ -2558,7 +2558,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
ret = -EINVAL; ret = -EINVAL;
err = "failed to open device"; err = "failed to open device";
bdev = blkdev_get_by_path(strim(path), FMODE_READ | FMODE_WRITE, bdev = blkdev_get_by_path(strim(path), BLK_OPEN_READ | BLK_OPEN_WRITE,
bcache_kobj, NULL); bcache_kobj, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
if (bdev == ERR_PTR(-EBUSY)) { if (bdev == ERR_PTR(-EBUSY)) {

View file

@ -2051,8 +2051,8 @@ static int parse_metadata_dev(struct cache_args *ca, struct dm_arg_set *as,
if (!at_least_one_arg(as, error)) if (!at_least_one_arg(as, error))
return -EINVAL; return -EINVAL;
r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, r = dm_get_device(ca->ti, dm_shift_arg(as),
&ca->metadata_dev); BLK_OPEN_READ | BLK_OPEN_WRITE, &ca->metadata_dev);
if (r) { if (r) {
*error = "Error opening metadata device"; *error = "Error opening metadata device";
return r; return r;
@ -2074,8 +2074,8 @@ static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as,
if (!at_least_one_arg(as, error)) if (!at_least_one_arg(as, error))
return -EINVAL; return -EINVAL;
r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, r = dm_get_device(ca->ti, dm_shift_arg(as),
&ca->cache_dev); BLK_OPEN_READ | BLK_OPEN_WRITE, &ca->cache_dev);
if (r) { if (r) {
*error = "Error opening cache device"; *error = "Error opening cache device";
return r; return r;
@ -2093,8 +2093,8 @@ static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
if (!at_least_one_arg(as, error)) if (!at_least_one_arg(as, error))
return -EINVAL; return -EINVAL;
r = dm_get_device(ca->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, r = dm_get_device(ca->ti, dm_shift_arg(as),
&ca->origin_dev); BLK_OPEN_READ | BLK_OPEN_WRITE, &ca->origin_dev);
if (r) { if (r) {
*error = "Error opening origin device"; *error = "Error opening origin device";
return r; return r;

View file

@ -1683,8 +1683,8 @@ static int parse_metadata_dev(struct clone *clone, struct dm_arg_set *as, char *
int r; int r;
sector_t metadata_dev_size; sector_t metadata_dev_size;
r = dm_get_device(clone->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, r = dm_get_device(clone->ti, dm_shift_arg(as),
&clone->metadata_dev); BLK_OPEN_READ | BLK_OPEN_WRITE, &clone->metadata_dev);
if (r) { if (r) {
*error = "Error opening metadata device"; *error = "Error opening metadata device";
return r; return r;
@ -1703,8 +1703,8 @@ static int parse_dest_dev(struct clone *clone, struct dm_arg_set *as, char **err
int r; int r;
sector_t dest_dev_size; sector_t dest_dev_size;
r = dm_get_device(clone->ti, dm_shift_arg(as), FMODE_READ | FMODE_WRITE, r = dm_get_device(clone->ti, dm_shift_arg(as),
&clone->dest_dev); BLK_OPEN_READ | BLK_OPEN_WRITE, &clone->dest_dev);
if (r) { if (r) {
*error = "Error opening destination device"; *error = "Error opening destination device";
return r; return r;
@ -1725,7 +1725,7 @@ static int parse_source_dev(struct clone *clone, struct dm_arg_set *as, char **e
int r; int r;
sector_t source_dev_size; sector_t source_dev_size;
r = dm_get_device(clone->ti, dm_shift_arg(as), FMODE_READ, r = dm_get_device(clone->ti, dm_shift_arg(as), BLK_OPEN_READ,
&clone->source_dev); &clone->source_dev);
if (r) { if (r) {
*error = "Error opening source device"; *error = "Error opening source device";

View file

@ -207,11 +207,10 @@ struct dm_table {
unsigned integrity_added:1; unsigned integrity_added:1;
/* /*
* Indicates the rw permissions for the new logical * Indicates the rw permissions for the new logical device. This
* device. This should be a combination of FMODE_READ * should be a combination of BLK_OPEN_READ and BLK_OPEN_WRITE.
* and FMODE_WRITE.
*/ */
fmode_t mode; blk_mode_t mode;
/* a list of devices used by this table */ /* a list of devices used by this table */
struct list_head devices; struct list_head devices;

View file

@ -1482,14 +1482,16 @@ static int era_ctr(struct dm_target *ti, unsigned int argc, char **argv)
era->ti = ti; era->ti = ti;
r = dm_get_device(ti, argv[0], FMODE_READ | FMODE_WRITE, &era->metadata_dev); r = dm_get_device(ti, argv[0], BLK_OPEN_READ | BLK_OPEN_WRITE,
&era->metadata_dev);
if (r) { if (r) {
ti->error = "Error opening metadata device"; ti->error = "Error opening metadata device";
era_destroy(era); era_destroy(era);
return -EINVAL; return -EINVAL;
} }
r = dm_get_device(ti, argv[1], FMODE_READ | FMODE_WRITE, &era->origin_dev); r = dm_get_device(ti, argv[1], BLK_OPEN_READ | BLK_OPEN_WRITE,
&era->origin_dev);
if (r) { if (r) {
ti->error = "Error opening data device"; ti->error = "Error opening data device";
era_destroy(era); era_destroy(era);

View file

@ -861,7 +861,7 @@ static void __dev_status(struct mapped_device *md, struct dm_ioctl *param)
table = dm_get_inactive_table(md, &srcu_idx); table = dm_get_inactive_table(md, &srcu_idx);
if (table) { if (table) {
if (!(dm_table_get_mode(table) & FMODE_WRITE)) if (!(dm_table_get_mode(table) & BLK_OPEN_WRITE))
param->flags |= DM_READONLY_FLAG; param->flags |= DM_READONLY_FLAG;
param->target_count = table->num_targets; param->target_count = table->num_targets;
} }
@ -1192,7 +1192,7 @@ static int do_resume(struct dm_ioctl *param)
if (old_size && new_size && old_size != new_size) if (old_size && new_size && old_size != new_size)
need_resize_uevent = true; need_resize_uevent = true;
if (dm_table_get_mode(new_map) & FMODE_WRITE) if (dm_table_get_mode(new_map) & BLK_OPEN_WRITE)
set_disk_ro(dm_disk(md), 0); set_disk_ro(dm_disk(md), 0);
else else
set_disk_ro(dm_disk(md), 1); set_disk_ro(dm_disk(md), 1);
@ -1381,12 +1381,12 @@ static int dev_arm_poll(struct file *filp, struct dm_ioctl *param, size_t param_
return 0; return 0;
} }
static inline fmode_t get_mode(struct dm_ioctl *param) static inline blk_mode_t get_mode(struct dm_ioctl *param)
{ {
fmode_t mode = FMODE_READ | FMODE_WRITE; blk_mode_t mode = BLK_OPEN_READ | BLK_OPEN_WRITE;
if (param->flags & DM_READONLY_FLAG) if (param->flags & DM_READONLY_FLAG)
mode = FMODE_READ; mode = BLK_OPEN_READ;
return mode; return mode;
} }

View file

@ -1242,7 +1242,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
int r = -EINVAL; int r = -EINVAL;
char *origin_path, *cow_path; char *origin_path, *cow_path;
unsigned int args_used, num_flush_bios = 1; unsigned int args_used, num_flush_bios = 1;
fmode_t origin_mode = FMODE_READ; blk_mode_t origin_mode = BLK_OPEN_READ;
if (argc < 4) { if (argc < 4) {
ti->error = "requires 4 or more arguments"; ti->error = "requires 4 or more arguments";
@ -1252,7 +1252,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
if (dm_target_is_snapshot_merge(ti)) { if (dm_target_is_snapshot_merge(ti)) {
num_flush_bios = 2; num_flush_bios = 2;
origin_mode = FMODE_WRITE; origin_mode = BLK_OPEN_WRITE;
} }
s = kzalloc(sizeof(*s), GFP_KERNEL); s = kzalloc(sizeof(*s), GFP_KERNEL);

View file

@ -126,7 +126,7 @@ static int alloc_targets(struct dm_table *t, unsigned int num)
return 0; return 0;
} }
int dm_table_create(struct dm_table **result, fmode_t mode, int dm_table_create(struct dm_table **result, blk_mode_t mode,
unsigned int num_targets, struct mapped_device *md) unsigned int num_targets, struct mapped_device *md)
{ {
struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL); struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL);
@ -304,7 +304,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,
* device and not to touch the existing bdev field in case * device and not to touch the existing bdev field in case
* it is accessed concurrently. * it is accessed concurrently.
*/ */
static int upgrade_mode(struct dm_dev_internal *dd, fmode_t new_mode, static int upgrade_mode(struct dm_dev_internal *dd, blk_mode_t new_mode,
struct mapped_device *md) struct mapped_device *md)
{ {
int r; int r;
@ -330,7 +330,7 @@ static int upgrade_mode(struct dm_dev_internal *dd, fmode_t new_mode,
* Note: the __ref annotation is because this function can call the __init * Note: the __ref annotation is because this function can call the __init
* marked early_lookup_bdev when called during early boot code from dm-init.c. * marked early_lookup_bdev when called during early boot code from dm-init.c.
*/ */
int __ref dm_get_device(struct dm_target *ti, const char *path, fmode_t mode, int __ref dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
struct dm_dev **result) struct dm_dev **result)
{ {
int r; int r;
@ -662,7 +662,8 @@ int dm_table_add_target(struct dm_table *t, const char *type,
t->singleton = true; t->singleton = true;
} }
if (dm_target_always_writeable(ti->type) && !(t->mode & FMODE_WRITE)) { if (dm_target_always_writeable(ti->type) &&
!(t->mode & BLK_OPEN_WRITE)) {
ti->error = "target type may not be included in a read-only table"; ti->error = "target type may not be included in a read-only table";
goto bad; goto bad;
} }
@ -2033,7 +2034,7 @@ struct list_head *dm_table_get_devices(struct dm_table *t)
return &t->devices; return &t->devices;
} }
fmode_t dm_table_get_mode(struct dm_table *t) blk_mode_t dm_table_get_mode(struct dm_table *t)
{ {
return t->mode; return t->mode;
} }

View file

@ -3301,7 +3301,7 @@ static int pool_ctr(struct dm_target *ti, unsigned int argc, char **argv)
unsigned long block_size; unsigned long block_size;
dm_block_t low_water_blocks; dm_block_t low_water_blocks;
struct dm_dev *metadata_dev; struct dm_dev *metadata_dev;
fmode_t metadata_mode; blk_mode_t metadata_mode;
/* /*
* FIXME Remove validation from scope of lock. * FIXME Remove validation from scope of lock.
@ -3334,7 +3334,8 @@ static int pool_ctr(struct dm_target *ti, unsigned int argc, char **argv)
if (r) if (r)
goto out_unlock; goto out_unlock;
metadata_mode = FMODE_READ | ((pf.mode == PM_READ_ONLY) ? 0 : FMODE_WRITE); metadata_mode = BLK_OPEN_READ |
((pf.mode == PM_READ_ONLY) ? 0 : BLK_OPEN_WRITE);
r = dm_get_device(ti, argv[0], metadata_mode, &metadata_dev); r = dm_get_device(ti, argv[0], metadata_mode, &metadata_dev);
if (r) { if (r) {
ti->error = "Error opening metadata block device"; ti->error = "Error opening metadata block device";
@ -3342,7 +3343,7 @@ static int pool_ctr(struct dm_target *ti, unsigned int argc, char **argv)
} }
warn_if_metadata_device_too_big(metadata_dev->bdev); warn_if_metadata_device_too_big(metadata_dev->bdev);
r = dm_get_device(ti, argv[1], FMODE_READ | FMODE_WRITE, &data_dev); r = dm_get_device(ti, argv[1], BLK_OPEN_READ | BLK_OPEN_WRITE, &data_dev);
if (r) { if (r) {
ti->error = "Error getting data device"; ti->error = "Error getting data device";
goto out_metadata; goto out_metadata;
@ -4223,7 +4224,7 @@ static int thin_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto bad_origin_dev; goto bad_origin_dev;
} }
r = dm_get_device(ti, argv[2], FMODE_READ, &origin_dev); r = dm_get_device(ti, argv[2], BLK_OPEN_READ, &origin_dev);
if (r) { if (r) {
ti->error = "Error opening origin device"; ti->error = "Error opening origin device";
goto bad_origin_dev; goto bad_origin_dev;

View file

@ -607,7 +607,7 @@ int verity_fec_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v,
(*argc)--; (*argc)--;
if (!strcasecmp(arg_name, DM_VERITY_OPT_FEC_DEV)) { if (!strcasecmp(arg_name, DM_VERITY_OPT_FEC_DEV)) {
r = dm_get_device(ti, arg_value, FMODE_READ, &v->fec->dev); r = dm_get_device(ti, arg_value, BLK_OPEN_READ, &v->fec->dev);
if (r) { if (r) {
ti->error = "FEC device lookup failed"; ti->error = "FEC device lookup failed";
return r; return r;

View file

@ -1196,7 +1196,7 @@ static int verity_ctr(struct dm_target *ti, unsigned int argc, char **argv)
if (r) if (r)
goto bad; goto bad;
if ((dm_table_get_mode(ti->table) & ~FMODE_READ)) { if ((dm_table_get_mode(ti->table) & ~BLK_OPEN_READ)) {
ti->error = "Device must be readonly"; ti->error = "Device must be readonly";
r = -EINVAL; r = -EINVAL;
goto bad; goto bad;
@ -1225,13 +1225,13 @@ static int verity_ctr(struct dm_target *ti, unsigned int argc, char **argv)
} }
v->version = num; v->version = num;
r = dm_get_device(ti, argv[1], FMODE_READ, &v->data_dev); r = dm_get_device(ti, argv[1], BLK_OPEN_READ, &v->data_dev);
if (r) { if (r) {
ti->error = "Data device lookup failed"; ti->error = "Data device lookup failed";
goto bad; goto bad;
} }
r = dm_get_device(ti, argv[2], FMODE_READ, &v->hash_dev); r = dm_get_device(ti, argv[2], BLK_OPEN_READ, &v->hash_dev);
if (r) { if (r) {
ti->error = "Hash device lookup failed"; ti->error = "Hash device lookup failed";
goto bad; goto bad;

View file

@ -310,7 +310,7 @@ int dm_deleting_md(struct mapped_device *md)
return test_bit(DMF_DELETING, &md->flags); return test_bit(DMF_DELETING, &md->flags);
} }
static int dm_blk_open(struct gendisk *disk, fmode_t mode) static int dm_blk_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct mapped_device *md; struct mapped_device *md;
@ -448,7 +448,7 @@ static void dm_unprepare_ioctl(struct mapped_device *md, int srcu_idx)
dm_put_live_table(md, srcu_idx); dm_put_live_table(md, srcu_idx);
} }
static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode, static int dm_blk_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct mapped_device *md = bdev->bd_disk->private_data; struct mapped_device *md = bdev->bd_disk->private_data;
@ -734,7 +734,7 @@ static char *_dm_claim_ptr = "I belong to device-mapper";
* Open a table device so we can use it as a map destination. * Open a table device so we can use it as a map destination.
*/ */
static struct table_device *open_table_device(struct mapped_device *md, static struct table_device *open_table_device(struct mapped_device *md,
dev_t dev, fmode_t mode) dev_t dev, blk_mode_t mode)
{ {
struct table_device *td; struct table_device *td;
struct block_device *bdev; struct block_device *bdev;
@ -791,7 +791,7 @@ static void close_table_device(struct table_device *td, struct mapped_device *md
} }
static struct table_device *find_table_device(struct list_head *l, dev_t dev, static struct table_device *find_table_device(struct list_head *l, dev_t dev,
fmode_t mode) blk_mode_t mode)
{ {
struct table_device *td; struct table_device *td;
@ -802,7 +802,7 @@ static struct table_device *find_table_device(struct list_head *l, dev_t dev,
return NULL; return NULL;
} }
int dm_get_table_device(struct mapped_device *md, dev_t dev, fmode_t mode, int dm_get_table_device(struct mapped_device *md, dev_t dev, blk_mode_t mode,
struct dm_dev **result) struct dm_dev **result)
{ {
struct table_device *td; struct table_device *td;

View file

@ -203,7 +203,7 @@ int dm_open_count(struct mapped_device *md);
int dm_lock_for_deletion(struct mapped_device *md, bool mark_deferred, bool only_deferred); int dm_lock_for_deletion(struct mapped_device *md, bool mark_deferred, bool only_deferred);
int dm_cancel_deferred_remove(struct mapped_device *md); int dm_cancel_deferred_remove(struct mapped_device *md);
int dm_request_based(struct mapped_device *md); int dm_request_based(struct mapped_device *md);
int dm_get_table_device(struct mapped_device *md, dev_t dev, fmode_t mode, int dm_get_table_device(struct mapped_device *md, dev_t dev, blk_mode_t mode,
struct dm_dev **result); struct dm_dev **result);
void dm_put_table_device(struct mapped_device *md, struct dm_dev *d); void dm_put_table_device(struct mapped_device *md, struct dm_dev *d);

View file

@ -3643,7 +3643,7 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
if (err) if (err)
goto out_clear_rdev; goto out_clear_rdev;
rdev->bdev = blkdev_get_by_dev(newdev, FMODE_READ | FMODE_WRITE, rdev->bdev = blkdev_get_by_dev(newdev, BLK_OPEN_READ | BLK_OPEN_WRITE,
super_format == -2 ? &claim_rdev : rdev, NULL); super_format == -2 ? &claim_rdev : rdev, NULL);
if (IS_ERR(rdev->bdev)) { if (IS_ERR(rdev->bdev)) {
pr_warn("md: could not open device unknown-block(%u,%u).\n", pr_warn("md: could not open device unknown-block(%u,%u).\n",
@ -7488,7 +7488,7 @@ static int __md_set_array_info(struct mddev *mddev, void __user *argp)
return err; return err;
} }
static int md_ioctl(struct block_device *bdev, fmode_t mode, static int md_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
int err = 0; int err = 0;
@ -7720,7 +7720,7 @@ out:
return err; return err;
} }
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
static int md_compat_ioctl(struct block_device *bdev, fmode_t mode, static int md_compat_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
switch (cmd) { switch (cmd) {
@ -7769,7 +7769,7 @@ out_unlock:
return err; return err;
} }
static int md_open(struct gendisk *disk, fmode_t mode) static int md_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct mddev *mddev; struct mddev *mddev;
int err; int err;

View file

@ -357,7 +357,7 @@ static const struct attribute_group *mmc_disk_attr_groups[] = {
NULL, NULL,
}; };
static int mmc_blk_open(struct gendisk *disk, fmode_t mode) static int mmc_blk_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct mmc_blk_data *md = mmc_blk_get(disk); struct mmc_blk_data *md = mmc_blk_get(disk);
int ret = -ENXIO; int ret = -ENXIO;
@ -365,7 +365,7 @@ static int mmc_blk_open(struct gendisk *disk, fmode_t mode)
mutex_lock(&block_mutex); mutex_lock(&block_mutex);
if (md) { if (md) {
ret = 0; ret = 0;
if ((mode & FMODE_WRITE) && md->read_only) { if ((mode & BLK_OPEN_WRITE) && md->read_only) {
mmc_blk_put(md); mmc_blk_put(md);
ret = -EROFS; ret = -EROFS;
} }
@ -754,7 +754,7 @@ static int mmc_blk_check_blkdev(struct block_device *bdev)
return 0; return 0;
} }
static int mmc_blk_ioctl(struct block_device *bdev, fmode_t mode, static int mmc_blk_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct mmc_blk_data *md; struct mmc_blk_data *md;
@ -791,7 +791,7 @@ static int mmc_blk_ioctl(struct block_device *bdev, fmode_t mode,
} }
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
static int mmc_blk_compat_ioctl(struct block_device *bdev, fmode_t mode, static int mmc_blk_compat_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
return mmc_blk_ioctl(bdev, mode, cmd, (unsigned long) compat_ptr(arg)); return mmc_blk_ioctl(bdev, mode, cmd, (unsigned long) compat_ptr(arg));

View file

@ -220,7 +220,7 @@ static void block2mtd_free_device(struct block2mtd_dev *dev)
* early_lookup_bdev when called from the early boot code. * early_lookup_bdev when called from the early boot code.
*/ */
static struct block_device __ref *mdtblock_early_get_bdev(const char *devname, static struct block_device __ref *mdtblock_early_get_bdev(const char *devname,
fmode_t mode, int timeout, struct block2mtd_dev *dev) blk_mode_t mode, int timeout, struct block2mtd_dev *dev)
{ {
struct block_device *bdev = ERR_PTR(-ENODEV); struct block_device *bdev = ERR_PTR(-ENODEV);
#ifndef MODULE #ifndef MODULE
@ -261,7 +261,7 @@ static struct block_device __ref *mdtblock_early_get_bdev(const char *devname,
static struct block2mtd_dev *add_device(char *devname, int erase_size, static struct block2mtd_dev *add_device(char *devname, int erase_size,
char *label, int timeout) char *label, int timeout)
{ {
const fmode_t mode = FMODE_READ | FMODE_WRITE; const blk_mode_t mode = BLK_OPEN_READ | BLK_OPEN_WRITE;
struct block_device *bdev; struct block_device *bdev;
struct block2mtd_dev *dev; struct block2mtd_dev *dev;
char *name; char *name;

View file

@ -182,7 +182,7 @@ static blk_status_t mtd_queue_rq(struct blk_mq_hw_ctx *hctx,
return BLK_STS_OK; return BLK_STS_OK;
} }
static int blktrans_open(struct gendisk *disk, fmode_t mode) static int blktrans_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct mtd_blktrans_dev *dev = disk->private_data; struct mtd_blktrans_dev *dev = disk->private_data;
int ret = 0; int ret = 0;
@ -208,7 +208,7 @@ static int blktrans_open(struct gendisk *disk, fmode_t mode)
ret = __get_mtd_device(dev->mtd); ret = __get_mtd_device(dev->mtd);
if (ret) if (ret)
goto error_release; goto error_release;
dev->writable = mode & FMODE_WRITE; dev->writable = mode & BLK_OPEN_WRITE;
unlock: unlock:
dev->open++; dev->open++;

View file

@ -227,7 +227,7 @@ static blk_status_t ubiblock_read(struct request *req)
return BLK_STS_OK; return BLK_STS_OK;
} }
static int ubiblock_open(struct gendisk *disk, fmode_t mode) static int ubiblock_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct ubiblock *dev = disk->private_data; struct ubiblock *dev = disk->private_data;
int ret; int ret;
@ -246,11 +246,10 @@ static int ubiblock_open(struct gendisk *disk, fmode_t mode)
* It's just a paranoid check, as write requests will get rejected * It's just a paranoid check, as write requests will get rejected
* in any case. * in any case.
*/ */
if (mode & FMODE_WRITE) { if (mode & BLK_OPEN_WRITE) {
ret = -EROFS; ret = -EROFS;
goto out_unlock; goto out_unlock;
} }
dev->desc = ubi_open_volume(dev->ubi_num, dev->vol_id, UBI_READONLY); dev->desc = ubi_open_volume(dev->ubi_num, dev->vol_id, UBI_READONLY);
if (IS_ERR(dev->desc)) { if (IS_ERR(dev->desc)) {
dev_err(disk_to_dev(dev->gd), "failed to open ubi volume %d_%d", dev_err(disk_to_dev(dev->gd), "failed to open ubi volume %d_%d",

View file

@ -1591,7 +1591,7 @@ static void nvme_ns_release(struct nvme_ns *ns)
nvme_put_ns(ns); nvme_put_ns(ns);
} }
static int nvme_open(struct gendisk *disk, fmode_t mode) static int nvme_open(struct gendisk *disk, blk_mode_t mode)
{ {
return nvme_ns_open(disk->private_data); return nvme_ns_open(disk->private_data);
} }

View file

@ -709,11 +709,11 @@ static int nvme_ns_ioctl(struct nvme_ns *ns, unsigned int cmd,
} }
} }
int nvme_ioctl(struct block_device *bdev, fmode_t mode, int nvme_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct nvme_ns *ns = bdev->bd_disk->private_data; struct nvme_ns *ns = bdev->bd_disk->private_data;
bool open_for_write = mode & FMODE_WRITE; bool open_for_write = mode & BLK_OPEN_WRITE;
void __user *argp = (void __user *)arg; void __user *argp = (void __user *)arg;
unsigned int flags = 0; unsigned int flags = 0;
@ -817,11 +817,11 @@ static int nvme_ns_head_ctrl_ioctl(struct nvme_ns *ns, unsigned int cmd,
return ret; return ret;
} }
int nvme_ns_head_ioctl(struct block_device *bdev, fmode_t mode, int nvme_ns_head_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct nvme_ns_head *head = bdev->bd_disk->private_data; struct nvme_ns_head *head = bdev->bd_disk->private_data;
bool open_for_write = mode & FMODE_WRITE; bool open_for_write = mode & BLK_OPEN_WRITE;
void __user *argp = (void __user *)arg; void __user *argp = (void __user *)arg;
struct nvme_ns *ns; struct nvme_ns *ns;
int srcu_idx, ret = -EWOULDBLOCK; int srcu_idx, ret = -EWOULDBLOCK;

View file

@ -402,7 +402,7 @@ static void nvme_ns_head_submit_bio(struct bio *bio)
srcu_read_unlock(&head->srcu, srcu_idx); srcu_read_unlock(&head->srcu, srcu_idx);
} }
static int nvme_ns_head_open(struct gendisk *disk, fmode_t mode) static int nvme_ns_head_open(struct gendisk *disk, blk_mode_t mode)
{ {
if (!nvme_tryget_ns_head(disk->private_data)) if (!nvme_tryget_ns_head(disk->private_data))
return -ENXIO; return -ENXIO;

View file

@ -836,10 +836,10 @@ void nvme_put_ns_head(struct nvme_ns_head *head);
int nvme_cdev_add(struct cdev *cdev, struct device *cdev_device, int nvme_cdev_add(struct cdev *cdev, struct device *cdev_device,
const struct file_operations *fops, struct module *owner); const struct file_operations *fops, struct module *owner);
void nvme_cdev_del(struct cdev *cdev, struct device *cdev_device); void nvme_cdev_del(struct cdev *cdev, struct device *cdev_device);
int nvme_ioctl(struct block_device *bdev, fmode_t mode, int nvme_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
long nvme_ns_chr_ioctl(struct file *file, unsigned int cmd, unsigned long arg); long nvme_ns_chr_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
int nvme_ns_head_ioctl(struct block_device *bdev, fmode_t mode, int nvme_ns_head_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
long nvme_ns_head_chr_ioctl(struct file *file, unsigned int cmd, long nvme_ns_head_chr_ioctl(struct file *file, unsigned int cmd,
unsigned long arg); unsigned long arg);

View file

@ -85,7 +85,7 @@ int nvmet_bdev_ns_enable(struct nvmet_ns *ns)
return -ENOTBLK; return -ENOTBLK;
ns->bdev = blkdev_get_by_path(ns->device_path, ns->bdev = blkdev_get_by_path(ns->device_path,
FMODE_READ | FMODE_WRITE, NULL, NULL); BLK_OPEN_READ | BLK_OPEN_WRITE, NULL, NULL);
if (IS_ERR(ns->bdev)) { if (IS_ERR(ns->bdev)) {
ret = PTR_ERR(ns->bdev); ret = PTR_ERR(ns->bdev);
if (ret != -ENOTBLK) { if (ret != -ENOTBLK) {

View file

@ -3234,7 +3234,7 @@ struct blk_mq_ops dasd_mq_ops = {
.exit_hctx = dasd_exit_hctx, .exit_hctx = dasd_exit_hctx,
}; };
static int dasd_open(struct gendisk *disk, fmode_t mode) static int dasd_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct dasd_device *base; struct dasd_device *base;
int rc; int rc;
@ -3268,14 +3268,12 @@ static int dasd_open(struct gendisk *disk, fmode_t mode)
rc = -ENODEV; rc = -ENODEV;
goto out; goto out;
} }
if ((mode & BLK_OPEN_WRITE) &&
if ((mode & FMODE_WRITE) &&
(test_bit(DASD_FLAG_DEVICE_RO, &base->flags) || (test_bit(DASD_FLAG_DEVICE_RO, &base->flags) ||
(base->features & DASD_FEATURE_READONLY))) { (base->features & DASD_FEATURE_READONLY))) {
rc = -EROFS; rc = -EROFS;
goto out; goto out;
} }
dasd_put_device(base); dasd_put_device(base);
return 0; return 0;

View file

@ -130,7 +130,8 @@ int dasd_scan_partitions(struct dasd_block *block)
struct block_device *bdev; struct block_device *bdev;
int rc; int rc;
bdev = blkdev_get_by_dev(disk_devt(block->gdp), FMODE_READ, NULL, NULL); bdev = blkdev_get_by_dev(disk_devt(block->gdp), BLK_OPEN_READ, NULL,
NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
DBF_DEV_EVENT(DBF_ERR, block->base, DBF_DEV_EVENT(DBF_ERR, block->base,
"scan partitions error, blkdev_get returned %ld", "scan partitions error, blkdev_get returned %ld",

View file

@ -965,7 +965,8 @@ int dasd_scan_partitions(struct dasd_block *);
void dasd_destroy_partitions(struct dasd_block *); void dasd_destroy_partitions(struct dasd_block *);
/* externals in dasd_ioctl.c */ /* externals in dasd_ioctl.c */
int dasd_ioctl(struct block_device *, fmode_t, unsigned int, unsigned long); int dasd_ioctl(struct block_device *bdev, blk_mode_t mode, unsigned int cmd,
unsigned long arg);
int dasd_set_read_only(struct block_device *bdev, bool ro); int dasd_set_read_only(struct block_device *bdev, bool ro);
/* externals in dasd_proc.c */ /* externals in dasd_proc.c */

View file

@ -612,7 +612,7 @@ static int dasd_ioctl_readall_cmb(struct dasd_block *block, unsigned int cmd,
return ret; return ret;
} }
int dasd_ioctl(struct block_device *bdev, fmode_t mode, int dasd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct dasd_block *block; struct dasd_block *block;

View file

@ -28,7 +28,7 @@
#define DCSSBLK_PARM_LEN 400 #define DCSSBLK_PARM_LEN 400
#define DCSS_BUS_ID_SIZE 20 #define DCSS_BUS_ID_SIZE 20
static int dcssblk_open(struct gendisk *disk, fmode_t mode); static int dcssblk_open(struct gendisk *disk, blk_mode_t mode);
static void dcssblk_release(struct gendisk *disk); static void dcssblk_release(struct gendisk *disk);
static void dcssblk_submit_bio(struct bio *bio); static void dcssblk_submit_bio(struct bio *bio);
static long dcssblk_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, static long dcssblk_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff,
@ -809,7 +809,7 @@ out_buf:
} }
static int static int
dcssblk_open(struct gendisk *disk, fmode_t mode) dcssblk_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct dcssblk_dev_info *dev_info = disk->private_data; struct dcssblk_dev_info *dev_info = disk->private_data;
int rc; int rc;

View file

@ -1298,7 +1298,7 @@ static bool sd_need_revalidate(struct gendisk *disk, struct scsi_disk *sdkp)
/** /**
* sd_open - open a scsi disk device * sd_open - open a scsi disk device
* @disk: disk to open * @disk: disk to open
* @mode: FMODE_* mask * @mode: open mode
* *
* Returns 0 if successful. Returns a negated errno value in case * Returns 0 if successful. Returns a negated errno value in case
* of error. * of error.
@ -1310,7 +1310,7 @@ static bool sd_need_revalidate(struct gendisk *disk, struct scsi_disk *sdkp)
* *
* Locking: called with disk->open_mutex held. * Locking: called with disk->open_mutex held.
**/ **/
static int sd_open(struct gendisk *disk, fmode_t mode) static int sd_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct scsi_disk *sdkp = scsi_disk(disk); struct scsi_disk *sdkp = scsi_disk(disk);
struct scsi_device *sdev = sdkp->device; struct scsi_device *sdev = sdkp->device;
@ -1336,7 +1336,8 @@ static int sd_open(struct gendisk *disk, fmode_t mode)
* If the drive is empty, just let the open fail. * If the drive is empty, just let the open fail.
*/ */
retval = -ENOMEDIUM; retval = -ENOMEDIUM;
if (sdev->removable && !sdkp->media_present && !(mode & FMODE_NDELAY)) if (sdev->removable && !sdkp->media_present &&
!(mode & BLK_OPEN_NDELAY))
goto error_out; goto error_out;
/* /*
@ -1344,7 +1345,7 @@ static int sd_open(struct gendisk *disk, fmode_t mode)
* if the user expects to be able to write to the thing. * if the user expects to be able to write to the thing.
*/ */
retval = -EROFS; retval = -EROFS;
if (sdkp->write_prot && (mode & FMODE_WRITE)) if (sdkp->write_prot && (mode & BLK_OPEN_WRITE))
goto error_out; goto error_out;
/* /*
@ -1379,7 +1380,7 @@ error_out:
* Note: may block (uninterruptible) if error recovery is underway * Note: may block (uninterruptible) if error recovery is underway
* on this disk. * on this disk.
* *
* Locking: called with bdev->bd_disk->open_mutex held. * Locking: called with disk->open_mutex held.
**/ **/
static void sd_release(struct gendisk *disk) static void sd_release(struct gendisk *disk)
{ {
@ -1424,7 +1425,7 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
/** /**
* sd_ioctl - process an ioctl * sd_ioctl - process an ioctl
* @bdev: target block device * @bdev: target block device
* @mode: FMODE_* mask * @mode: open mode
* @cmd: ioctl command number * @cmd: ioctl command number
* @arg: this is third argument given to ioctl(2) system call. * @arg: this is third argument given to ioctl(2) system call.
* Often contains a pointer. * Often contains a pointer.
@ -1435,7 +1436,7 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
* Note: most ioctls are forward onto the block subsystem or further * Note: most ioctls are forward onto the block subsystem or further
* down in the scsi subsystem. * down in the scsi subsystem.
**/ **/
static int sd_ioctl(struct block_device *bdev, fmode_t mode, static int sd_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk;
@ -1457,13 +1458,13 @@ static int sd_ioctl(struct block_device *bdev, fmode_t mode,
* access to the device is prohibited. * access to the device is prohibited.
*/ */
error = scsi_ioctl_block_when_processing_errors(sdp, cmd, error = scsi_ioctl_block_when_processing_errors(sdp, cmd,
(mode & FMODE_NDELAY) != 0); (mode & BLK_OPEN_NDELAY));
if (error) if (error)
return error; return error;
if (is_sed_ioctl(cmd)) if (is_sed_ioctl(cmd))
return sed_ioctl(sdkp->opal_dev, cmd, p); return sed_ioctl(sdkp->opal_dev, cmd, p);
return scsi_ioctl(sdp, mode & FMODE_WRITE, cmd, p); return scsi_ioctl(sdp, mode & BLK_OPEN_WRITE, cmd, p);
} }
static void set_media_not_present(struct scsi_disk *sdkp) static void set_media_not_present(struct scsi_disk *sdkp)

View file

@ -484,7 +484,7 @@ static void sr_revalidate_disk(struct scsi_cd *cd)
get_sectorsize(cd); get_sectorsize(cd);
} }
static int sr_block_open(struct gendisk *disk, fmode_t mode) static int sr_block_open(struct gendisk *disk, blk_mode_t mode)
{ {
struct scsi_cd *cd = scsi_cd(disk); struct scsi_cd *cd = scsi_cd(disk);
struct scsi_device *sdev = cd->device; struct scsi_device *sdev = cd->device;
@ -518,8 +518,8 @@ static void sr_block_release(struct gendisk *disk)
scsi_device_put(cd->device); scsi_device_put(cd->device);
} }
static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, static int sr_block_ioctl(struct block_device *bdev, blk_mode_t mode,
unsigned long arg) unsigned cmd, unsigned long arg)
{ {
struct scsi_cd *cd = scsi_cd(bdev->bd_disk); struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
struct scsi_device *sdev = cd->device; struct scsi_device *sdev = cd->device;
@ -532,7 +532,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
mutex_lock(&cd->lock); mutex_lock(&cd->lock);
ret = scsi_ioctl_block_when_processing_errors(sdev, cmd, ret = scsi_ioctl_block_when_processing_errors(sdev, cmd,
(mode & FMODE_NDELAY) != 0); (mode & BLK_OPEN_NDELAY));
if (ret) if (ret)
goto out; goto out;
@ -543,7 +543,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
if (ret != -ENOSYS) if (ret != -ENOSYS)
goto put; goto put;
} }
ret = scsi_ioctl(sdev, mode & FMODE_WRITE, cmd, argp); ret = scsi_ioctl(sdev, mode & BLK_OPEN_WRITE, cmd, argp);
put: put:
scsi_autopm_put_device(sdev); scsi_autopm_put_device(sdev);

View file

@ -90,7 +90,7 @@ static int iblock_configure_device(struct se_device *dev)
struct request_queue *q; struct request_queue *q;
struct block_device *bd = NULL; struct block_device *bd = NULL;
struct blk_integrity *bi; struct blk_integrity *bi;
fmode_t mode; blk_mode_t mode = BLK_OPEN_READ;
unsigned int max_write_zeroes_sectors; unsigned int max_write_zeroes_sectors;
int ret; int ret;
@ -108,9 +108,8 @@ static int iblock_configure_device(struct se_device *dev)
pr_debug( "IBLOCK: Claiming struct block_device: %s\n", pr_debug( "IBLOCK: Claiming struct block_device: %s\n",
ib_dev->ibd_udev_path); ib_dev->ibd_udev_path);
mode = FMODE_READ;
if (!ib_dev->ibd_readonly) if (!ib_dev->ibd_readonly)
mode |= FMODE_WRITE; mode |= BLK_OPEN_WRITE;
else else
dev->dev_flags |= DF_READ_ONLY; dev->dev_flags |= DF_READ_ONLY;

View file

@ -366,8 +366,8 @@ static int pscsi_create_type_disk(struct se_device *dev, struct scsi_device *sd)
* Claim exclusive struct block_device access to struct scsi_device * Claim exclusive struct block_device access to struct scsi_device
* for TYPE_DISK and TYPE_ZBC using supplied udev_path * for TYPE_DISK and TYPE_ZBC using supplied udev_path
*/ */
bd = blkdev_get_by_path(dev->udev_path, FMODE_WRITE | FMODE_READ, pdv, bd = blkdev_get_by_path(dev->udev_path, BLK_OPEN_WRITE | BLK_OPEN_READ,
NULL); pdv, NULL);
if (IS_ERR(bd)) { if (IS_ERR(bd)) {
pr_err("pSCSI: blkdev_get_by_path() failed\n"); pr_err("pSCSI: blkdev_get_by_path() failed\n");
scsi_device_put(sd); scsi_device_put(sd);

View file

@ -257,7 +257,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,
return -EINVAL; return -EINVAL;
} }
bdev = blkdev_get_by_path(device_path, FMODE_WRITE, bdev = blkdev_get_by_path(device_path, BLK_OPEN_WRITE,
fs_info->bdev_holder, NULL); fs_info->bdev_holder, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
btrfs_err(fs_info, "target device %s is invalid!", device_path); btrfs_err(fs_info, "target device %s is invalid!", device_path);

View file

@ -849,7 +849,7 @@ out:
* All other options will be parsed on much later in the mount process and * All other options will be parsed on much later in the mount process and
* only when we need to allocate a new super block. * only when we need to allocate a new super block.
*/ */
static int btrfs_parse_device_options(const char *options, fmode_t flags) static int btrfs_parse_device_options(const char *options, blk_mode_t flags)
{ {
substring_t args[MAX_OPT_ARGS]; substring_t args[MAX_OPT_ARGS];
char *device_name, *opts, *orig, *p; char *device_name, *opts, *orig, *p;
@ -1440,7 +1440,7 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type,
struct btrfs_fs_devices *fs_devices = NULL; struct btrfs_fs_devices *fs_devices = NULL;
struct btrfs_fs_info *fs_info = NULL; struct btrfs_fs_info *fs_info = NULL;
void *new_sec_opts = NULL; void *new_sec_opts = NULL;
fmode_t mode = sb_open_mode(flags); blk_mode_t mode = sb_open_mode(flags);
int error = 0; int error = 0;
if (data) { if (data) {
@ -2185,7 +2185,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd,
switch (cmd) { switch (cmd) {
case BTRFS_IOC_SCAN_DEV: case BTRFS_IOC_SCAN_DEV:
mutex_lock(&uuid_mutex); mutex_lock(&uuid_mutex);
device = btrfs_scan_one_device(vol->name, FMODE_READ); device = btrfs_scan_one_device(vol->name, BLK_OPEN_READ);
ret = PTR_ERR_OR_ZERO(device); ret = PTR_ERR_OR_ZERO(device);
mutex_unlock(&uuid_mutex); mutex_unlock(&uuid_mutex);
break; break;
@ -2199,7 +2199,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd,
break; break;
case BTRFS_IOC_DEVICES_READY: case BTRFS_IOC_DEVICES_READY:
mutex_lock(&uuid_mutex); mutex_lock(&uuid_mutex);
device = btrfs_scan_one_device(vol->name, FMODE_READ); device = btrfs_scan_one_device(vol->name, BLK_OPEN_READ);
if (IS_ERR(device)) { if (IS_ERR(device)) {
mutex_unlock(&uuid_mutex); mutex_unlock(&uuid_mutex);
ret = PTR_ERR(device); ret = PTR_ERR(device);

View file

@ -490,7 +490,7 @@ static struct btrfs_fs_devices *find_fsid_with_metadata_uuid(
static int static int
btrfs_get_bdev_and_sb(const char *device_path, fmode_t flags, void *holder, btrfs_get_bdev_and_sb(const char *device_path, blk_mode_t flags, void *holder,
int flush, struct block_device **bdev, int flush, struct block_device **bdev,
struct btrfs_super_block **disk_super) struct btrfs_super_block **disk_super)
{ {
@ -590,7 +590,7 @@ static int btrfs_free_stale_devices(dev_t devt, struct btrfs_device *skip_device
* fs_devices->device_list_mutex here. * fs_devices->device_list_mutex here.
*/ */
static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices, static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,
struct btrfs_device *device, fmode_t flags, struct btrfs_device *device, blk_mode_t flags,
void *holder) void *holder)
{ {
struct block_device *bdev; struct block_device *bdev;
@ -1207,7 +1207,7 @@ void btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
} }
static int open_fs_devices(struct btrfs_fs_devices *fs_devices, static int open_fs_devices(struct btrfs_fs_devices *fs_devices,
fmode_t flags, void *holder) blk_mode_t flags, void *holder)
{ {
struct btrfs_device *device; struct btrfs_device *device;
struct btrfs_device *latest_dev = NULL; struct btrfs_device *latest_dev = NULL;
@ -1255,7 +1255,7 @@ static int devid_cmp(void *priv, const struct list_head *a,
} }
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
fmode_t flags, void *holder) blk_mode_t flags, void *holder)
{ {
int ret; int ret;
@ -1346,7 +1346,7 @@ int btrfs_forget_devices(dev_t devt)
* and we are not allowed to call set_blocksize during the scan. The superblock * and we are not allowed to call set_blocksize during the scan. The superblock
* is read via pagecache * is read via pagecache
*/ */
struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags) struct btrfs_device *btrfs_scan_one_device(const char *path, blk_mode_t flags)
{ {
struct btrfs_super_block *disk_super; struct btrfs_super_block *disk_super;
bool new_device_added = false; bool new_device_added = false;
@ -2378,7 +2378,7 @@ int btrfs_get_dev_args_from_path(struct btrfs_fs_info *fs_info,
return -ENOMEM; return -ENOMEM;
} }
ret = btrfs_get_bdev_and_sb(path, FMODE_READ, NULL, 0, ret = btrfs_get_bdev_and_sb(path, BLK_OPEN_READ, NULL, 0,
&bdev, &disk_super); &bdev, &disk_super);
if (ret) { if (ret) {
btrfs_put_dev_args_from_path(args); btrfs_put_dev_args_from_path(args);
@ -2625,7 +2625,7 @@ int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path
if (sb_rdonly(sb) && !fs_devices->seeding) if (sb_rdonly(sb) && !fs_devices->seeding)
return -EROFS; return -EROFS;
bdev = blkdev_get_by_path(device_path, FMODE_WRITE, bdev = blkdev_get_by_path(device_path, BLK_OPEN_WRITE,
fs_info->bdev_holder, NULL); fs_info->bdev_holder, NULL);
if (IS_ERR(bdev)) if (IS_ERR(bdev))
return PTR_ERR(bdev); return PTR_ERR(bdev);
@ -6907,7 +6907,7 @@ static struct btrfs_fs_devices *open_seed_devices(struct btrfs_fs_info *fs_info,
if (IS_ERR(fs_devices)) if (IS_ERR(fs_devices))
return fs_devices; return fs_devices;
ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); ret = open_fs_devices(fs_devices, BLK_OPEN_READ, fs_info->bdev_holder);
if (ret) { if (ret) {
free_fs_devices(fs_devices); free_fs_devices(fs_devices);
return ERR_PTR(ret); return ERR_PTR(ret);

View file

@ -599,8 +599,8 @@ struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans,
u64 type); u64 type);
void btrfs_mapping_tree_free(struct extent_map_tree *tree); void btrfs_mapping_tree_free(struct extent_map_tree *tree);
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
fmode_t flags, void *holder); blk_mode_t flags, void *holder);
struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags); struct btrfs_device *btrfs_scan_one_device(const char *path, blk_mode_t flags);
int btrfs_forget_devices(dev_t devt); int btrfs_forget_devices(dev_t devt);
void btrfs_close_devices(struct btrfs_fs_devices *fs_devices); void btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices); void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices);

View file

@ -254,7 +254,7 @@ static int erofs_init_device(struct erofs_buf *buf, struct super_block *sb,
return PTR_ERR(fscache); return PTR_ERR(fscache);
dif->fscache = fscache; dif->fscache = fscache;
} else if (!sbi->devs->flatdev) { } else if (!sbi->devs->flatdev) {
bdev = blkdev_get_by_path(dif->path, FMODE_READ, sb->s_type, bdev = blkdev_get_by_path(dif->path, BLK_OPEN_READ, sb->s_type,
NULL); NULL);
if (IS_ERR(bdev)) if (IS_ERR(bdev))
return PTR_ERR(bdev); return PTR_ERR(bdev);

View file

@ -1112,7 +1112,7 @@ static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb)
{ {
struct block_device *bdev; struct block_device *bdev;
bdev = blkdev_get_by_dev(dev, FMODE_READ | FMODE_WRITE, sb, bdev = blkdev_get_by_dev(dev, BLK_OPEN_READ | BLK_OPEN_WRITE, sb,
&ext4_holder_ops); &ext4_holder_ops);
if (IS_ERR(bdev)) if (IS_ERR(bdev))
goto fail; goto fail;

View file

@ -3993,7 +3993,7 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
unsigned int max_devices = MAX_DEVICES; unsigned int max_devices = MAX_DEVICES;
unsigned int logical_blksize; unsigned int logical_blksize;
fmode_t mode = sb_open_mode(sbi->sb->s_flags); blk_mode_t mode = sb_open_mode(sbi->sb->s_flags);
int i; int i;
/* Initialize single device information */ /* Initialize single device information */

View file

@ -1100,7 +1100,7 @@ int lmLogOpen(struct super_block *sb)
* file systems to log may have n-to-1 relationship; * file systems to log may have n-to-1 relationship;
*/ */
bdev = blkdev_get_by_dev(sbi->logdev, FMODE_READ | FMODE_WRITE, bdev = blkdev_get_by_dev(sbi->logdev, BLK_OPEN_READ | BLK_OPEN_WRITE,
log, NULL); log, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
rc = PTR_ERR(bdev); rc = PTR_ERR(bdev);

View file

@ -243,7 +243,8 @@ bl_parse_simple(struct nfs_server *server, struct pnfs_block_dev *d,
if (!dev) if (!dev)
return -EIO; return -EIO;
bdev = blkdev_get_by_dev(dev, FMODE_READ | FMODE_WRITE, NULL, NULL); bdev = blkdev_get_by_dev(dev, BLK_OPEN_READ | BLK_OPEN_WRITE, NULL,
NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
printk(KERN_WARNING "pNFS: failed to open device %d:%d (%ld)\n", printk(KERN_WARNING "pNFS: failed to open device %d:%d (%ld)\n",
MAJOR(dev), MINOR(dev), PTR_ERR(bdev)); MAJOR(dev), MINOR(dev), PTR_ERR(bdev));
@ -312,7 +313,7 @@ bl_open_path(struct pnfs_block_volume *v, const char *prefix)
if (!devname) if (!devname)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
bdev = blkdev_get_by_path(devname, FMODE_READ | FMODE_WRITE, NULL, bdev = blkdev_get_by_path(devname, BLK_OPEN_READ | BLK_OPEN_WRITE, NULL,
NULL); NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev)) {
pr_warn("pNFS: failed to open device %s (%ld)\n", pr_warn("pNFS: failed to open device %s (%ld)\n",

View file

@ -1786,7 +1786,8 @@ static ssize_t o2hb_region_dev_store(struct config_item *item,
goto out2; goto out2;
reg->hr_bdev = blkdev_get_by_dev(f.file->f_mapping->host->i_rdev, reg->hr_bdev = blkdev_get_by_dev(f.file->f_mapping->host->i_rdev,
FMODE_WRITE | FMODE_READ, NULL, NULL); BLK_OPEN_WRITE | BLK_OPEN_READ, NULL,
NULL);
if (IS_ERR(reg->hr_bdev)) { if (IS_ERR(reg->hr_bdev)) {
ret = PTR_ERR(reg->hr_bdev); ret = PTR_ERR(reg->hr_bdev);
reg->hr_bdev = NULL; reg->hr_bdev = NULL;

View file

@ -2598,7 +2598,7 @@ static int journal_init_dev(struct super_block *super,
struct reiserfs_journal *journal, struct reiserfs_journal *journal,
const char *jdev_name) const char *jdev_name)
{ {
fmode_t blkdev_mode = FMODE_READ; blk_mode_t blkdev_mode = BLK_OPEN_READ;
void *holder = journal; void *holder = journal;
int result; int result;
dev_t jdev; dev_t jdev;
@ -2610,7 +2610,7 @@ static int journal_init_dev(struct super_block *super,
new_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev; new_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev;
if (!bdev_read_only(super->s_bdev)) if (!bdev_read_only(super->s_bdev))
blkdev_mode |= FMODE_WRITE; blkdev_mode |= BLK_OPEN_WRITE;
/* there is no "jdev" option and journal is on separate device */ /* there is no "jdev" option and journal is on separate device */
if ((!jdev_name || !jdev_name[0])) { if ((!jdev_name || !jdev_name[0])) {

View file

@ -396,7 +396,7 @@ xfs_blkdev_get(
{ {
int error = 0; int error = 0;
*bdevp = blkdev_get_by_path(name, FMODE_READ | FMODE_WRITE, mp, *bdevp = blkdev_get_by_path(name, BLK_OPEN_READ | BLK_OPEN_WRITE, mp,
&xfs_holder_ops); &xfs_holder_ops);
if (IS_ERR(*bdevp)) { if (IS_ERR(*bdevp)) {
error = PTR_ERR(*bdevp); error = PTR_ERR(*bdevp);

View file

@ -112,6 +112,19 @@ struct blk_integrity {
unsigned char tag_size; unsigned char tag_size;
}; };
typedef unsigned int __bitwise blk_mode_t;
/* open for reading */
#define BLK_OPEN_READ ((__force blk_mode_t)(1 << 0))
/* open for writing */
#define BLK_OPEN_WRITE ((__force blk_mode_t)(1 << 1))
/* open exclusively (vs other exclusive openers */
#define BLK_OPEN_EXCL ((__force blk_mode_t)(1 << 2))
/* opened with O_NDELAY */
#define BLK_OPEN_NDELAY ((__force blk_mode_t)(1 << 3))
/* open for "writes" only for ioctls (specialy hack for floppy.c) */
#define BLK_OPEN_WRITE_IOCTL ((__force blk_mode_t)(1 << 4))
struct gendisk { struct gendisk {
/* /*
* major/first_minor/minors should not be set by any new driver, the * major/first_minor/minors should not be set by any new driver, the
@ -187,6 +200,7 @@ struct gendisk {
struct badblocks *bb; struct badblocks *bb;
struct lockdep_map lockdep_map; struct lockdep_map lockdep_map;
u64 diskseq; u64 diskseq;
blk_mode_t open_mode;
/* /*
* Independent sector access ranges. This is always NULL for * Independent sector access ranges. This is always NULL for
@ -1363,10 +1377,12 @@ struct block_device_operations {
void (*submit_bio)(struct bio *bio); void (*submit_bio)(struct bio *bio);
int (*poll_bio)(struct bio *bio, struct io_comp_batch *iob, int (*poll_bio)(struct bio *bio, struct io_comp_batch *iob,
unsigned int flags); unsigned int flags);
int (*open)(struct gendisk *disk, fmode_t mode); int (*open)(struct gendisk *disk, blk_mode_t mode);
void (*release)(struct gendisk *disk); void (*release)(struct gendisk *disk);
int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*ioctl)(struct block_device *bdev, blk_mode_t mode,
int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); unsigned cmd, unsigned long arg);
int (*compat_ioctl)(struct block_device *bdev, blk_mode_t mode,
unsigned cmd, unsigned long arg);
unsigned int (*check_events) (struct gendisk *disk, unsigned int (*check_events) (struct gendisk *disk,
unsigned int clearing); unsigned int clearing);
void (*unlock_native_capacity) (struct gendisk *); void (*unlock_native_capacity) (struct gendisk *);
@ -1393,7 +1409,7 @@ struct block_device_operations {
}; };
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
extern int blkdev_compat_ptr_ioctl(struct block_device *, fmode_t, extern int blkdev_compat_ptr_ioctl(struct block_device *, blk_mode_t,
unsigned int, unsigned long); unsigned int, unsigned long);
#else #else
#define blkdev_compat_ptr_ioctl NULL #define blkdev_compat_ptr_ioctl NULL
@ -1455,11 +1471,11 @@ struct blk_holder_ops {
* as stored in sb->s_flags. * as stored in sb->s_flags.
*/ */
#define sb_open_mode(flags) \ #define sb_open_mode(flags) \
(FMODE_READ | (((flags) & SB_RDONLY) ? 0 : FMODE_WRITE)) (BLK_OPEN_READ | (((flags) & SB_RDONLY) ? 0 : BLK_OPEN_WRITE))
struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder, struct block_device *blkdev_get_by_dev(dev_t dev, blk_mode_t mode, void *holder,
const struct blk_holder_ops *hops); const struct blk_holder_ops *hops);
struct block_device *blkdev_get_by_path(const char *path, fmode_t mode, struct block_device *blkdev_get_by_path(const char *path, blk_mode_t mode,
void *holder, const struct blk_holder_ops *hops); void *holder, const struct blk_holder_ops *hops);
int bd_prepare_to_claim(struct block_device *bdev, void *holder, int bd_prepare_to_claim(struct block_device *bdev, void *holder,
const struct blk_holder_ops *hops); const struct blk_holder_ops *hops);

View file

@ -13,6 +13,7 @@
#include <linux/fs.h> /* not really needed, later.. */ #include <linux/fs.h> /* not really needed, later.. */
#include <linux/list.h> #include <linux/list.h>
#include <linux/blkdev.h>
#include <scsi/scsi_common.h> #include <scsi/scsi_common.h>
#include <uapi/linux/cdrom.h> #include <uapi/linux/cdrom.h>
@ -101,7 +102,7 @@ int cdrom_read_tocentry(struct cdrom_device_info *cdi,
struct cdrom_tocentry *entry); struct cdrom_tocentry *entry);
/* the general block_device operations structure: */ /* the general block_device operations structure: */
int cdrom_open(struct cdrom_device_info *cdi, fmode_t mode); int cdrom_open(struct cdrom_device_info *cdi, blk_mode_t mode);
void cdrom_release(struct cdrom_device_info *cdi); void cdrom_release(struct cdrom_device_info *cdi);
int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);

View file

@ -166,7 +166,7 @@ void dm_error(const char *message);
struct dm_dev { struct dm_dev {
struct block_device *bdev; struct block_device *bdev;
struct dax_device *dax_dev; struct dax_device *dax_dev;
fmode_t mode; blk_mode_t mode;
char name[16]; char name[16];
}; };
@ -174,7 +174,7 @@ struct dm_dev {
* Constructors should call these functions to ensure destination devices * Constructors should call these functions to ensure destination devices
* are opened/closed correctly. * are opened/closed correctly.
*/ */
int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode, int dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
struct dm_dev **result); struct dm_dev **result);
void dm_put_device(struct dm_target *ti, struct dm_dev *d); void dm_put_device(struct dm_target *ti, struct dm_dev *d);
@ -543,7 +543,7 @@ int dm_set_geometry(struct mapped_device *md, struct hd_geometry *geo);
/* /*
* First create an empty table. * First create an empty table.
*/ */
int dm_table_create(struct dm_table **result, fmode_t mode, int dm_table_create(struct dm_table **result, blk_mode_t mode,
unsigned int num_targets, struct mapped_device *md); unsigned int num_targets, struct mapped_device *md);
/* /*
@ -586,7 +586,7 @@ void dm_sync_table(struct mapped_device *md);
* Queries * Queries
*/ */
sector_t dm_table_get_size(struct dm_table *t); sector_t dm_table_get_size(struct dm_table *t);
fmode_t dm_table_get_mode(struct dm_table *t); blk_mode_t dm_table_get_mode(struct dm_table *t);
struct mapped_device *dm_table_get_md(struct dm_table *t); struct mapped_device *dm_table_get_md(struct dm_table *t);
const char *dm_table_device_name(struct dm_table *t); const char *dm_table_device_name(struct dm_table *t);

View file

@ -356,8 +356,8 @@ static int swsusp_swap_check(void)
return res; return res;
root_swap = res; root_swap = res;
hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device, FMODE_WRITE, hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device,
NULL, NULL); BLK_OPEN_WRITE, NULL, NULL);
if (IS_ERR(hib_resume_bdev)) if (IS_ERR(hib_resume_bdev))
return PTR_ERR(hib_resume_bdev); return PTR_ERR(hib_resume_bdev);
@ -1521,7 +1521,7 @@ int swsusp_check(bool snapshot_test)
void *holder = snapshot_test ? &swsusp_holder : NULL; void *holder = snapshot_test ? &swsusp_holder : NULL;
int error; int error;
hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device, FMODE_READ, hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device, BLK_OPEN_READ,
holder, NULL); holder, NULL);
if (!IS_ERR(hib_resume_bdev)) { if (!IS_ERR(hib_resume_bdev)) {
set_blocksize(hib_resume_bdev, PAGE_SIZE); set_blocksize(hib_resume_bdev, PAGE_SIZE);

View file

@ -2770,7 +2770,7 @@ static int claim_swapfile(struct swap_info_struct *p, struct inode *inode)
if (S_ISBLK(inode->i_mode)) { if (S_ISBLK(inode->i_mode)) {
p->bdev = blkdev_get_by_dev(inode->i_rdev, p->bdev = blkdev_get_by_dev(inode->i_rdev,
FMODE_READ | FMODE_WRITE, p, NULL); BLK_OPEN_READ | BLK_OPEN_WRITE, p, NULL);
if (IS_ERR(p->bdev)) { if (IS_ERR(p->bdev)) {
error = PTR_ERR(p->bdev); error = PTR_ERR(p->bdev);
p->bdev = NULL; p->bdev = NULL;