fs: configfs: don't return anything from drop_link
Subsystems (8)
A message that is not in the archive (sent off-list or not yet received): CGME20161128122258eucas1p2c3543f6795fe54c07175a5f5fbae0765@eucas1p2.samsung.com
PATCH 1/1 fs: configfs: don't return anything from drop_link
Documentation/filesystems/configfs/configfs.txt says:
"When unlink(2) is called on the symbolic link, the source item is notified via the ->drop_link() method. Like the ->drop_item() method, this is a void function and cannot return failure."
The ->drop_item() is indeed a void function, the ->drop_link() is actually not. This, together with the fact that the value of ->drop_link() is silently ignored suggests, that it is the ->drop_link() return type that should be corrected and changed to void.
This patch changes drop_link() signature and all its users.
Compile-tested only! It needs Tested-by from respective subsystems.
--- Documentation/filesystems/configfs/configfs.txt | 2 +- drivers/nvme/target/configfs.c | 46 ++++++++++--------------- drivers/target/target_core_fabric_configfs.c | 7 ++-- drivers/usb/gadget/configfs.c | 8 ++--- drivers/usb/gadget/function/uvc_configfs.c | 25 +++----------- include/linux/configfs.h | 2 +- 6 files changed, 31 insertions(+), 59 deletions(-)
Documentation/filesystems/configfs/configfs.txt +1 -1
@@ -174,7 +174,7 @@ among other things. For that, it needs a type. void (*release)(struct config_item *); int (*allow_link)(struct config_item *src, struct config_item *target); - int (*drop_link)(struct config_item *src, + void (*drop_link)(struct config_item *src, struct config_item *target); };
drivers/nvme/target/configfs.c +18 -28
72 lines not on this page · raw message
drivers/target/target_core_fabric_configfs.c +3 -4
@@ -137,7 +137,7 @@ static int target_fabric_mappedlun_link(return core_dev_add_initiator_node_lun_acl (se_tpg, lacl, lun, lun_access_ro); } -static int target_fabric_mappedlun_unlink ( +static void target_fabric_mappedlun_unlink (struct config_item *lun_acl_ci,struct config_item *lun_ci) {
@@ -146,7 +146,7 @@ static int target_fabric_mappedlun_unlink(struct se_lun *lun =container_of (to_config_group (lun_ci), struct se_lun, lun_group); -return core_dev_del_initiator_node_lun_acl (lun, lacl); +core_dev_del_initiator_node_lun_acl (lun, lacl); }static struct se_lun_acl *item_to_lun_acl (struct config_item *item)
@@ -669,7 +669,7 @@ static int target_fabric_port_link(return ret; } -static int target_fabric_port_unlink ( +static void target_fabric_port_unlink (struct config_item *lun_ci,struct config_item *se_dev_ci) {
@@ -688,7 +688,6 @@ static int target_fabric_port_unlink( }core_dev_del_lun (se_tpg, lun); -return 0 ; }static void target_fabric_port_release (struct config_item *item)
drivers/usb/gadget/configfs.c +3 -5
@@ -408,7 +408,7 @@ static int config_usb_cfg_link(return ret; } -static int config_usb_cfg_unlink ( +static void config_usb_cfg_unlink (struct config_item *usb_cfg_ci,struct config_item *usb_func_ci) {
@@ -437,12 +437,11 @@ static int config_usb_cfg_unlink(list_del (&f->list);usb_put_function (f);mutex_unlock (&gi->lock); -return 0 ; +return ; } }mutex_unlock (&gi->lock);WARN (1 ,"Unable to locate function to unbind\n" ); -return 0 ; }static struct configfs_item_operations gadget_config_item_ops = {
@@ -865,7 +864,7 @@ static int os_desc_link(struct config_item *os_desc_ci,return ret; } -static int os_desc_unlink (struct config_item *os_desc_ci, +static void os_desc_unlink (struct config_item *os_desc_ci,struct config_item *usb_cfg_ci) { struct gadget_info *gi = container_of(to_config_group(os_desc_ci),
@@ -878,7 +877,6 @@ static int os_desc_unlink(struct config_item *os_desc_ci, cdev->os_desc_config =NULL ;WARN_ON (gi->composite.gadget_driver.udc_name);mutex_unlock (&gi->lock); -return 0 ; }static struct configfs_item_operations os_desc_ops = {
drivers/usb/gadget/function/uvc_configfs.c +5 -20
@@ -547,7 +547,7 @@ static int uvcg_control_class_allow_link(struct config_item *src,return ret; } -static int uvcg_control_class_drop_link (struct config_item *src, +static void uvcg_control_class_drop_link (struct config_item *src,struct config_item *target) {struct config_item *control, *header;
@@ -555,7 +555,6 @@ static int uvcg_control_class_drop_link(struct config_item *src,struct mutex *su_mutex = &src->ci_group->cg_subsys->su_mutex;struct uvc_descriptor_header **class_array;struct uvcg_control_header *target_hdr; -int ret = -EINVAL ;mutex_lock (su_mutex);/* for navigating configfs hierarchy */
@@ -569,23 +568,17 @@ static int uvcg_control_class_drop_link(struct config_item *src,mutex_lock (&opts->lock); class_array =uvcg_get_ctl_class_arr (src, opts); -if (!class_array) - goto unlock; -if (opts->refcnt) { - ret = -EBUSY ; +if (!class_array || opts->refcnt) goto unlock; - } target_hdr =to_uvcg_control_header (target); --target_hdr->linked; class_array[0 ] =NULL ; - ret =0 ; unlock:mutex_unlock (&opts->lock); out:mutex_unlock (su_mutex); -return ret; }static struct configfs_item_operations uvcg_control_class_item_ops = {
@@ -777,7 +770,7 @@ static int uvcg_streaming_header_allow_link(struct config_item *src,return ret; } -static int uvcg_streaming_header_drop_link (struct config_item *src, +static void uvcg_streaming_header_drop_link (struct config_item *src,struct config_item *target) {struct mutex *su_mutex = &src->ci_group->cg_subsys->su_mutex;
@@ -786,7 +779,6 @@ static int uvcg_streaming_header_drop_link(struct config_item *src,struct uvcg_streaming_header *src_hdr;struct uvcg_format *target_fmt =NULL ;struct uvcg_format_ptr *format_ptr, *tmp; -int ret = -EINVAL ; src_hdr =to_uvcg_streaming_header (src);mutex_lock (su_mutex);/* for navigating configfs hierarchy */
@@ -811,8 +803,6 @@ static int uvcg_streaming_header_drop_link(struct config_item *src, out:mutex_unlock (&opts->lock);mutex_unlock (su_mutex); -return ret; - }static struct configfs_item_operations uvcg_streaming_header_item_ops = {
@@ -2051,7 +2041,7 @@ static int uvcg_streaming_class_allow_link(struct config_item *src,return ret; } -static int uvcg_streaming_class_drop_link (struct config_item *src, +static void uvcg_streaming_class_drop_link (struct config_item *src,struct config_item *target) {struct config_item *streaming, *header;
@@ -2059,7 +2049,6 @@ static int uvcg_streaming_class_drop_link(struct config_item *src,struct mutex *su_mutex = &src->ci_group->cg_subsys->su_mutex;struct uvc_descriptor_header ***class_array;struct uvcg_streaming_header *target_hdr; -int ret = -EINVAL ;mutex_lock (su_mutex);/* for navigating configfs hierarchy */
@@ -2076,23 +2065,19 @@ static int uvcg_streaming_class_drop_link(struct config_item *src,if (!class_array || !*class_array) goto unlock; -if (opts->refcnt) { - ret = -EBUSY ; +if (opts->refcnt) goto unlock; - } target_hdr =to_uvcg_streaming_header (target); --target_hdr->linked;kfree (**class_array);kfree (*class_array); *class_array =NULL ; - ret =0 ; unlock:mutex_unlock (&opts->lock); out:mutex_unlock (su_mutex); -return ret; }static struct configfs_item_operations uvcg_streaming_class_item_ops = {
include/linux/configfs.h +1 -1
@@ -228,7 +228,7 @@ struct configfs_bin_attribute {struct configfs_item_operations {void (*release)(struct config_item *);int (*allow_link)(struct config_item *src,struct config_item *target); -int (*drop_link)(struct config_item *src,struct config_item *target); +void (*drop_link)(struct config_item *src,struct config_item *target); };struct configfs_group_operations {
Signature · 1 line
1.9.1
Christoph Hellwig
maintainerPATCH 1/1 fs: configfs: don't return anything from drop_link
Thanks a lot Andrzej!
I've applied the patch, but I undid the reformatting of the nvmet code to keep the patch as simple as possible.