[PATCH] w1: simplify allocation of w1_master

Rosen Penev
2026-03-24T02:15:58Z

Convert bus_master to a flexible array member as it's being used as one
with the old C89 + 1 pointer trick.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/w1/w1_int.c | 4 +---
include/linux/w1.h | 4 ++--
2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c
index 19a0ea28e9f3..a0bb97608564 100644
--- a/drivers/w1/w1_int.c
+++ b/drivers/w1/w1_int.c
@@ -31,12 +31,10 @@ static struct w1_master *w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
/*
* We are in process context(kernel thread), so can sleep.
*/
- dev = kzalloc(sizeof(struct w1_master) + sizeof(struct w1_bus_master), GFP_KERNEL);
+ dev = kzalloc_flex(*dev, bus_master, 1);
if (!dev)
return NULL;

- dev->bus_master = (struct w1_bus_master *)(dev + 1);
-
dev->owner = THIS_MODULE;
dev->max_slave_count = slave_count;
dev->slave_count = 0;
diff --git a/include/linux/w1.h b/include/linux/w1.h
index 064805bfae3f..7379a9ddefc0 100644
--- a/include/linux/w1.h
+++ b/include/linux/w1.h
@@ -236,9 +236,9 @@ struct w1_master {
struct device_driver *driver;
struct device dev;

- struct w1_bus_master *bus_master;
-
u32 seq;
+
+ struct w1_bus_master bus_master[];
};

int w1_add_master_device(struct w1_bus_master *master);
--
2.53.0