Use proc_ops on kernels >= 5.6

In commit (d56c0d45f0e27 "proc: decouple proc from VFS with "struct proc_ops"")
[1], proc_create_data no longer takes a file_operations structure, but instead
takes a struct proc_ops in order to conserve memory in the kernel.

This change is necessary for DAHDI to work with kernels >= 5.6

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d56c0d45f0e27f814e87a1676b6bd

Signed-off-by: Shaun Ruffell <sruffell@sruffell.net>
next
Shaun Ruffell 5 years ago
parent c98f59eead
commit 34b9c77c9a

@ -1015,6 +1015,14 @@ static int dahdi_proc_open(struct inode *inode, struct file *file)
return single_open(file, dahdi_seq_show, PDE_DATA(inode)); return single_open(file, dahdi_seq_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops dahdi_proc_ops = {
.proc_open = dahdi_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations dahdi_proc_ops = { static const struct file_operations dahdi_proc_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = dahdi_proc_open, .open = dahdi_proc_open,
@ -1022,6 +1030,7 @@ static const struct file_operations dahdi_proc_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif

@ -733,12 +733,22 @@ static int ztdethmf_proc_open(struct inode *inode, struct file *file)
return single_open(file, ztdethmf_proc_show, NULL); return single_open(file, ztdethmf_proc_show, NULL);
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops ztdethmf_proc_fops = {
.proc_open = ztdethmf_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = seq_release,
};
#else
static const struct file_operations ztdethmf_proc_fops = { static const struct file_operations ztdethmf_proc_fops = {
.owner = THIS_MODULE,
.open = ztdethmf_proc_open, .open = ztdethmf_proc_open,
.read = seq_read, .read = seq_read,
.llseek = seq_lseek, .llseek = seq_lseek,
.release = seq_release, .release = seq_release,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif
static int __init ztdethmf_init(void) static int __init ztdethmf_init(void)

@ -153,8 +153,12 @@ static int write_state_register(xpd_t *xpd, __u8 value);
static bool bri_packet_is_valid(xpacket_t *pack); static bool bri_packet_is_valid(xpacket_t *pack);
static void bri_packet_dump(const char *msg, xpacket_t *pack); static void bri_packet_dump(const char *msg, xpacket_t *pack);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_bri_info_ops;
#else
static const struct file_operations proc_bri_info_ops; static const struct file_operations proc_bri_info_ops;
#endif #endif
#endif
static int bri_spanconfig(struct file *file, struct dahdi_span *span, static int bri_spanconfig(struct file *file, struct dahdi_span *span,
struct dahdi_lineconfig *lc); struct dahdi_lineconfig *lc);
static int bri_chanconfig(struct file *file, struct dahdi_chan *chan, static int bri_chanconfig(struct file *file, struct dahdi_chan *chan,
@ -1740,6 +1744,14 @@ static int proc_bri_info_open(struct inode *inode, struct file *file)
return single_open(file, proc_bri_info_show, PDE_DATA(inode)); return single_open(file, proc_bri_info_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_bri_info_ops = {
.proc_open = proc_bri_info_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations proc_bri_info_ops = { static const struct file_operations proc_bri_info_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = proc_bri_info_open, .open = proc_bri_info_open,
@ -1747,6 +1759,7 @@ static const struct file_operations proc_bri_info_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif
static int bri_xpd_probe(struct device *dev) static int bri_xpd_probe(struct device *dev)

@ -107,9 +107,13 @@ enum fxo_leds {
static bool fxo_packet_is_valid(xpacket_t *pack); static bool fxo_packet_is_valid(xpacket_t *pack);
static void fxo_packet_dump(const char *msg, xpacket_t *pack); static void fxo_packet_dump(const char *msg, xpacket_t *pack);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_fxo_info_ops;
#else
static const struct file_operations proc_fxo_info_ops; static const struct file_operations proc_fxo_info_ops;
#endif
#ifdef WITH_METERING #ifdef WITH_METERING
static const struct file_operations proc_xpd_metering_ops; static const struct proc_ops proc_xpd_metering_ops;
#endif #endif
#endif #endif
static void dahdi_report_battery(xpd_t *xpd, lineno_t chan); static void dahdi_report_battery(xpd_t *xpd, lineno_t chan);
@ -1484,6 +1488,14 @@ static int proc_fxo_info_open(struct inode *inode, struct file *file)
return single_open(file, proc_fxo_info_show, PDE_DATA(inode)); return single_open(file, proc_fxo_info_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_fxo_info_ops = {
.proc_open = proc_fxo_info_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations proc_fxo_info_ops = { static const struct file_operations proc_fxo_info_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = proc_fxo_info_open, .open = proc_fxo_info_open,
@ -1491,6 +1503,7 @@ static const struct file_operations proc_fxo_info_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif
#ifdef WITH_METERING #ifdef WITH_METERING
static int proc_xpd_metering_show(struct seq_file *sfile, void *not_used) static int proc_xpd_metering_show(struct seq_file *sfile, void *not_used)

@ -160,11 +160,19 @@ enum neon_state {
static bool fxs_packet_is_valid(xpacket_t *pack); static bool fxs_packet_is_valid(xpacket_t *pack);
static void fxs_packet_dump(const char *msg, xpacket_t *pack); static void fxs_packet_dump(const char *msg, xpacket_t *pack);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_fxs_info_ops;
#else
static const struct file_operations proc_fxs_info_ops; static const struct file_operations proc_fxs_info_ops;
#endif
#ifdef WITH_METERING #ifdef WITH_METERING
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_xpd_metering_ops;
#else
static const struct file_operations proc_xpd_metering_ops; static const struct file_operations proc_xpd_metering_ops;
#endif #endif
#endif #endif
#endif
static void start_stop_vm_led(xbus_t *xbus, xpd_t *xpd, lineno_t pos); static void start_stop_vm_led(xbus_t *xbus, xpd_t *xpd, lineno_t pos);
#define PROC_FXS_INFO_FNAME "fxs_info" #define PROC_FXS_INFO_FNAME "fxs_info"
@ -2115,6 +2123,14 @@ static int proc_fxs_info_open(struct inode *inode, struct file *file)
return single_open(file, proc_fxs_info_show, PDE_DATA(inode)); return single_open(file, proc_fxs_info_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_fxs_info_ops = {
.proc_open = proc_fxs_info_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations proc_fxs_info_ops = { static const struct file_operations proc_fxs_info_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = proc_fxs_info_open, .open = proc_fxs_info_open,
@ -2122,6 +2138,7 @@ static const struct file_operations proc_fxs_info_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif
#ifdef WITH_METERING #ifdef WITH_METERING
static ssize_t proc_xpd_metering_write(struct file *file, static ssize_t proc_xpd_metering_write(struct file *file,
@ -2165,12 +2182,20 @@ static int proc_xpd_metering_open(struct inode *inode, struct file *file)
file->private_data = PDE_DATA(inode); file->private_data = PDE_DATA(inode);
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_xpd_metering_ops = {
.proc_open = proc_xpd_metering_open,
.proc_write = proc_xpd_metering_write,
.proc_release = single_release,
};
#else
static const struct file_operations proc_xpd_metering_ops = { static const struct file_operations proc_xpd_metering_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = proc_xpd_metering_open, .open = proc_xpd_metering_open,
.write = proc_xpd_metering_write, .write = proc_xpd_metering_write,
.release = single_release, .release = single_release,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif
#endif #endif

@ -50,8 +50,15 @@ static const char rcsid[] = "$Id$";
#ifdef PROTOCOL_DEBUG #ifdef PROTOCOL_DEBUG
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#define PROC_XBUS_COMMAND "command" #define PROC_XBUS_COMMAND "command"
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_xbus_command_ops;
#else
static const struct file_operations proc_xbus_command_ops; static const struct file_operations proc_xbus_command_ops;
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif
#endif #endif
/* Command line parameters */ /* Command line parameters */
@ -65,8 +72,15 @@ static DEF_PARM_BOOL(dahdi_autoreg, 0, 0444,
"Register devices automatically (1) or not (0). UNUSED."); "Register devices automatically (1) or not (0). UNUSED.");
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xbus_read_proc_ops;
#else
static const struct file_operations xbus_read_proc_ops; static const struct file_operations xbus_read_proc_ops;
#endif #endif /* DAHDI_HAVE_PROC_OPS */
#endif /* CONFIG_PROC_FS */
static void transport_init(xbus_t *xbus, struct xbus_ops *ops, static void transport_init(xbus_t *xbus, struct xbus_ops *ops,
ushort max_send_size, ushort max_send_size,
struct device *transport_device, void *priv); struct device *transport_device, void *priv);
@ -1828,6 +1842,14 @@ static int xbus_read_proc_open(struct inode *inode, struct file *file)
return single_open(file, xbus_proc_show, PDE_DATA(inode)); return single_open(file, xbus_proc_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xbus_read_proc_ops = {
.proc_open = xbus_read_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations xbus_read_proc_ops = { static const struct file_operations xbus_read_proc_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = xbus_read_proc_open, .open = xbus_read_proc_open,
@ -1835,6 +1857,7 @@ static const struct file_operations xbus_read_proc_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#ifdef PROTOCOL_DEBUG #ifdef PROTOCOL_DEBUG
static ssize_t proc_xbus_command_write(struct file *file, static ssize_t proc_xbus_command_write(struct file *file,
@ -1927,11 +1950,19 @@ static int proc_xbus_command_open(struct inode *inode, struct file *file)
return 0; return 0;
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops proc_xbus_command_ops = {
.proc_open = proc_xbus_command_open,
.proc_write = proc_xbus_command_write,
};
#else
static const struct file_operations proc_xbus_command_ops = { static const struct file_operations proc_xbus_command_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = proc_xbus_command_open, .open = proc_xbus_command_open,
.write = proc_xbus_command_write, .write = proc_xbus_command_write,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif
static int xpp_proc_read_show(struct seq_file *sfile, void *data) static int xpp_proc_read_show(struct seq_file *sfile, void *data)
@ -1961,6 +1992,14 @@ static int xpp_proc_read_open(struct inode *inode, struct file *file)
return single_open(file, xpp_proc_read_show, PDE_DATA(inode)); return single_open(file, xpp_proc_read_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xpp_proc_read_ops = {
.proc_open = xpp_proc_read_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations xpp_proc_read_ops = { static const struct file_operations xpp_proc_read_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = xpp_proc_read_open, .open = xpp_proc_read_open,
@ -1968,6 +2007,7 @@ static const struct file_operations xpp_proc_read_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif /* DAHDI_HAVE_PROC_OPS */
#endif #endif

@ -103,8 +103,12 @@ int total_registered_spans(void)
} }
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xpd_read_proc_ops;
#else
static const struct file_operations xpd_read_proc_ops; static const struct file_operations xpd_read_proc_ops;
#endif #endif
#endif
/*------------------------- XPD Management -------------------------*/ /*------------------------- XPD Management -------------------------*/
@ -392,6 +396,14 @@ static int xpd_read_proc_open(struct inode *inode, struct file *file)
return single_open(file, xpd_read_proc_show, PDE_DATA(inode)); return single_open(file, xpd_read_proc_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xpd_read_proc_ops = {
.proc_open = xpd_read_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations xpd_read_proc_ops = { static const struct file_operations xpd_read_proc_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = xpd_read_proc_open, .open = xpd_read_proc_open,
@ -399,6 +411,7 @@ static const struct file_operations xpd_read_proc_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif
#endif #endif

@ -227,9 +227,14 @@ static void xpp_receive_callback(struct urb *urb);
static int xusb_probe(struct usb_interface *interface, static int xusb_probe(struct usb_interface *interface,
const struct usb_device_id *id); const struct usb_device_id *id);
static void xusb_disconnect(struct usb_interface *interface); static void xusb_disconnect(struct usb_interface *interface);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xusb_read_proc_ops;
#else
static const struct file_operations xusb_read_proc_ops; static const struct file_operations xusb_read_proc_ops;
#endif #endif
#endif
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
@ -1108,6 +1113,14 @@ static int xusb_read_proc_open(struct inode *inode, struct file *file)
return single_open(file, xusb_read_proc_show, PDE_DATA(inode)); return single_open(file, xusb_read_proc_show, PDE_DATA(inode));
} }
#ifdef DAHDI_HAVE_PROC_OPS
static const struct proc_ops xusb_read_proc_ops = {
.proc_open = xusb_read_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations xusb_read_proc_ops = { static const struct file_operations xusb_read_proc_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = xusb_read_proc_open, .open = xusb_read_proc_open,
@ -1115,6 +1128,7 @@ static const struct file_operations xusb_read_proc_ops = {
.llseek = seq_lseek, .llseek = seq_lseek,
.release = single_release, .release = single_release,
}; };
#endif
#endif #endif

@ -62,6 +62,8 @@
#define HAVE_NET_DEVICE_OPS #define HAVE_NET_DEVICE_OPS
#endif #endif
#define DAHDI_HAVE_PROC_OPS
/* __dev* were removed in 3.8. They still have effect in 2.6.18. */ /* __dev* were removed in 3.8. They still have effect in 2.6.18. */
#ifndef __devinit #ifndef __devinit
# define __devinit # define __devinit
@ -1369,6 +1371,10 @@ static inline short dahdi_txtone_nextsample(struct dahdi_chan *ss)
/*! Maximum audio mask */ /*! Maximum audio mask */
#define DAHDI_FORMAT_AUDIO_MASK ((1 << 16) - 1) #define DAHDI_FORMAT_AUDIO_MASK ((1 << 16) - 1)
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0)
#undef DAHDI_HAVE_PROC_OPS
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
#ifndef TIMER_DATA_TYPE #ifndef TIMER_DATA_TYPE
@ -1479,14 +1485,13 @@ static inline void *PDE_DATA(const struct inode *inode)
#endif /* 4.10.0 */ #endif /* 4.10.0 */
#endif /* 4.11.0 */ #endif /* 4.11.0 */
#endif /* 4.13.0 */ #endif /* 4.13.0 */
#else /* >= 4.15.0 */ #endif /* 4.15.0 */
#endif /* 5.6 */
#ifndef TIMER_DATA_TYPE #ifndef TIMER_DATA_TYPE
#define TIMER_DATA_TYPE struct timer_list * #define TIMER_DATA_TYPE struct timer_list *
#endif #endif
#endif /* 4.15.0 */
#ifndef dahdi_ktime_equal #ifndef dahdi_ktime_equal
static inline int dahdi_ktime_equal(const ktime_t cmp1, const ktime_t cmp2) static inline int dahdi_ktime_equal(const ktime_t cmp1, const ktime_t cmp2)
{ {

Loading…
Cancel
Save