Re: [PATCH 2/3] container_of: remove useless pair of parentheses

From: Vincent Mailhol

Date: Wed Jul 15 2026 - 10:52:55 EST


On 15/07/2026 at 16:30, Alexey Dobriyan wrote:
> On Tue, Jul 14, 2026 at 08:18:02PM +0200, Vincent Mailhol wrote:
>> The last expression in container_of() doesn't need an extra pair of
>> parenthesis. Remove it.
>>
>> Signed-off-by: Vincent Mailhol <mailhol@xxxxxxxxxx>
>> ---
>> include/linux/container_of.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/include/linux/container_of.h b/include/linux/container_of.h
>> index 28500a62ab7e..68153170db32 100644
>> --- a/include/linux/container_of.h
>> +++ b/include/linux/container_of.h
>> @@ -21,7 +21,7 @@
>> static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
>> __same_type(*(ptr), void), \
>> "pointer type mismatch in container_of()"); \
>> - ((type *)(__mptr - offsetof(type, member))); })
>> + (type *)(__mptr - offsetof(type, member)); })
>
> container_of_const() has the same problem.

Yes. But scoped I my series to the container_of() macro only.

I don't plan to send a follow-up patch to remove the other useless
parenthesis. The things which really bothered me was the __mptr
variable which I removed in patch #3. And with that, I am done with
what I wanted to contribute in this file.

But you are welcome to do this clean-up if you feel the need for it.

> And it should parenthesize first argument to _Generic.

Do you mean like this:

#define container_of_const(ptr, type, member) \
_Generic((ptr), \
const typeof(*(ptr)) *: ((const type *)container_of(ptr, type, member)),\
default: ((type *)container_of(ptr, type, member)) \
)

?

Why would parenthesis be needed here? I don't see what kind of
expression would make the current implementation unsafe.


Yours sincerely,
Vincent Mailhol