Re: [BK PATCH 1/2] Remove NGROUPS hardlimit (resend w/o qsort)

Andrew Morton
2002-11-15T01:23:47Z

Tim Hockin wrote:
>
> Andrew Morton wrote:
>
> > What are you actually using the search for?
> >
> >>From a quick look, it seems that it's purely to answer
> > the question "is this process a member of group X?". Is
> > that correct?
> >
> > If so, test_bit() would work nicely.
>
> This could work if we find the max gid, allocate an array of
> max_gid/CHAR_BITS + 1 bytes then test_bit, but given the non-contiguity
> (is that a word) of group memberships, we'll waste a lot of space on
> holes. Now, it could be argued that 10,000 groups are PROBABLY local
> enough. Getting the groups back out will be nasty nastiness, though.
>
> perhaps:
>
> if (gidsetsize < (2 * EXEC_PAGESIZE)/sizeof(gid_t)) { /* or something */
> /* use kmalloc() */
> else
> /* use vmalloc() */
>
> thoughts?
>

10,000 bits isn't much. Maybe:

- add `char groups[16]' to task_struct

- add `struct page *groups_page' to task_struct

- then
if (getsetsize <= 256)
use current->groups[] /* 256 groups max */
else
use current->groups_page; /* 32768 groups max */