Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0f8dcfc authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

fs: cleanup do_pollfd



Use straightline code with failure handling gotos instead of a lot
of nested conditionals.

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>
parent 8f546ae1
Loading
Loading
Loading
Loading
+23 −25
Original line number Original line Diff line number Diff line
@@ -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) {
		struct fd f = fdget(fd);
	mask = EPOLLNVAL;
	mask = EPOLLNVAL;
		if (f.file) {
	f = fdget(fd);
	if (!f.file)
		goto out;

	/* userland u16 ->events contains POLL... bitmap */
	/* userland u16 ->events contains POLL... bitmap */
			__poll_t filter = demangle_poll(pollfd->events) |
	filter = demangle_poll(pollfd->events) | EPOLLERR | EPOLLHUP;
						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;		/* Mask out unneeded events. */
			mask &= filter;
	fdput(f);
	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;
}
}