Messages in this thread Patch in this message |  | | Date | Tue, 20 Aug 2002 18:00:29 -0700 | From | Silvio Cesare <> | Subject | fs/select.c [patch > to >=] |
| |
fs/select.c (from 2.4.19 but present in 2.5.x also)
asmlinkage long sys_poll(struct pollfd * ufds, unsigned int nfds, long timeout) { int i, j, fdcount, err; struct pollfd **fds; poll_table table, *wait; int nchunks, nleft;
[ skip ]
nchunks = 0; nleft = nfds; while (nleft > POLLFD_PER_PAGE) { /* allocate complete PAGE_SIZE chunks */ fds[nchunks] = (struct pollfd *)__get_free_page(GFP_KERNEL); if (fds[nchunks] == NULL) goto out_fds; nchunks++; nleft -= POLLFD_PER_PAGE; } if (nleft) { /* allocate last PAGE_SIZE chunk, only nleft elements used */
why not -->
while (nleft >= POLLFD_PER_PAGE) {
in this case we will use only nchunks in the case that this will end up page aligned.. the current way of using only > POLLFD_PER_PAGE will end up with nchunks, and nleft == PAGE_SIZE / sizeof(pollfd) etc..
silly optimisation by changing > to >=, but still an optimisation.. if there is something obviously wrong with changing > to >=, ignore me since I probably should get more sleep.. but I dont see any problem though I havent really looked at it too much.
attachment has 1 line (1 character) patch ;-)
-- Silvio
diff -u fs/select.c.2.4.19 fs/select.c --- fs/select.c.2.4.19 Tue Aug 20 17:51:48 2002 +++ fs/select.c Tue Aug 20 17:52:15 2002 @@ -445,7 +445,7 @@ nchunks = 0; nleft = nfds; - while (nleft > POLLFD_PER_PAGE) { /* allocate complete PAGE_SIZE chunks */ + while (nleft >= POLLFD_PER_PAGE) { /* allocate complete PAGE_SIZE chunks */ fds[nchunks] = (struct pollfd *)__get_free_page(GFP_KERNEL); if (fds[nchunks] == NULL) goto out_fds; |  |