X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fbluetooth%2Fcmtp%2Fsock.c;h=8f8fad23f78afc0f81b577f82fcbb084bbe23bfb;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=bf4e7d7840228c9a5cf4077dba973aadf5c8208d;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/net/bluetooth/cmtp/sock.c b/net/bluetooth/cmtp/sock.c index bf4e7d784..8f8fad23f 100644 --- a/net/bluetooth/cmtp/sock.c +++ b/net/bluetooth/cmtp/sock.c @@ -24,9 +24,9 @@ #include #include +#include #include #include -#include #include #include #include @@ -138,7 +138,7 @@ static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long return -EINVAL; } -static struct proto_ops cmtp_sock_ops = { +static const struct proto_ops cmtp_sock_ops = { .family = PF_BLUETOOTH, .owner = THIS_MODULE, .release = cmtp_sock_release, @@ -158,6 +158,12 @@ static struct proto_ops cmtp_sock_ops = { .mmap = sock_no_mmap }; +static struct proto cmtp_proto = { + .name = "CMTP", + .owner = THIS_MODULE, + .obj_size = sizeof(struct bt_sock) +}; + static int cmtp_sock_create(struct socket *sock, int protocol) { struct sock *sk; @@ -167,17 +173,20 @@ static int cmtp_sock_create(struct socket *sock, int protocol) if (sock->type != SOCK_RAW) return -ESOCKTNOSUPPORT; - if (!(sk = bt_sock_alloc(sock, PF_BLUETOOTH, 0, GFP_KERNEL))) + sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, &cmtp_proto, 1); + if (!sk) return -ENOMEM; - sk_set_owner(sk, THIS_MODULE); + sock_init_data(sock, sk); sock->ops = &cmtp_sock_ops; sock->state = SS_UNCONNECTED; - sk->sk_destruct = NULL; + sock_reset_flag(sk, SOCK_ZAPPED); + sk->sk_protocol = protocol; + sk->sk_state = BT_OPEN; return 0; } @@ -190,13 +199,28 @@ static struct net_proto_family cmtp_sock_family_ops = { int cmtp_init_sockets(void) { - bt_sock_register(BTPROTO_CMTP, &cmtp_sock_family_ops); + int err; + + err = proto_register(&cmtp_proto, 0); + if (err < 0) + return err; + + err = bt_sock_register(BTPROTO_CMTP, &cmtp_sock_family_ops); + if (err < 0) + goto error; return 0; + +error: + BT_ERR("Can't register CMTP socket"); + proto_unregister(&cmtp_proto); + return err; } void cmtp_cleanup_sockets(void) { - if (bt_sock_unregister(BTPROTO_CMTP)) + if (bt_sock_unregister(BTPROTO_CMTP) < 0) BT_ERR("Can't unregister CMTP socket"); + + proto_unregister(&cmtp_proto); }