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