From mboxrd@z Thu Jan 1 00:00:00 1970 From: simon.brand@postadigitale.de (Simon Brand) Date: Sat, 17 Jan 2015 17:32:37 +0100 Subject: container_of Message-ID: <20150117173237.69c3e04b@fx> To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org Good evening, i read the article about the container_of function: http://www.kroah.com/log/linux/container_of.html I understand what it does and how it works. I thought, it could be simplified by replacing it through this: #define container_of(ptr, type, member) ({ \ (type *)( (char *)ptr - offsetof(type,member) );}) Original: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );}) ptr has the type of a pointer to the member, which should be the same as __mptr? The value should although be the same. First I tried it in a self written script, then replaced it in include/linux/kernel.h and compiled it as usermode linux -> working well. Then I compiled it and run it in a VM, but it is not working. Can you please explain to me, why the original version is always working and "mine" is not? Thank you for your time! Regards, Simon