• Christoph Hellwig's avatar
    aio: implement io_pgetevents · 7a074e96
    Christoph Hellwig authored
    This is the io_getevents equivalent of ppoll/pselect and allows to
    properly mix signals and aio completions (especially with IOCB_CMD_POLL)
    and atomically executes the following sequence:
    
    	sigset_t origmask;
    
    	pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
    	ret = io_getevents(ctx, min_nr, nr, events, timeout);
    	pthread_sigmask(SIG_SETMASK, &origmask, NULL);
    
    Note that unlike many other signal related calls we do not pass a sigmask
    size, as that would get us to 7 arguments, which aren't easily supported
    by the syscall infrastructure.  It seems a lot less painful to just add a
    new syscall variant in the unlikely case we're going to increase the
    sigset size.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    7a074e96
aio.c 50.6 KB