ep_send_events_proc(): return result via esed->res

preparations for not mixing __poll_t and int in ep_scan_ready_list()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro d7ebbe46 e78cd95b

Changed files
+10 -7
fs
+10 -7
fs/eventpoll.c
··· 260 struct ep_send_events_data { 261 int maxevents; 262 struct epoll_event __user *events; 263 }; 264 265 /* ··· 1617 void *priv) 1618 { 1619 struct ep_send_events_data *esed = priv; 1620 - int eventcnt; 1621 unsigned int revents; 1622 struct epitem *epi; 1623 struct epoll_event __user *uevent; ··· 1630 * Items cannot vanish during the loop because ep_scan_ready_list() is 1631 * holding "mtx" during this call. 1632 */ 1633 - for (eventcnt = 0, uevent = esed->events; 1634 - !list_empty(head) && eventcnt < esed->maxevents;) { 1635 epi = list_first_entry(head, struct epitem, rdllink); 1636 1637 /* ··· 1665 __put_user(epi->event.data, &uevent->data)) { 1666 list_add(&epi->rdllink, head); 1667 ep_pm_stay_awake(epi); 1668 - return eventcnt ? eventcnt : -EFAULT; 1669 } 1670 - eventcnt++; 1671 uevent++; 1672 if (epi->event.events & EPOLLONESHOT) 1673 epi->event.events &= EP_PRIVATE_BITS; ··· 1691 } 1692 } 1693 1694 - return eventcnt; 1695 } 1696 1697 static int ep_send_events(struct eventpoll *ep, ··· 1702 esed.maxevents = maxevents; 1703 esed.events = events; 1704 1705 - return ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0, false); 1706 } 1707 1708 static inline struct timespec64 ep_set_mstimeout(long ms)
··· 260 struct ep_send_events_data { 261 int maxevents; 262 struct epoll_event __user *events; 263 + int res; 264 }; 265 266 /* ··· 1616 void *priv) 1617 { 1618 struct ep_send_events_data *esed = priv; 1619 unsigned int revents; 1620 struct epitem *epi; 1621 struct epoll_event __user *uevent; ··· 1630 * Items cannot vanish during the loop because ep_scan_ready_list() is 1631 * holding "mtx" during this call. 1632 */ 1633 + for (esed->res = 0, uevent = esed->events; 1634 + !list_empty(head) && esed->res < esed->maxevents;) { 1635 epi = list_first_entry(head, struct epitem, rdllink); 1636 1637 /* ··· 1665 __put_user(epi->event.data, &uevent->data)) { 1666 list_add(&epi->rdllink, head); 1667 ep_pm_stay_awake(epi); 1668 + if (!esed->res) 1669 + esed->res = -EFAULT; 1670 + return 0; 1671 } 1672 + esed->res++; 1673 uevent++; 1674 if (epi->event.events & EPOLLONESHOT) 1675 epi->event.events &= EP_PRIVATE_BITS; ··· 1689 } 1690 } 1691 1692 + return 0; 1693 } 1694 1695 static int ep_send_events(struct eventpoll *ep, ··· 1700 esed.maxevents = maxevents; 1701 esed.events = events; 1702 1703 + ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0, false); 1704 + return esed.res; 1705 } 1706 1707 static inline struct timespec64 ep_set_mstimeout(long ms)