fs: cleanup do_pollfd
Use straightline code with failure handling gotos instead of a lot of nested conditionals. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
8f546ae1fc
commit
a0f8dcfc60
46
fs/select.c
46
fs/select.c
@ -812,34 +812,32 @@ static inline __poll_t do_pollfd(struct pollfd *pollfd, poll_table *pwait,
|
|||||||
bool *can_busy_poll,
|
bool *can_busy_poll,
|
||||||
__poll_t busy_flag)
|
__poll_t busy_flag)
|
||||||
{
|
{
|
||||||
__poll_t mask;
|
int fd = pollfd->fd;
|
||||||
int fd;
|
__poll_t mask = 0, filter;
|
||||||
|
struct fd f;
|
||||||
|
|
||||||
mask = 0;
|
if (fd < 0)
|
||||||
fd = pollfd->fd;
|
goto out;
|
||||||
if (fd >= 0) {
|
mask = EPOLLNVAL;
|
||||||
struct fd f = fdget(fd);
|
f = fdget(fd);
|
||||||
mask = EPOLLNVAL;
|
if (!f.file)
|
||||||
if (f.file) {
|
goto out;
|
||||||
/* userland u16 ->events contains POLL... bitmap */
|
|
||||||
__poll_t filter = demangle_poll(pollfd->events) |
|
/* userland u16 ->events contains POLL... bitmap */
|
||||||
EPOLLERR | EPOLLHUP;
|
filter = demangle_poll(pollfd->events) | EPOLLERR | EPOLLHUP;
|
||||||
mask = DEFAULT_POLLMASK;
|
mask = DEFAULT_POLLMASK;
|
||||||
if (f.file->f_op->poll) {
|
if (f.file->f_op->poll) {
|
||||||
pwait->_key = filter;
|
pwait->_key = filter | busy_flag;
|
||||||
pwait->_key |= busy_flag;
|
mask = f.file->f_op->poll(f.file, pwait);
|
||||||
mask = f.file->f_op->poll(f.file, pwait);
|
if (mask & busy_flag)
|
||||||
if (mask & busy_flag)
|
*can_busy_poll = true;
|
||||||
*can_busy_poll = true;
|
|
||||||
}
|
|
||||||
/* Mask out unneeded events. */
|
|
||||||
mask &= filter;
|
|
||||||
fdput(f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
mask &= filter; /* Mask out unneeded events. */
|
||||||
|
fdput(f);
|
||||||
|
|
||||||
|
out:
|
||||||
/* ... and so does ->revents */
|
/* ... and so does ->revents */
|
||||||
pollfd->revents = mangle_poll(mask);
|
pollfd->revents = mangle_poll(mask);
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user