struct task_struct *task = NULL;
struct cegw_job *job = (struct cegw_job *)data;
- kref_init(&job->refcount);
-
+ kref_get(&job->refcount);
task = kthread_run(cegw_udp2can, data, "canethgw_udp2can");
if (IS_ERR(task)) {
kref_put(&job->refcount, cegw_job_release);
struct socket *udp_sock = job->udp_sock;
struct socket *can_sock = job->can_sock;
- kernel_sock_shutdown(udp_sock, SHUT_RDWR);
+ if (udp_sock)
+ kernel_sock_shutdown(udp_sock, SHUT_RDWR);
/* PF_CAN sockets do not implement shutdown - do it manualy */
sk = can_sock->sk;
if (job) {
cegw_thread_stop(job);
}
+ kref_put(&job->refcount, cegw_job_release);
module_put(THIS_MODULE);
return 0;
goto err_put_all;
}
+ kref_init(&job->refcount);
+
job->udp_dstcnt = dstcnt;
job->udp_addrlen = addrlen;