Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/renesas/ravb_main.c kernel/bpf/syscall.c net/ipv4/ipmr.c All three conflicts were cases of overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -785,7 +785,7 @@ unsigned int datagram_poll(struct file *file, struct socket *sock,
|
||||
if (sock_writeable(sk))
|
||||
mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
|
||||
else
|
||||
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||
sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
@@ -2215,7 +2215,7 @@ static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn,
|
||||
ndm->ndm_pad2 = 0;
|
||||
ndm->ndm_flags = pn->flags | NTF_PROXY;
|
||||
ndm->ndm_type = RTN_UNICAST;
|
||||
ndm->ndm_ifindex = pn->dev->ifindex;
|
||||
ndm->ndm_ifindex = pn->dev ? pn->dev->ifindex : 0;
|
||||
ndm->ndm_state = NUD_NONE;
|
||||
|
||||
if (nla_put(skb, NDA_DST, tbl->key_len, pn->key))
|
||||
@@ -2333,7 +2333,7 @@ static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
|
||||
if (h > s_h)
|
||||
s_idx = 0;
|
||||
for (n = tbl->phash_buckets[h], idx = 0; n; n = n->next) {
|
||||
if (dev_net(n->dev) != net)
|
||||
if (pneigh_net(n) != net)
|
||||
continue;
|
||||
if (idx < s_idx)
|
||||
goto next;
|
||||
|
@@ -56,7 +56,7 @@ static void cgrp_css_free(struct cgroup_subsys_state *css)
|
||||
kfree(css_cls_state(css));
|
||||
}
|
||||
|
||||
static int update_classid(const void *v, struct file *file, unsigned n)
|
||||
static int update_classid_sock(const void *v, struct file *file, unsigned n)
|
||||
{
|
||||
int err;
|
||||
struct socket *sock = sock_from_file(file, &err);
|
||||
@@ -67,18 +67,25 @@ static int update_classid(const void *v, struct file *file, unsigned n)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void update_classid(struct cgroup_subsys_state *css, void *v)
|
||||
{
|
||||
struct css_task_iter it;
|
||||
struct task_struct *p;
|
||||
|
||||
css_task_iter_start(css, &it);
|
||||
while ((p = css_task_iter_next(&it))) {
|
||||
task_lock(p);
|
||||
iterate_fd(p->files, 0, update_classid_sock, v);
|
||||
task_unlock(p);
|
||||
}
|
||||
css_task_iter_end(&it);
|
||||
}
|
||||
|
||||
static void cgrp_attach(struct cgroup_subsys_state *css,
|
||||
struct cgroup_taskset *tset)
|
||||
{
|
||||
struct cgroup_cls_state *cs = css_cls_state(css);
|
||||
void *v = (void *)(unsigned long)cs->classid;
|
||||
struct task_struct *p;
|
||||
|
||||
cgroup_taskset_for_each(p, tset) {
|
||||
task_lock(p);
|
||||
iterate_fd(p->files, 0, update_classid, v);
|
||||
task_unlock(p);
|
||||
}
|
||||
update_classid(css,
|
||||
(void *)(unsigned long)css_cls_state(css)->classid);
|
||||
}
|
||||
|
||||
static u64 read_classid(struct cgroup_subsys_state *css, struct cftype *cft)
|
||||
@@ -89,8 +96,11 @@ static u64 read_classid(struct cgroup_subsys_state *css, struct cftype *cft)
|
||||
static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft,
|
||||
u64 value)
|
||||
{
|
||||
css_cls_state(css)->classid = (u32) value;
|
||||
struct cgroup_cls_state *cs = css_cls_state(css);
|
||||
|
||||
cs->classid = (u32)value;
|
||||
|
||||
update_classid(css, (void *)(unsigned long)cs->classid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -305,6 +305,8 @@ void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
|
||||
err = put_user(cmlen, &cm->cmsg_len);
|
||||
if (!err) {
|
||||
cmlen = CMSG_SPACE(i*sizeof(int));
|
||||
if (msg->msg_controllen < cmlen)
|
||||
cmlen = msg->msg_controllen;
|
||||
msg->msg_control += cmlen;
|
||||
msg->msg_controllen -= cmlen;
|
||||
}
|
||||
|
@@ -1530,7 +1530,6 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
|
||||
skb_queue_head_init(&newsk->sk_receive_queue);
|
||||
skb_queue_head_init(&newsk->sk_write_queue);
|
||||
|
||||
spin_lock_init(&newsk->sk_dst_lock);
|
||||
rwlock_init(&newsk->sk_callback_lock);
|
||||
lockdep_set_class_and_name(&newsk->sk_callback_lock,
|
||||
af_callback_keys + newsk->sk_family,
|
||||
@@ -1607,7 +1606,7 @@ void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
|
||||
{
|
||||
u32 max_segs = 1;
|
||||
|
||||
__sk_dst_set(sk, dst);
|
||||
sk_dst_set(sk, dst);
|
||||
sk->sk_route_caps = dst->dev->features;
|
||||
if (sk->sk_route_caps & NETIF_F_GSO)
|
||||
sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE;
|
||||
@@ -1815,7 +1814,7 @@ static long sock_wait_for_wmem(struct sock *sk, long timeo)
|
||||
{
|
||||
DEFINE_WAIT(wait);
|
||||
|
||||
clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||
sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
|
||||
for (;;) {
|
||||
if (!timeo)
|
||||
break;
|
||||
@@ -1861,7 +1860,7 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
|
||||
if (sk_wmem_alloc_get(sk) < sk->sk_sndbuf)
|
||||
break;
|
||||
|
||||
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||
sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
|
||||
set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
|
||||
err = -EAGAIN;
|
||||
if (!timeo)
|
||||
@@ -2048,9 +2047,9 @@ int sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb)
|
||||
DEFINE_WAIT(wait);
|
||||
|
||||
prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
|
||||
set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
|
||||
sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
|
||||
rc = sk_wait_event(sk, timeo, skb_peek_tail(&sk->sk_receive_queue) != skb);
|
||||
clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
|
||||
sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
|
||||
finish_wait(sk_sleep(sk), &wait);
|
||||
return rc;
|
||||
}
|
||||
@@ -2388,7 +2387,6 @@ void sock_init_data(struct socket *sock, struct sock *sk)
|
||||
} else
|
||||
sk->sk_wq = NULL;
|
||||
|
||||
spin_lock_init(&sk->sk_dst_lock);
|
||||
rwlock_init(&sk->sk_callback_lock);
|
||||
lockdep_set_class_and_name(&sk->sk_callback_lock,
|
||||
af_callback_keys + sk->sk_family,
|
||||
|
@@ -39,7 +39,7 @@ void sk_stream_write_space(struct sock *sk)
|
||||
wake_up_interruptible_poll(&wq->wait, POLLOUT |
|
||||
POLLWRNORM | POLLWRBAND);
|
||||
if (wq && wq->fasync_list && !(sk->sk_shutdown & SEND_SHUTDOWN))
|
||||
sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT);
|
||||
sock_wake_async(wq, SOCK_WAKE_SPACE, POLL_OUT);
|
||||
rcu_read_unlock();
|
||||
}
|
||||
}
|
||||
@@ -126,7 +126,7 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p)
|
||||
current_timeo = vm_wait = (prandom_u32() % (HZ / 5)) + 2;
|
||||
|
||||
while (1) {
|
||||
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||
sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
|
||||
|
||||
prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
|
||||
|
||||
@@ -139,7 +139,7 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p)
|
||||
}
|
||||
if (signal_pending(current))
|
||||
goto do_interrupted;
|
||||
clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||
sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
|
||||
if (sk_stream_memory_free(sk) && !vm_wait)
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user