Skip to content

Commit d7ebbe4

Browse files
author
Al Viro
committed
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 <[email protected]>
1 parent e78cd95 commit d7ebbe4

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

fs/eventpoll.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ struct ep_pqueue {
260260
struct ep_send_events_data {
261261
int maxevents;
262262
struct epoll_event __user *events;
263+
int res;
263264
};
264265

265266
/*
@@ -1616,7 +1617,6 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
16161617
void *priv)
16171618
{
16181619
struct ep_send_events_data *esed = priv;
1619-
int eventcnt;
16201620
unsigned int revents;
16211621
struct epitem *epi;
16221622
struct epoll_event __user *uevent;
@@ -1630,8 +1630,8 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
16301630
* Items cannot vanish during the loop because ep_scan_ready_list() is
16311631
* holding "mtx" during this call.
16321632
*/
1633-
for (eventcnt = 0, uevent = esed->events;
1634-
!list_empty(head) && eventcnt < esed->maxevents;) {
1633+
for (esed->res = 0, uevent = esed->events;
1634+
!list_empty(head) && esed->res < esed->maxevents;) {
16351635
epi = list_first_entry(head, struct epitem, rdllink);
16361636

16371637
/*
@@ -1665,9 +1665,11 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
16651665
__put_user(epi->event.data, &uevent->data)) {
16661666
list_add(&epi->rdllink, head);
16671667
ep_pm_stay_awake(epi);
1668-
return eventcnt ? eventcnt : -EFAULT;
1668+
if (!esed->res)
1669+
esed->res = -EFAULT;
1670+
return 0;
16691671
}
1670-
eventcnt++;
1672+
esed->res++;
16711673
uevent++;
16721674
if (epi->event.events & EPOLLONESHOT)
16731675
epi->event.events &= EP_PRIVATE_BITS;
@@ -1689,7 +1691,7 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
16891691
}
16901692
}
16911693

1692-
return eventcnt;
1694+
return 0;
16931695
}
16941696

16951697
static int ep_send_events(struct eventpoll *ep,
@@ -1700,7 +1702,8 @@ static int ep_send_events(struct eventpoll *ep,
17001702
esed.maxevents = maxevents;
17011703
esed.events = events;
17021704

1703-
return ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0, false);
1705+
ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0, false);
1706+
return esed.res;
17041707
}
17051708

17061709
static inline struct timespec64 ep_set_mstimeout(long ms)

0 commit comments

Comments
 (0)