On Tue, Jan 1, 2013 at 1:17 PM, Eric Wong <normalperson@xxxxxxxx> wrote: >> >> An alternate version (limited to epoll) would be: >> >> diff --git a/fs/eventpoll.c b/fs/eventpoll.c >> index cd96649..ca5f3d0 100644 >> --- a/fs/eventpoll.c >> +++ b/fs/eventpoll.c >> @@ -1299,6 +1299,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even >> * Get current event bits. We can safely use the file* here because >> * its usage count has been increased by the caller of this function. >> */ >> + smp_mb(); >> revents = epi->ffd.file->f_op->poll(epi->ffd.file, &pt); >> >> /* > > I was wrong, rereading 626cf236608505d376e4799adb4f7eb00a8594af, > I think this race existed before. > > Perhaps my alternate patch above is a better fix. Please document the barrier that this mb() pairs with, and then give an explanation for the fix in the commit message, and I'll happily take it. Even if it's just duplicating the comments above the wq_has_sleeper() function, except modified for the ep_modify() case. Of course, it would be good to get verification from Jason and Andreas that the alternate patch also works for them. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html