From: Zygo Blaxell Date: Sun, 5 Dec 2021 08:26:10 +0000 (-0500) Subject: Revert "Add an ioctl to set/retrive the device properties" X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a63d2dbb61f8f801f835cc8d35e0916e00fc5e0;p=linux Revert "Add an ioctl to set/retrive the device properties" This reverts commit 20e475fb0a2349c62fe282c344f358a06afd2232. --- diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index db0e1f870d98..74f8e5c1f8bf 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -4971,71 +4971,6 @@ out_drop_write: return ret; } -static long btrfs_ioctl_dev_properties(struct file *file, - void __user *argp) -{ - struct inode *inode = file_inode(file); - struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); - struct btrfs_ioctl_dev_properties dev_props; - struct btrfs_device *device; - struct btrfs_root *root = fs_info->chunk_root; - struct btrfs_trans_handle *trans; - int ret; - u64 prev_type; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (copy_from_user(&dev_props, argp, sizeof(dev_props))) - return -EFAULT; - - device = btrfs_find_device(fs_info->fs_devices, dev_props.devid, - NULL, NULL, false); - if (!device) { - btrfs_info(fs_info, "change_dev_properties: unable to find device %llu", - dev_props.devid); - return -ENODEV; - } - - if (dev_props.properties & BTRFS_DEV_PROPERTY_READ) { - u64 props = dev_props.properties; - memset(&dev_props, 0, sizeof(dev_props)); - if (props & BTRFS_DEV_PROPERTY_TYPE) { - dev_props.properties = BTRFS_DEV_PROPERTY_TYPE; - dev_props.type = device->type; - } - if(copy_to_user(argp, &dev_props, sizeof(dev_props))) - return -EFAULT; - return 0; - } - - /* it is possible to set only BTRFS_DEV_PROPERTY_TYPE for now */ - if (dev_props.properties & ~(BTRFS_DEV_PROPERTY_TYPE)) - return -EPERM; - - trans = btrfs_start_transaction(root, 0); - if (IS_ERR(trans)) - return PTR_ERR(trans); - - prev_type = device->type; - device->type = dev_props.type; - ret = btrfs_update_device(trans, device); - - if (ret < 0) { - btrfs_abort_transaction(trans, ret); - btrfs_end_transaction(trans); - device->type = prev_type; - return ret; - } - - ret = btrfs_commit_transaction(trans); - if (ret < 0) - device->type = prev_type; - - return ret; - -} - static int _btrfs_ioctl_send(struct file *file, void __user *argp, bool compat) { struct btrfs_ioctl_send_args *arg; @@ -5219,8 +5154,6 @@ long btrfs_ioctl(struct file *file, unsigned int return btrfs_ioctl_get_subvol_rootref(file, argp); case BTRFS_IOC_INO_LOOKUP_USER: return btrfs_ioctl_ino_lookup_user(file, argp); - case BTRFS_IOC_DEV_PROPERTIES: - return btrfs_ioctl_dev_properties(file, argp); } return -ENOTTY; diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 6e2547ed7ed3..9bcdf3375043 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -2807,7 +2807,7 @@ error: return ret; } -int btrfs_update_device(struct btrfs_trans_handle *trans, +static noinline int btrfs_update_device(struct btrfs_trans_handle *trans, struct btrfs_device *device) { int ret; diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index de3ce40023e2..bc6677a84438 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -605,7 +605,5 @@ int btrfs_bg_type_to_factor(u64 flags); const char *btrfs_bg_type_to_raid_name(u64 flags); int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info); int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical); -int btrfs_update_device(struct btrfs_trans_handle *trans, - struct btrfs_device *device); #endif diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h index 79c8ad631fc6..561af6f7ac6f 100644 --- a/include/uapi/linux/btrfs.h +++ b/include/uapi/linux/btrfs.h @@ -863,44 +863,6 @@ struct btrfs_ioctl_get_subvol_rootref_args { __u8 align[7]; }; -#define BTRFS_DEV_PROPERTY_TYPE (1ULL << 0) -#define BTRFS_DEV_PROPERTY_DEV_GROUP (1ULL << 1) -#define BTRFS_DEV_PROPERTY_SEEK_SPEED (1ULL << 2) -#define BTRFS_DEV_PROPERTY_BANDWIDTH (1ULL << 3) -#define BTRFS_DEV_PROPERTY_READ (1ULL << 60) - -/* - * The ioctl BTRFS_IOC_DEV_PROPERTIES can read and write the device properties. - * - * The properties that the user want to write have to be set - * in the 'properties' field using the BTRFS_DEV_PROPERTY_xxxx constants. - * - * If the ioctl is used to read the device properties, the bit - * BTRFS_DEV_PROPERTY_READ has to be set in the 'properties' field. - * In this case the properties that the user want have to be set in the - * 'properties' field. The kernel doesn't return a property that was not - * required, however it may return a subset of the requested properties. - * The returned properties have the corrispondent BTRFS_DEV_PROPERTY_xxxx - * flag set in the 'properties' field. - * - * Up to 2020/05/11 the only properties that can be read/write is the 'type' - * one. - */ -struct btrfs_ioctl_dev_properties { - __u64 devid; - __u64 properties; - __u64 type; - __u32 dev_group; - __u8 seek_speed; - __u8 bandwidth; - - /* - * for future expansion - */ - __u8 unused1[2]; - __u64 unused2[4]; -}; - /* Error codes as returned by the kernel */ enum btrfs_err_code { BTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1, @@ -1029,7 +991,5 @@ enum btrfs_err_code { struct btrfs_ioctl_ino_lookup_user_args) #define BTRFS_IOC_SNAP_DESTROY_V2 _IOW(BTRFS_IOCTL_MAGIC, 63, \ struct btrfs_ioctl_vol_args_v2) -#define BTRFS_IOC_DEV_PROPERTIES _IOW(BTRFS_IOCTL_MAGIC, 64, \ - struct btrfs_ioctl_dev_properties) #endif /* _UAPI_LINUX_BTRFS_H */