提交 a2fea5f1 编写于 作者: U Urs Thuermann 提交者: David S. Miller

[CAN]: Move proto_{,un}register() out of spin-locked region

The implementation of proto_register() has changed so that it can now
sleep.  The call to proto_register() must be moved out of the
spin-locked region.
Signed-off-by: NUrs Thuermann <urs.thuermann@volkswagen.de>
Signed-off-by: NOliver Hartkopp <oliver.hartkopp@volkswagen.de>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 5423dd67
...@@ -656,26 +656,26 @@ int can_proto_register(struct can_proto *cp) ...@@ -656,26 +656,26 @@ int can_proto_register(struct can_proto *cp)
return -EINVAL; return -EINVAL;
} }
err = proto_register(cp->prot, 0);
if (err < 0)
return err;
spin_lock(&proto_tab_lock); spin_lock(&proto_tab_lock);
if (proto_tab[proto]) { if (proto_tab[proto]) {
printk(KERN_ERR "can: protocol %d already registered\n", printk(KERN_ERR "can: protocol %d already registered\n",
proto); proto);
err = -EBUSY; err = -EBUSY;
goto errout; } else {
proto_tab[proto] = cp;
/* use generic ioctl function if not defined by module */
if (!cp->ops->ioctl)
cp->ops->ioctl = can_ioctl;
} }
spin_unlock(&proto_tab_lock);
err = proto_register(cp->prot, 0);
if (err < 0) if (err < 0)
goto errout; proto_unregister(cp->prot);
proto_tab[proto] = cp;
/* use generic ioctl function if the module doesn't bring its own */
if (!cp->ops->ioctl)
cp->ops->ioctl = can_ioctl;
errout:
spin_unlock(&proto_tab_lock);
return err; return err;
} }
...@@ -694,9 +694,10 @@ void can_proto_unregister(struct can_proto *cp) ...@@ -694,9 +694,10 @@ void can_proto_unregister(struct can_proto *cp)
printk(KERN_ERR "BUG: can: protocol %d is not registered\n", printk(KERN_ERR "BUG: can: protocol %d is not registered\n",
proto); proto);
} }
proto_unregister(cp->prot);
proto_tab[proto] = NULL; proto_tab[proto] = NULL;
spin_unlock(&proto_tab_lock); spin_unlock(&proto_tab_lock);
proto_unregister(cp->prot);
} }
EXPORT_SYMBOL(can_proto_unregister); EXPORT_SYMBOL(can_proto_unregister);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册