Message ID | 20091015055507.30128.60763.sendpatchset@localhost.localdomain |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Krishna Kumar <krkumar2@in.ibm.com> Date: Thu, 15 Oct 2009 11:25:07 +0530 > From: Krishna Kumar <krkumar2@in.ibm.com> > > 1. GENL_MIN_ID is a valid id -> no need to start at > GENL_MIN_ID + 1. > 2. Avoid going through the ids two times: If we start at > GENL_MIN_ID+1 (*or bigger*) and all ids are over!, the > code iterates through the list twice (*or lesser*). > 3. Simplify code - no need to start at idx=0 which gets > reset to GENL_MIN_ID. > > Patch on net-next-2.6. Reboot test shows that first id > passed to genl_register_family was 16, next two were > GENL_ID_GENERATE and genl_generate_id returned 17 & 18 > (user level testing of same code shows expected values > across entire range of MIN/MAX). > > Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff -ruNp org/net/netlink/genetlink.c new/net/netlink/genetlink.c --- org/net/netlink/genetlink.c 2009-10-12 13:57:38.000000000 +0530 +++ new/net/netlink/genetlink.c 2009-10-12 13:57:59.000000000 +0530 @@ -97,25 +97,17 @@ static struct genl_ops *genl_get_cmd(u8 */ static inline u16 genl_generate_id(void) { - static u16 id_gen_idx; - int overflowed = 0; + static u16 id_gen_idx = GENL_MIN_ID; + int i; - do { - if (id_gen_idx == 0) + for (i = 0; i <= GENL_MAX_ID - GENL_MIN_ID; i++) { + if (!genl_family_find_byid(id_gen_idx)) + return id_gen_idx; + if (++id_gen_idx > GENL_MAX_ID) id_gen_idx = GENL_MIN_ID; + } - if (++id_gen_idx > GENL_MAX_ID) { - if (!overflowed) { - overflowed = 1; - id_gen_idx = 0; - continue; - } else - return 0; - } - - } while (genl_family_find_byid(id_gen_idx)); - - return id_gen_idx; + return 0; } static struct genl_multicast_group notify_grp;