diff options
Diffstat (limited to 'fs/eventpoll.c')
-rw-r--r-- | fs/eventpoll.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 011b9b8c90c6..c5c424f23fd5 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c | |||
@@ -417,10 +417,10 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi) | |||
417 | ep_unregister_pollwait(ep, epi); | 417 | ep_unregister_pollwait(ep, epi); |
418 | 418 | ||
419 | /* Remove the current item from the list of epoll hooks */ | 419 | /* Remove the current item from the list of epoll hooks */ |
420 | spin_lock(&file->f_ep_lock); | 420 | spin_lock(&file->f_lock); |
421 | if (ep_is_linked(&epi->fllink)) | 421 | if (ep_is_linked(&epi->fllink)) |
422 | list_del_init(&epi->fllink); | 422 | list_del_init(&epi->fllink); |
423 | spin_unlock(&file->f_ep_lock); | 423 | spin_unlock(&file->f_lock); |
424 | 424 | ||
425 | rb_erase(&epi->rbn, &ep->rbr); | 425 | rb_erase(&epi->rbn, &ep->rbr); |
426 | 426 | ||
@@ -538,7 +538,7 @@ void eventpoll_release_file(struct file *file) | |||
538 | struct epitem *epi; | 538 | struct epitem *epi; |
539 | 539 | ||
540 | /* | 540 | /* |
541 | * We don't want to get "file->f_ep_lock" because it is not | 541 | * We don't want to get "file->f_lock" because it is not |
542 | * necessary. It is not necessary because we're in the "struct file" | 542 | * necessary. It is not necessary because we're in the "struct file" |
543 | * cleanup path, and this means that noone is using this file anymore. | 543 | * cleanup path, and this means that noone is using this file anymore. |
544 | * So, for example, epoll_ctl() cannot hit here sicne if we reach this | 544 | * So, for example, epoll_ctl() cannot hit here sicne if we reach this |
@@ -547,6 +547,8 @@ void eventpoll_release_file(struct file *file) | |||
547 | * will correctly serialize the operation. We do need to acquire | 547 | * will correctly serialize the operation. We do need to acquire |
548 | * "ep->mtx" after "epmutex" because ep_remove() requires it when called | 548 | * "ep->mtx" after "epmutex" because ep_remove() requires it when called |
549 | * from anywhere but ep_free(). | 549 | * from anywhere but ep_free(). |
550 | * | ||
551 | * Besides, ep_remove() acquires the lock, so we can't hold it here. | ||
550 | */ | 552 | */ |
551 | mutex_lock(&epmutex); | 553 | mutex_lock(&epmutex); |
552 | 554 | ||
@@ -785,9 +787,9 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event, | |||
785 | goto error_unregister; | 787 | goto error_unregister; |
786 | 788 | ||
787 | /* Add the current item to the list of active epoll hook for this file */ | 789 | /* Add the current item to the list of active epoll hook for this file */ |
788 | spin_lock(&tfile->f_ep_lock); | 790 | spin_lock(&tfile->f_lock); |
789 | list_add_tail(&epi->fllink, &tfile->f_ep_links); | 791 | list_add_tail(&epi->fllink, &tfile->f_ep_links); |
790 | spin_unlock(&tfile->f_ep_lock); | 792 | spin_unlock(&tfile->f_lock); |
791 | 793 | ||
792 | /* | 794 | /* |
793 | * Add the current item to the RB tree. All RB tree operations are | 795 | * Add the current item to the RB tree. All RB tree operations are |