btrfs: corret fmode_t annotations
PATCH 1/1 btrfs: corret fmode_t annotations
Make sure to propagate fmode_t properly and use the right constants for it. Note that the actual constants don't seem to be quite correct as we can write to various devices opened FMODE_READ.
Signed-off-by Christoph Hellwig <[email protected]>
fs/btrfs/super.c +9 -5
@@ -240,7 +240,7 @@ int btrfs_parse_options(struct btrfs_roo* All other options will be parsed on much later in the mount process and * only when we need to allocate a new super block. */ -static int btrfs_parse_early_options (const char *options,int flags, +static int btrfs_parse_early_options (const char *options,fmode_t flags,void *holder,char **subvol_name,struct btrfs_fs_devices **fs_devices) {
@@ -416,18 +416,22 @@ static int btrfs_get_sb(struct file_syststruct super_block *s;struct dentry *root;struct btrfs_fs_devices *fs_devices =NULL ; +fmode_t mode =FMODE_READ ;int error =0 ; - error =btrfs_parse_early_options (data, flags, fs_type, +if (!(flags &MS_RDONLY )) + mode |=FMODE_WRITE ; + + error =btrfs_parse_early_options (data, mode, fs_type, &subvol_name, &fs_devices);if (error) goto error; - error =btrfs_scan_one_device (dev_name, flags, fs_type, &fs_devices); + error =btrfs_scan_one_device (dev_name, mode, fs_type, &fs_devices);if (error) goto error_free_subvol_name; - error =btrfs_open_devices (fs_devices, flags, fs_type); + error =btrfs_open_devices (fs_devices, mode, fs_type);if (error) goto error_free_subvol_name;
@@ -589,7 +593,7 @@ static long btrfs_control_ioctl(struct f len =strnlen (vol->name,BTRFS_PATH_NAME_MAX );switch (cmd) {case BTRFS_IOC_SCAN_DEV : - ret =btrfs_scan_one_device (vol->name,MS_RDONLY , + ret =btrfs_scan_one_device (vol->name,FMODE_READ , &btrfs_fs_type, &fs_devices);break ; }
fs/btrfs/volumes.c +9 -9
@@ -392,7 +392,7 @@ int btrfs_close_devices(struct btrfs_fs_ }int __btrfs_open_devices (struct btrfs_fs_devices *fs_devices, -int flags,void *holder) +fmode_t flags,void *holder) {struct block_device *bdev;struct list_head *head = &fs_devices->devices;
@@ -467,7 +467,7 @@ int __btrfs_open_devices(struct btrfs_fs error_brelse:brelse (bh); error_close: -close_bdev_exclusive (bdev,MS_RDONLY ); +close_bdev_exclusive (bdev,FMODE_READ ); error:continue ; }
@@ -486,7 +486,7 @@ out: }int btrfs_open_devices (struct btrfs_fs_devices *fs_devices, -int flags,void *holder) +fmode_t flags,void *holder) {int ret;
@@ -505,7 +505,7 @@ int btrfs_open_devices(struct btrfs_fs_dreturn ret; } -int btrfs_scan_one_device (const char *path,int flags,void *holder, +int btrfs_scan_one_device (const char *path,fmode_t flags,void *holder,struct btrfs_fs_devices **fs_devices_ret) {struct btrfs_super_block *disk_super;
@@ -1006,7 +1006,7 @@ int btrfs_rm_device(struct btrfs_root *r goto out; } }else { - bdev =open_bdev_exclusive (device_path,MS_RDONLY , + bdev =open_bdev_exclusive (device_path,FMODE_READ , root->fs_info->bdev_holder);if (IS_ERR (bdev)) { ret =PTR_ERR (bdev);
@@ -1076,7 +1076,7 @@ int btrfs_rm_device(struct btrfs_root *rBUG_ON (device->writeable);brelse (bh);if (bdev) -close_bdev_exclusive (bdev,MS_RDONLY ); +close_bdev_exclusive (bdev,FMODE_READ );if (device->bdev) {close_bdev_exclusive (device->bdev, device->mode);
@@ -1119,7 +1119,7 @@ int btrfs_rm_device(struct btrfs_root *r }if (bdev) {/* one close for us */ -close_bdev_exclusive (bdev,MS_RDONLY ); +close_bdev_exclusive (bdev,FMODE_READ ); }kfree (device->name);kfree (device);
@@ -1130,7 +1130,7 @@ error_brelse:brelse (bh); error_close:if (bdev) -close_bdev_exclusive (bdev,MS_RDONLY ); +close_bdev_exclusive (bdev,FMODE_READ ); out:mutex_unlock (&root->fs_info->volume_mutex);mutex_unlock (&uuid_mutex);
@@ -2911,7 +2911,7 @@ static int open_seed_devices(struct btrf goto out; } - ret =__btrfs_open_devices (fs_devices,MS_RDONLY , + ret =__btrfs_open_devices (fs_devices,FMODE_READ , root->fs_info->bdev_holder);if (ret) goto out;
fs/btrfs/volumes.h +2 -2
@@ -135,8 +135,8 @@ int btrfs_map_bio(struct btrfs_root *roo int mirror_num, int async_submit);int btrfs_read_super_device (struct btrfs_root *root,struct extent_buffer *buf);int btrfs_open_devices (struct btrfs_fs_devices *fs_devices, -int flags,void *holder); -int btrfs_scan_one_device (const char *path,int flags,void *holder, +fmode_t flags,void *holder); +int btrfs_scan_one_device (const char *path,fmode_t flags,void *holder,struct btrfs_fs_devices **fs_devices_ret);int btrfs_close_devices (struct btrfs_fs_devices *fs_devices);int btrfs_close_extra_devices (struct btrfs_fs_devices *fs_devices);