Blame view

include/linux/eventpoll.h 2.01 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
25985edce   Lucas De Marchi   Fix common misspe...
2
   *  include/linux/eventpoll.h ( Efficient event polling implementation )
3419b23a9   Davide Libenzi   [PATCH] epoll: us...
3
   *  Copyright (C) 2001,...,2006	 Davide Libenzi
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
11
12
   *
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation; either version 2 of the License, or
   *  (at your option) any later version.
   *
   *  Davide Libenzi <davidel@xmailserver.org>
   *
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13
14
  #ifndef _LINUX_EVENTPOLL_H
  #define _LINUX_EVENTPOLL_H
607ca46e9   David Howells   UAPI: (Scripted) ...
15
  #include <uapi/linux/eventpoll.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
20
21
22
23
24
  
  /* Forward declarations to avoid compiler errors */
  struct file;
  
  
  #ifdef CONFIG_EPOLL
  
  /* Used to initialize the epoll bits inside the "struct file" */
5a6b7951b   Benjamin LaHaise   [PATCH] get_empty...
25
26
27
  static inline void eventpoll_init_file(struct file *file)
  {
  	INIT_LIST_HEAD(&file->f_ep_links);
28d82dc1c   Jason Baron   epoll: limit paths
28
  	INIT_LIST_HEAD(&file->f_tfile_llink);
5a6b7951b   Benjamin LaHaise   [PATCH] get_empty...
29
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  
  /* Used to release the epoll bits inside the "struct file" */
  void eventpoll_release_file(struct file *file);
  
  /*
   * This is called from inside fs/file_table.c:__fput() to unlink files
   * from the eventpoll interface. We need to have this facility to cleanup
   * correctly files that are closed without being removed from the eventpoll
   * interface.
   */
  static inline void eventpoll_release(struct file *file)
  {
  
  	/*
  	 * Fast check to avoid the get/release of the semaphore. Since
  	 * we're doing this outside the semaphore lock, it might return
  	 * false negatives, but we don't care. It'll help in 99.99% of cases
  	 * to avoid the semaphore lock. False positives simply cannot happen
  	 * because the file in on the way to be removed and nobody ( but
  	 * eventpoll ) has still a reference to this file.
  	 */
  	if (likely(list_empty(&file->f_ep_links)))
  		return;
  
  	/*
  	 * The file is being closed while it is still linked to an epoll
  	 * descriptor. We need to handle this by correctly unlinking it
  	 * from its containers.
  	 */
  	eventpoll_release_file(file);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
63
64
65
66
  #else
  
  static inline void eventpoll_init_file(struct file *file) {}
  static inline void eventpoll_release(struct file *file) {}
  
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
  #endif /* #ifndef _LINUX_EVENTPOLL_H */