[PATCH v0 2/6] ACPI: TAD: Use __free() for cleanup in time_store()
From: Rafael J. Wysocki
Date: Sun Feb 22 2026 - 09:21:39 EST
From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
Use __free() for the automatic freeing of memory pointed to by local
variable str in time_store() which allows the code to become somewhat
easier to follow.
No intentional functional impact.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---
drivers/acpi/acpi_tad.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
--- a/drivers/acpi/acpi_tad.c
+++ b/drivers/acpi/acpi_tad.c
@@ -167,57 +167,57 @@ static ssize_t time_store(struct device
const char *buf, size_t count)
{
struct acpi_tad_rt rt;
- char *str, *s;
- int val, ret = -ENODATA;
+ int val, ret;
+ char *s;
- str = kmemdup_nul(buf, count, GFP_KERNEL);
+ char *str __free(kfree) = kmemdup_nul(buf, count, GFP_KERNEL);
if (!str)
return -ENOMEM;
s = acpi_tad_rt_next_field(str, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.year = val;
s = acpi_tad_rt_next_field(s, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.month = val;
s = acpi_tad_rt_next_field(s, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.day = val;
s = acpi_tad_rt_next_field(s, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.hour = val;
s = acpi_tad_rt_next_field(s, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.minute = val;
s = acpi_tad_rt_next_field(s, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.second = val;
s = acpi_tad_rt_next_field(s, &val);
if (!s)
- goto out_free;
+ return -ENODATA;
rt.tz = val;
if (kstrtoint(s, 10, &val))
- goto out_free;
+ return -ENODATA;
rt.daylight = val;
@@ -226,10 +226,10 @@ static ssize_t time_store(struct device
memset(rt.padding, 0, 3);
ret = acpi_tad_set_real_time(dev, &rt);
+ if (ret)
+ return ret;
-out_free:
- kfree(str);
- return ret ? ret : count;
+ return count;
}
static ssize_t time_show(struct device *dev, struct device_attribute *attr,