diff options
Diffstat (limited to 'net/netlink')
| -rw-r--r-- | net/netlink/genetlink.c | 13 | 
1 files changed, 10 insertions, 3 deletions
| diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index 4518a57aa5fe..713671ae45af 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c @@ -74,9 +74,12 @@ static struct list_head family_ht[GENL_FAM_TAB_SIZE];   * Bit 17 is marked as already used since the VFS quota code   * also abused this API and relied on family == group ID, we   * cater to that by giving it a static family and group ID. + * Bit 18 is marked as already used since the PMCRAID driver + * did the same thing as the VFS quota code (maybe copied?)   */  static unsigned long mc_group_start = 0x3 | BIT(GENL_ID_CTRL) | -				      BIT(GENL_ID_VFS_DQUOT); +				      BIT(GENL_ID_VFS_DQUOT) | +				      BIT(GENL_ID_PMCRAID);  static unsigned long *mc_groups = &mc_group_start;  static unsigned long mc_groups_longs = 1; @@ -139,6 +142,7 @@ static u16 genl_generate_id(void)  	for (i = 0; i <= GENL_MAX_ID - GENL_MIN_ID; i++) {  		if (id_gen_idx != GENL_ID_VFS_DQUOT && +		    id_gen_idx != GENL_ID_PMCRAID &&  		    !genl_family_find_byid(id_gen_idx))  			return id_gen_idx;  		if (++id_gen_idx > GENL_MAX_ID) @@ -214,7 +218,7 @@ static int genl_validate_assign_mc_groups(struct genl_family *family)  {  	int first_id;  	int n_groups = family->n_mcgrps; -	int err, i; +	int err = 0, i;  	bool groups_allocated = false;  	if (!n_groups) @@ -236,9 +240,12 @@ static int genl_validate_assign_mc_groups(struct genl_family *family)  	} else if (strcmp(family->name, "NET_DM") == 0) {  		first_id = 1;  		BUG_ON(n_groups != 1); -	} else if (strcmp(family->name, "VFS_DQUOT") == 0) { +	} else if (family->id == GENL_ID_VFS_DQUOT) {  		first_id = GENL_ID_VFS_DQUOT;  		BUG_ON(n_groups != 1); +	} else if (family->id == GENL_ID_PMCRAID) { +		first_id = GENL_ID_PMCRAID; +		BUG_ON(n_groups != 1);  	} else {  		groups_allocated = true;  		err = genl_allocate_reserve_groups(n_groups, &first_id); |