diff options
author | Christoph Hellwig <hch@lst.de> | 2018-01-09 17:29:24 +0300 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2018-05-26 10:16:44 +0300 |
commit | 3deb642f0de4c14f37437dd247f9c77839f043f8 (patch) | |
tree | 56f6867ac66e6fa881295a6c9af52349471374e4 /include/linux/poll.h | |
parent | 9965ed174e7d38896e5d2582159d8ef31ecd4cb5 (diff) | |
download | linux-3deb642f0de4c14f37437dd247f9c77839f043f8.tar.xz |
fs: introduce new ->get_poll_head and ->poll_mask methods
->get_poll_head returns the waitqueue that the poll operation is going
to sleep on. Note that this means we can only use a single waitqueue
for the poll, unlike some current drivers that use two waitqueues for
different events. But now that we have keyed wakeups and heavily use
those for poll there aren't that many good reason left to keep the
multiple waitqueues, and if there are any ->poll is still around, the
driver just won't support aio poll.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'include/linux/poll.h')
-rw-r--r-- | include/linux/poll.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/include/linux/poll.h b/include/linux/poll.h index 7e0fdcf905d2..fdf86b4cbc71 100644 --- a/include/linux/poll.h +++ b/include/linux/poll.h @@ -74,18 +74,18 @@ static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc) pt->_key = ~(__poll_t)0; /* all events enabled */ } -static inline bool file_can_poll(struct file *file) +static inline bool file_has_poll_mask(struct file *file) { - return file->f_op->poll; + return file->f_op->get_poll_head && file->f_op->poll_mask; } -static inline __poll_t vfs_poll(struct file *file, struct poll_table_struct *pt) +static inline bool file_can_poll(struct file *file) { - if (unlikely(!file->f_op->poll)) - return DEFAULT_POLLMASK; - return file->f_op->poll(file, pt); + return file->f_op->poll || file_has_poll_mask(file); } +__poll_t vfs_poll(struct file *file, struct poll_table_struct *pt); + struct poll_table_entry { struct file *filp; __poll_t key; |