#include <linux/module.h>
#include <linux/version.h>
#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/hrtimer.h>
#include <linux/wait.h>
#include <linux/uio.h>
#include <linux/net.h>
static int isotp_release(struct socket *sock)
{
struct sock *sk = sock->sk;
- struct isotp_sock *so = isotp_sk(sk);
+ struct isotp_sock *so;
+
+ if (!sk)
+ return 0;
+
+ so = isotp_sk(sk);
/* wait for complete transmission of current pdu */
wait_event_interruptible(so->wait, so->tx.state == ISOTP_IDLE);
}
-static struct proto_ops isotp_ops __read_mostly = {
+static const struct proto_ops isotp_ops = {
.family = PF_CAN,
.release = isotp_release,
.bind = isotp_bind,
.accept = sock_no_accept,
.getname = isotp_getname,
.poll = datagram_poll,
- .ioctl = NULL, /* use can_ioctl() from af_can.c */
+ .ioctl = can_ioctl, /* use can_ioctl() from af_can.c */
.listen = sock_no_listen,
.shutdown = sock_no_shutdown,
.setsockopt = isotp_setsockopt,
.init = isotp_init,
};
-static struct can_proto isotp_can_proto __read_mostly = {
+static const struct can_proto isotp_can_proto = {
.type = SOCK_DGRAM,
.protocol = CAN_ISOTP,
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)