Since commit 11c5ad0ec441 ("eventpoll: switch to ->poll_mask") in
v4.18-rc1, eventpoll switched from ->poll() to ->poll_mask(). Rather than
calling the callback directly (which would result in null pointer
dereference), use vfs_poll() wrapper. As this wrapper is only available
since 4.18-rc1 cycle as well, provide a copy to use when building against
older kernels.
31 lines
566 B
C
31 lines
566 B
C
#ifndef __COMPAT_POLL_H__
|
|
#define __COMPAT_POLL_H__
|
|
|
|
#include <linux/poll.h>
|
|
|
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0))
|
|
|
|
#ifndef __poll_t
|
|
typedef unsigned int __poll_t;
|
|
#endif
|
|
|
|
static inline __poll_t compat_vfs_poll(struct file *file,
|
|
struct poll_table_struct *pt)
|
|
{
|
|
if (unlikely(!file->f_op->poll))
|
|
return DEFAULT_POLLMASK;
|
|
return file->f_op->poll(file, pt);
|
|
}
|
|
|
|
#else
|
|
|
|
static inline __poll_t compat_vfs_poll(struct file *file,
|
|
struct poll_table_struct *pt)
|
|
{
|
|
return vfs_poll(file, pt);
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif /* __COMPAT_POLL_H__ */
|