mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
driver core: Use kasprintf() instead of fixed buffer formatting
Improve readability and maintainability by replacing a hardcoded string allocation and formatting by the use of the kasprintf() helper. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20240821154839.604259-3-andriy.shevchenko@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d11f2a1ab8
commit
a355a4655e
1 changed files with 32 additions and 38 deletions
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-map-ops.h> /* for dma_default_coherent */
|
||||
|
@ -563,24 +564,11 @@ static struct class devlink_class = {
|
|||
|
||||
static int devlink_add_symlinks(struct device *dev)
|
||||
{
|
||||
char *buf_con __free(kfree) = NULL, *buf_sup __free(kfree) = NULL;
|
||||
int ret;
|
||||
size_t len;
|
||||
struct device_link *link = to_devlink(dev);
|
||||
struct device *sup = link->supplier;
|
||||
struct device *con = link->consumer;
|
||||
char *buf;
|
||||
|
||||
len = max(strlen(dev_bus_name(sup)) + strlen(dev_name(sup)),
|
||||
strlen(dev_bus_name(con)) + strlen(dev_name(con)));
|
||||
len += strlen(":");
|
||||
/*
|
||||
* we kzalloc() memory for symlink name of both supplier and
|
||||
* consumer, so explicitly take into account both prefix.
|
||||
*/
|
||||
len += max(strlen("supplier:"), strlen("consumer:")) + 1;
|
||||
buf = kzalloc(len, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = sysfs_create_link(&link->link_dev.kobj, &sup->kobj, "supplier");
|
||||
if (ret)
|
||||
|
@ -590,58 +578,64 @@ static int devlink_add_symlinks(struct device *dev)
|
|||
if (ret)
|
||||
goto err_con;
|
||||
|
||||
snprintf(buf, len, "consumer:%s:%s", dev_bus_name(con), dev_name(con));
|
||||
ret = sysfs_create_link(&sup->kobj, &link->link_dev.kobj, buf);
|
||||
buf_con = kasprintf(GFP_KERNEL, "consumer:%s:%s", dev_bus_name(con), dev_name(con));
|
||||
if (!buf_con) {
|
||||
ret = -ENOMEM;
|
||||
goto err_con_dev;
|
||||
}
|
||||
|
||||
ret = sysfs_create_link(&sup->kobj, &link->link_dev.kobj, buf_con);
|
||||
if (ret)
|
||||
goto err_con_dev;
|
||||
|
||||
snprintf(buf, len, "supplier:%s:%s", dev_bus_name(sup), dev_name(sup));
|
||||
ret = sysfs_create_link(&con->kobj, &link->link_dev.kobj, buf);
|
||||
buf_sup = kasprintf(GFP_KERNEL, "supplier:%s:%s", dev_bus_name(sup), dev_name(sup));
|
||||
if (!buf_sup) {
|
||||
ret = -ENOMEM;
|
||||
goto err_sup_dev;
|
||||
}
|
||||
|
||||
ret = sysfs_create_link(&con->kobj, &link->link_dev.kobj, buf_sup);
|
||||
if (ret)
|
||||
goto err_sup_dev;
|
||||
|
||||
goto out;
|
||||
|
||||
err_sup_dev:
|
||||
snprintf(buf, len, "consumer:%s:%s", dev_bus_name(con), dev_name(con));
|
||||
sysfs_remove_link(&sup->kobj, buf);
|
||||
sysfs_remove_link(&sup->kobj, buf_con);
|
||||
err_con_dev:
|
||||
sysfs_remove_link(&link->link_dev.kobj, "consumer");
|
||||
err_con:
|
||||
sysfs_remove_link(&link->link_dev.kobj, "supplier");
|
||||
out:
|
||||
kfree(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void devlink_remove_symlinks(struct device *dev)
|
||||
{
|
||||
char *buf_con __free(kfree) = NULL, *buf_sup __free(kfree) = NULL;
|
||||
struct device_link *link = to_devlink(dev);
|
||||
size_t len;
|
||||
struct device *sup = link->supplier;
|
||||
struct device *con = link->consumer;
|
||||
char *buf;
|
||||
|
||||
sysfs_remove_link(&link->link_dev.kobj, "consumer");
|
||||
sysfs_remove_link(&link->link_dev.kobj, "supplier");
|
||||
|
||||
len = max(strlen(dev_bus_name(sup)) + strlen(dev_name(sup)),
|
||||
strlen(dev_bus_name(con)) + strlen(dev_name(con)));
|
||||
len += strlen(":");
|
||||
len += max(strlen("supplier:"), strlen("consumer:")) + 1;
|
||||
buf = kzalloc(len, GFP_KERNEL);
|
||||
if (!buf) {
|
||||
WARN(1, "Unable to properly free device link symlinks!\n");
|
||||
return;
|
||||
if (device_is_registered(con)) {
|
||||
buf_sup = kasprintf(GFP_KERNEL, "supplier:%s:%s", dev_bus_name(sup), dev_name(sup));
|
||||
if (!buf_sup)
|
||||
goto out;
|
||||
sysfs_remove_link(&con->kobj, buf_sup);
|
||||
}
|
||||
|
||||
if (device_is_registered(con)) {
|
||||
snprintf(buf, len, "supplier:%s:%s", dev_bus_name(sup), dev_name(sup));
|
||||
sysfs_remove_link(&con->kobj, buf);
|
||||
}
|
||||
snprintf(buf, len, "consumer:%s:%s", dev_bus_name(con), dev_name(con));
|
||||
sysfs_remove_link(&sup->kobj, buf);
|
||||
kfree(buf);
|
||||
buf_con = kasprintf(GFP_KERNEL, "consumer:%s:%s", dev_bus_name(con), dev_name(con));
|
||||
if (!buf_con)
|
||||
goto out;
|
||||
sysfs_remove_link(&sup->kobj, buf_con);
|
||||
|
||||
return;
|
||||
|
||||
out:
|
||||
WARN(1, "Unable to properly free device link symlinks!\n");
|
||||
}
|
||||
|
||||
static struct class_interface devlink_class_intf = {
|
||||
|
|
Loading…
Add table
Reference in a new issue