• David Howells's avatar
    Replace the fd_sets in struct fdtable with an array of unsigned longs · 1fd36adc
    David Howells authored
    Replace the fd_sets in struct fdtable with an array of unsigned longs and then
    use the standard non-atomic bit operations rather than the FD_* macros.
    
    This:
    
     (1) Removes the abuses of struct fd_set:
    
         (a) Since we don't want to allocate a full fd_set the vast majority of the
         	 time, we actually, in effect, just allocate a just-big-enough array of
         	 unsigned longs and cast it to an fd_set type - so why bother with the
         	 fd_set at all?
    
         (b) Some places outside of the core fdtable handling code (such as
         	 SELinux) want to look inside the array of unsigned longs hidden inside
         	 the fd_set struct for more efficient iteration over the entire set.
    
     (2) Eliminates the use of FD_*() macros in the kernel completely.
    
     (3) Permits the __FD_*() macros to be deleted entirely where not exposed to
         userspace.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Link: http://lkml.kernel.org/r/20120216174954.23314.48147.stgit@warthog.procyon.org.ukSigned-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    1fd36adc
exec.c 52.7 KB