Commit e16769d4 authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Christoph Hellwig

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.
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
[hch: reverted reformatting of some code]
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent e5517c2a
...@@ -174,7 +174,7 @@ among other things. For that, it needs a type. ...@@ -174,7 +174,7 @@ among other things. For that, it needs a type.
void (*release)(struct config_item *); void (*release)(struct config_item *);
int (*allow_link)(struct config_item *src, int (*allow_link)(struct config_item *src,
struct config_item *target); struct config_item *target);
int (*drop_link)(struct config_item *src, void (*drop_link)(struct config_item *src,
struct config_item *target); struct config_item *target);
}; };
......
...@@ -466,7 +466,7 @@ static int nvmet_port_subsys_allow_link(struct config_item *parent, ...@@ -466,7 +466,7 @@ static int nvmet_port_subsys_allow_link(struct config_item *parent,
return ret; return ret;
} }
static int nvmet_port_subsys_drop_link(struct config_item *parent, static void nvmet_port_subsys_drop_link(struct config_item *parent,
struct config_item *target) struct config_item *target)
{ {
struct nvmet_port *port = to_nvmet_port(parent->ci_parent); struct nvmet_port *port = to_nvmet_port(parent->ci_parent);
...@@ -479,7 +479,7 @@ static int nvmet_port_subsys_drop_link(struct config_item *parent, ...@@ -479,7 +479,7 @@ static int nvmet_port_subsys_drop_link(struct config_item *parent,
goto found; goto found;
} }
up_write(&nvmet_config_sem); up_write(&nvmet_config_sem);
return -EINVAL; return;
found: found:
list_del(&p->entry); list_del(&p->entry);
...@@ -488,7 +488,6 @@ static int nvmet_port_subsys_drop_link(struct config_item *parent, ...@@ -488,7 +488,6 @@ static int nvmet_port_subsys_drop_link(struct config_item *parent,
nvmet_disable_port(port); nvmet_disable_port(port);
up_write(&nvmet_config_sem); up_write(&nvmet_config_sem);
kfree(p); kfree(p);
return 0;
} }
static struct configfs_item_operations nvmet_port_subsys_item_ops = { static struct configfs_item_operations nvmet_port_subsys_item_ops = {
...@@ -542,7 +541,7 @@ static int nvmet_allowed_hosts_allow_link(struct config_item *parent, ...@@ -542,7 +541,7 @@ static int nvmet_allowed_hosts_allow_link(struct config_item *parent,
return ret; return ret;
} }
static int nvmet_allowed_hosts_drop_link(struct config_item *parent, static void nvmet_allowed_hosts_drop_link(struct config_item *parent,
struct config_item *target) struct config_item *target)
{ {
struct nvmet_subsys *subsys = to_subsys(parent->ci_parent); struct nvmet_subsys *subsys = to_subsys(parent->ci_parent);
...@@ -555,14 +554,13 @@ static int nvmet_allowed_hosts_drop_link(struct config_item *parent, ...@@ -555,14 +554,13 @@ static int nvmet_allowed_hosts_drop_link(struct config_item *parent,
goto found; goto found;
} }
up_write(&nvmet_config_sem); up_write(&nvmet_config_sem);
return -EINVAL; return;
found: found:
list_del(&p->entry); list_del(&p->entry);
nvmet_genctr++; nvmet_genctr++;
up_write(&nvmet_config_sem); up_write(&nvmet_config_sem);
kfree(p); kfree(p);
return 0;
} }
static struct configfs_item_operations nvmet_allowed_hosts_item_ops = { static struct configfs_item_operations nvmet_allowed_hosts_item_ops = {
......
...@@ -137,7 +137,7 @@ static int target_fabric_mappedlun_link( ...@@ -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); 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_acl_ci,
struct config_item *lun_ci) struct config_item *lun_ci)
{ {
...@@ -146,7 +146,7 @@ static int target_fabric_mappedlun_unlink( ...@@ -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 = container_of(to_config_group(lun_ci),
struct se_lun, lun_group); 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) static struct se_lun_acl *item_to_lun_acl(struct config_item *item)
...@@ -669,7 +669,7 @@ static int target_fabric_port_link( ...@@ -669,7 +669,7 @@ static int target_fabric_port_link(
return ret; return ret;
} }
static int target_fabric_port_unlink( static void target_fabric_port_unlink(
struct config_item *lun_ci, struct config_item *lun_ci,
struct config_item *se_dev_ci) struct config_item *se_dev_ci)
{ {
...@@ -688,7 +688,6 @@ static int target_fabric_port_unlink( ...@@ -688,7 +688,6 @@ static int target_fabric_port_unlink(
} }
core_dev_del_lun(se_tpg, lun); core_dev_del_lun(se_tpg, lun);
return 0;
} }
static void target_fabric_port_release(struct config_item *item) static void target_fabric_port_release(struct config_item *item)
......
...@@ -408,7 +408,7 @@ static int config_usb_cfg_link( ...@@ -408,7 +408,7 @@ static int config_usb_cfg_link(
return ret; return ret;
} }
static int config_usb_cfg_unlink( static void config_usb_cfg_unlink(
struct config_item *usb_cfg_ci, struct config_item *usb_cfg_ci,
struct config_item *usb_func_ci) struct config_item *usb_func_ci)
{ {
...@@ -437,12 +437,11 @@ static int config_usb_cfg_unlink( ...@@ -437,12 +437,11 @@ static int config_usb_cfg_unlink(
list_del(&f->list); list_del(&f->list);
usb_put_function(f); usb_put_function(f);
mutex_unlock(&gi->lock); mutex_unlock(&gi->lock);
return 0; return;
} }
} }
mutex_unlock(&gi->lock); mutex_unlock(&gi->lock);
WARN(1, "Unable to locate function to unbind\n"); WARN(1, "Unable to locate function to unbind\n");
return 0;
} }
static struct configfs_item_operations gadget_config_item_ops = { static struct configfs_item_operations gadget_config_item_ops = {
...@@ -865,7 +864,7 @@ static int os_desc_link(struct config_item *os_desc_ci, ...@@ -865,7 +864,7 @@ static int os_desc_link(struct config_item *os_desc_ci,
return ret; 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 config_item *usb_cfg_ci)
{ {
struct gadget_info *gi = container_of(to_config_group(os_desc_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, ...@@ -878,7 +877,6 @@ static int os_desc_unlink(struct config_item *os_desc_ci,
cdev->os_desc_config = NULL; cdev->os_desc_config = NULL;
WARN_ON(gi->composite.gadget_driver.udc_name); WARN_ON(gi->composite.gadget_driver.udc_name);
mutex_unlock(&gi->lock); mutex_unlock(&gi->lock);
return 0;
} }
static struct configfs_item_operations os_desc_ops = { static struct configfs_item_operations os_desc_ops = {
......
...@@ -547,7 +547,7 @@ static int uvcg_control_class_allow_link(struct config_item *src, ...@@ -547,7 +547,7 @@ static int uvcg_control_class_allow_link(struct config_item *src,
return ret; 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 *target)
{ {
struct config_item *control, *header; struct config_item *control, *header;
...@@ -555,7 +555,6 @@ static int uvcg_control_class_drop_link(struct config_item *src, ...@@ -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 mutex *su_mutex = &src->ci_group->cg_subsys->su_mutex;
struct uvc_descriptor_header **class_array; struct uvc_descriptor_header **class_array;
struct uvcg_control_header *target_hdr; struct uvcg_control_header *target_hdr;
int ret = -EINVAL;
mutex_lock(su_mutex); /* for navigating configfs hierarchy */ mutex_lock(su_mutex); /* for navigating configfs hierarchy */
...@@ -569,23 +568,17 @@ static int uvcg_control_class_drop_link(struct config_item *src, ...@@ -569,23 +568,17 @@ static int uvcg_control_class_drop_link(struct config_item *src,
mutex_lock(&opts->lock); mutex_lock(&opts->lock);
class_array = uvcg_get_ctl_class_arr(src, opts); class_array = uvcg_get_ctl_class_arr(src, opts);
if (!class_array) if (!class_array || opts->refcnt)
goto unlock;
if (opts->refcnt) {
ret = -EBUSY;
goto unlock; goto unlock;
}
target_hdr = to_uvcg_control_header(target); target_hdr = to_uvcg_control_header(target);
--target_hdr->linked; --target_hdr->linked;
class_array[0] = NULL; class_array[0] = NULL;
ret = 0;
unlock: unlock:
mutex_unlock(&opts->lock); mutex_unlock(&opts->lock);
out: out:
mutex_unlock(su_mutex); mutex_unlock(su_mutex);
return ret;
} }
static struct configfs_item_operations uvcg_control_class_item_ops = { 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, ...@@ -777,7 +770,7 @@ static int uvcg_streaming_header_allow_link(struct config_item *src,
return ret; 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 config_item *target)
{ {
struct mutex *su_mutex = &src->ci_group->cg_subsys->su_mutex; 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, ...@@ -786,7 +779,6 @@ static int uvcg_streaming_header_drop_link(struct config_item *src,
struct uvcg_streaming_header *src_hdr; struct uvcg_streaming_header *src_hdr;
struct uvcg_format *target_fmt = NULL; struct uvcg_format *target_fmt = NULL;
struct uvcg_format_ptr *format_ptr, *tmp; struct uvcg_format_ptr *format_ptr, *tmp;
int ret = -EINVAL;
src_hdr = to_uvcg_streaming_header(src); src_hdr = to_uvcg_streaming_header(src);
mutex_lock(su_mutex); /* for navigating configfs hierarchy */ mutex_lock(su_mutex); /* for navigating configfs hierarchy */
...@@ -811,8 +803,6 @@ static int uvcg_streaming_header_drop_link(struct config_item *src, ...@@ -811,8 +803,6 @@ static int uvcg_streaming_header_drop_link(struct config_item *src,
out: out:
mutex_unlock(&opts->lock); mutex_unlock(&opts->lock);
mutex_unlock(su_mutex); mutex_unlock(su_mutex);
return ret;
} }
static struct configfs_item_operations uvcg_streaming_header_item_ops = { 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, ...@@ -2051,7 +2041,7 @@ static int uvcg_streaming_class_allow_link(struct config_item *src,
return ret; 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 *target)
{ {
struct config_item *streaming, *header; struct config_item *streaming, *header;
...@@ -2059,7 +2049,6 @@ static int uvcg_streaming_class_drop_link(struct config_item *src, ...@@ -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 mutex *su_mutex = &src->ci_group->cg_subsys->su_mutex;
struct uvc_descriptor_header ***class_array; struct uvc_descriptor_header ***class_array;
struct uvcg_streaming_header *target_hdr; struct uvcg_streaming_header *target_hdr;
int ret = -EINVAL;
mutex_lock(su_mutex); /* for navigating configfs hierarchy */ mutex_lock(su_mutex); /* for navigating configfs hierarchy */
...@@ -2076,23 +2065,19 @@ static int uvcg_streaming_class_drop_link(struct config_item *src, ...@@ -2076,23 +2065,19 @@ static int uvcg_streaming_class_drop_link(struct config_item *src,
if (!class_array || !*class_array) if (!class_array || !*class_array)
goto unlock; goto unlock;
if (opts->refcnt) { if (opts->refcnt)
ret = -EBUSY;
goto unlock; goto unlock;
}
target_hdr = to_uvcg_streaming_header(target); target_hdr = to_uvcg_streaming_header(target);
--target_hdr->linked; --target_hdr->linked;
kfree(**class_array); kfree(**class_array);
kfree(*class_array); kfree(*class_array);
*class_array = NULL; *class_array = NULL;
ret = 0;
unlock: unlock:
mutex_unlock(&opts->lock); mutex_unlock(&opts->lock);
out: out:
mutex_unlock(su_mutex); mutex_unlock(su_mutex);
return ret;
} }
static struct configfs_item_operations uvcg_streaming_class_item_ops = { static struct configfs_item_operations uvcg_streaming_class_item_ops = {
......
...@@ -228,7 +228,7 @@ static struct configfs_bin_attribute _pfx##attr_##_name = { \ ...@@ -228,7 +228,7 @@ static struct configfs_bin_attribute _pfx##attr_##_name = { \
struct configfs_item_operations { struct configfs_item_operations {
void (*release)(struct config_item *); void (*release)(struct config_item *);
int (*allow_link)(struct config_item *src, struct config_item *target); 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 { struct configfs_group_operations {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment