提交 14e28b1d 编写于 作者: D David S. Miller

Merge branch 'kill_sk_protinfo'

David Miller says:

====================
Get rid of sock->sk_protinfo.

These two patches get rid of the last remaining user of sk_protinfo
(ax25) and then really gets rid of the struct member.
====================
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <net/neighbour.h> #include <net/neighbour.h>
#include <net/sock.h>
#define AX25_T1CLAMPLO 1 #define AX25_T1CLAMPLO 1
#define AX25_T1CLAMPHI (30 * HZ) #define AX25_T1CLAMPHI (30 * HZ)
...@@ -246,7 +247,20 @@ typedef struct ax25_cb { ...@@ -246,7 +247,20 @@ typedef struct ax25_cb {
atomic_t refcount; atomic_t refcount;
} ax25_cb; } ax25_cb;
#define ax25_sk(__sk) ((ax25_cb *)(__sk)->sk_protinfo) struct ax25_sock {
struct sock sk;
struct ax25_cb *cb;
};
static inline struct ax25_sock *ax25_sk(const struct sock *sk)
{
return (struct ax25_sock *) sk;
}
static inline struct ax25_cb *sk_to_ax25(const struct sock *sk)
{
return ax25_sk(sk)->cb;
}
#define ax25_for_each(__ax25, list) \ #define ax25_for_each(__ax25, list) \
hlist_for_each_entry(__ax25, list, ax25_node) hlist_for_each_entry(__ax25, list, ax25_node)
......
...@@ -277,7 +277,6 @@ struct cg_proto; ...@@ -277,7 +277,6 @@ struct cg_proto;
* @sk_incoming_cpu: record cpu processing incoming packets * @sk_incoming_cpu: record cpu processing incoming packets
* @sk_txhash: computed flow hash for use on transmit * @sk_txhash: computed flow hash for use on transmit
* @sk_filter: socket filtering instructions * @sk_filter: socket filtering instructions
* @sk_protinfo: private area, net family specific, when not using slab
* @sk_timer: sock cleanup timer * @sk_timer: sock cleanup timer
* @sk_stamp: time stamp of last packet received * @sk_stamp: time stamp of last packet received
* @sk_tsflags: SO_TIMESTAMPING socket options * @sk_tsflags: SO_TIMESTAMPING socket options
...@@ -416,7 +415,6 @@ struct sock { ...@@ -416,7 +415,6 @@ struct sock {
const struct cred *sk_peer_cred; const struct cred *sk_peer_cred;
long sk_rcvtimeo; long sk_rcvtimeo;
long sk_sndtimeo; long sk_sndtimeo;
void *sk_protinfo;
struct timer_list sk_timer; struct timer_list sk_timer;
ktime_t sk_stamp; ktime_t sk_stamp;
u16 sk_tsflags; u16 sk_tsflags;
......
...@@ -57,7 +57,7 @@ static const struct proto_ops ax25_proto_ops; ...@@ -57,7 +57,7 @@ static const struct proto_ops ax25_proto_ops;
static void ax25_free_sock(struct sock *sk) static void ax25_free_sock(struct sock *sk)
{ {
ax25_cb_put(ax25_sk(sk)); ax25_cb_put(sk_to_ax25(sk));
} }
/* /*
...@@ -306,7 +306,7 @@ void ax25_destroy_socket(ax25_cb *ax25) ...@@ -306,7 +306,7 @@ void ax25_destroy_socket(ax25_cb *ax25)
while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) { while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
if (skb->sk != ax25->sk) { if (skb->sk != ax25->sk) {
/* A pending connection */ /* A pending connection */
ax25_cb *sax25 = ax25_sk(skb->sk); ax25_cb *sax25 = sk_to_ax25(skb->sk);
/* Queue the unaccepted socket for death */ /* Queue the unaccepted socket for death */
sock_orphan(skb->sk); sock_orphan(skb->sk);
...@@ -551,7 +551,7 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname, ...@@ -551,7 +551,7 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname,
return -EFAULT; return -EFAULT;
lock_sock(sk); lock_sock(sk);
ax25 = ax25_sk(sk); ax25 = sk_to_ax25(sk);
switch (optname) { switch (optname) {
case AX25_WINDOW: case AX25_WINDOW:
...@@ -697,7 +697,7 @@ static int ax25_getsockopt(struct socket *sock, int level, int optname, ...@@ -697,7 +697,7 @@ static int ax25_getsockopt(struct socket *sock, int level, int optname,
length = min_t(unsigned int, maxlen, sizeof(int)); length = min_t(unsigned int, maxlen, sizeof(int));
lock_sock(sk); lock_sock(sk);
ax25 = ax25_sk(sk); ax25 = sk_to_ax25(sk);
switch (optname) { switch (optname) {
case AX25_WINDOW: case AX25_WINDOW:
...@@ -796,7 +796,7 @@ static int ax25_listen(struct socket *sock, int backlog) ...@@ -796,7 +796,7 @@ static int ax25_listen(struct socket *sock, int backlog)
static struct proto ax25_proto = { static struct proto ax25_proto = {
.name = "AX25", .name = "AX25",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.obj_size = sizeof(struct sock), .obj_size = sizeof(struct ax25_sock),
}; };
static int ax25_create(struct net *net, struct socket *sock, int protocol, static int ax25_create(struct net *net, struct socket *sock, int protocol,
...@@ -858,7 +858,7 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol, ...@@ -858,7 +858,7 @@ static int ax25_create(struct net *net, struct socket *sock, int protocol,
if (sk == NULL) if (sk == NULL)
return -ENOMEM; return -ENOMEM;
ax25 = sk->sk_protinfo = ax25_create_cb(); ax25 = ax25_sk(sk)->cb = ax25_create_cb();
if (!ax25) { if (!ax25) {
sk_free(sk); sk_free(sk);
return -ENOMEM; return -ENOMEM;
...@@ -910,7 +910,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) ...@@ -910,7 +910,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
sk->sk_state = TCP_ESTABLISHED; sk->sk_state = TCP_ESTABLISHED;
sock_copy_flags(sk, osk); sock_copy_flags(sk, osk);
oax25 = ax25_sk(osk); oax25 = sk_to_ax25(osk);
ax25->modulus = oax25->modulus; ax25->modulus = oax25->modulus;
ax25->backoff = oax25->backoff; ax25->backoff = oax25->backoff;
...@@ -938,7 +938,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) ...@@ -938,7 +938,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
} }
} }
sk->sk_protinfo = ax25; ax25_sk(sk)->cb = ax25;
sk->sk_destruct = ax25_free_sock; sk->sk_destruct = ax25_free_sock;
ax25->sk = sk; ax25->sk = sk;
...@@ -956,7 +956,7 @@ static int ax25_release(struct socket *sock) ...@@ -956,7 +956,7 @@ static int ax25_release(struct socket *sock)
sock_hold(sk); sock_hold(sk);
sock_orphan(sk); sock_orphan(sk);
lock_sock(sk); lock_sock(sk);
ax25 = ax25_sk(sk); ax25 = sk_to_ax25(sk);
if (sk->sk_type == SOCK_SEQPACKET) { if (sk->sk_type == SOCK_SEQPACKET) {
switch (ax25->state) { switch (ax25->state) {
...@@ -1066,7 +1066,7 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) ...@@ -1066,7 +1066,7 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
lock_sock(sk); lock_sock(sk);
ax25 = ax25_sk(sk); ax25 = sk_to_ax25(sk);
if (!sock_flag(sk, SOCK_ZAPPED)) { if (!sock_flag(sk, SOCK_ZAPPED)) {
err = -EINVAL; err = -EINVAL;
goto out; goto out;
...@@ -1113,7 +1113,7 @@ static int __must_check ax25_connect(struct socket *sock, ...@@ -1113,7 +1113,7 @@ static int __must_check ax25_connect(struct socket *sock,
struct sockaddr *uaddr, int addr_len, int flags) struct sockaddr *uaddr, int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
ax25_cb *ax25 = ax25_sk(sk), *ax25t; ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr; struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
ax25_digi *digi = NULL; ax25_digi *digi = NULL;
int ct = 0, err = 0; int ct = 0, err = 0;
...@@ -1394,7 +1394,7 @@ static int ax25_getname(struct socket *sock, struct sockaddr *uaddr, ...@@ -1394,7 +1394,7 @@ static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
memset(fsa, 0, sizeof(*fsa)); memset(fsa, 0, sizeof(*fsa));
lock_sock(sk); lock_sock(sk);
ax25 = ax25_sk(sk); ax25 = sk_to_ax25(sk);
if (peer != 0) { if (peer != 0) {
if (sk->sk_state != TCP_ESTABLISHED) { if (sk->sk_state != TCP_ESTABLISHED) {
...@@ -1446,7 +1446,7 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) ...@@ -1446,7 +1446,7 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
return -EINVAL; return -EINVAL;
lock_sock(sk); lock_sock(sk);
ax25 = ax25_sk(sk); ax25 = sk_to_ax25(sk);
if (sock_flag(sk, SOCK_ZAPPED)) { if (sock_flag(sk, SOCK_ZAPPED)) {
err = -EADDRNOTAVAIL; err = -EADDRNOTAVAIL;
...@@ -1621,7 +1621,7 @@ static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, ...@@ -1621,7 +1621,7 @@ static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
if (skb == NULL) if (skb == NULL)
goto out; goto out;
if (!ax25_sk(sk)->pidincl) if (!sk_to_ax25(sk)->pidincl)
skb_pull(skb, 1); /* Remove PID */ skb_pull(skb, 1); /* Remove PID */
skb_reset_transport_header(skb); skb_reset_transport_header(skb);
...@@ -1762,7 +1762,7 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) ...@@ -1762,7 +1762,7 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
case SIOCAX25GETINFO: case SIOCAX25GETINFO:
case SIOCAX25GETINFOOLD: { case SIOCAX25GETINFOOLD: {
ax25_cb *ax25 = ax25_sk(sk); ax25_cb *ax25 = sk_to_ax25(sk);
struct ax25_info_struct ax25_info; struct ax25_info_struct ax25_info;
ax25_info.t1 = ax25->t1 / HZ; ax25_info.t1 = ax25->t1 / HZ;
......
...@@ -353,7 +353,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -353,7 +353,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
return 0; return 0;
} }
ax25 = ax25_sk(make); ax25 = sk_to_ax25(make);
skb_set_owner_r(skb, make); skb_set_owner_r(skb, make);
skb_queue_head(&sk->sk_receive_queue, skb); skb_queue_head(&sk->sk_receive_queue, skb);
......
...@@ -2269,7 +2269,6 @@ static void sock_def_write_space(struct sock *sk) ...@@ -2269,7 +2269,6 @@ static void sock_def_write_space(struct sock *sk)
static void sock_def_destruct(struct sock *sk) static void sock_def_destruct(struct sock *sk)
{ {
kfree(sk->sk_protinfo);
} }
void sk_send_sigurg(struct sock *sk) void sk_send_sigurg(struct sock *sk)
......
...@@ -2121,12 +2121,6 @@ static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, ...@@ -2121,12 +2121,6 @@ static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
if (sp->subscribe.sctp_data_io_event) if (sp->subscribe.sctp_data_io_event)
sctp_ulpevent_read_sndrcvinfo(event, msg); sctp_ulpevent_read_sndrcvinfo(event, msg);
#if 0
/* FIXME: we should be calling IP/IPv6 layers. */
if (sk->sk_protinfo.af_inet.cmsg_flags)
ip_cmsg_recv(msg, skb);
#endif
err = copied; err = copied;
/* If skb's length exceeds the user's buffer, update the skb and /* If skb's length exceeds the user's buffer, update the skb and
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册