From: Stephen Rothwell Date: Wed, 26 Sep 2012 01:46:19 +0000 (+1000) Subject: Merge remote-tracking branch 'net-next/master' X-Git-Tag: next-20120926~68 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ccc214588d25b4ebc3f1b8e01c134238dd2a15fd;p=karo-tx-linux.git Merge remote-tracking branch 'net-next/master' Conflicts: drivers/net/team/team.c drivers/net/usb/qmi_wwan.c net/batman-adv/bat_iv_ogm.c net/ipv4/fib_frontend.c net/ipv4/route.c net/socket.c --- ccc214588d25b4ebc3f1b8e01c134238dd2a15fd diff --cc include/linux/net.h index c8a9708d4d66,99276c3dc89a..a3831f30e120 --- a/include/linux/net.h +++ b/include/linux/net.h @@@ -247,7 -246,7 +247,8 @@@ extern int sock_sendmsg(struct size_t len); extern int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int flags); - extern struct file *sock_alloc_file(struct socket *sock, int flags); -extern int sock_map_fd(struct socket *sock, int flags); ++extern struct file *sock_alloc_file(struct socket *sock, int flags, ++ const char *dname); extern struct socket *sockfd_lookup(int fd, int *err); extern struct socket *sock_from_file(struct file *file, int *err); #define sockfd_put(sock) fput(sock->file) diff --cc include/net/net_namespace.h index fd87963a0ea5,d61e2b36d9e3..4faf6612ecac --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@@ -102,9 -110,15 +110,16 @@@ struct net #endif struct netns_ipvs *ipvs; struct sock *diag_nlsk; + atomic_t rt_genid; }; + /* + * ifindex generation is per-net namespace, and loopback is + * always the 1st device in ns (see net_dev_init), thus any + * loopback device should get ifindex 1 + */ + + #define LOOPBACK_IFINDEX 1 #include diff --cc include/net/netns/ipv4.h index eb24dbccd81e,7d00583d53da..2ae2b8372cfd --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h @@@ -62,9 -61,10 +61,9 @@@ struct netns_ipv4 int sysctl_icmp_ratemask; int sysctl_icmp_errors_use_inbound_ifaddr; - unsigned int sysctl_ping_group_range[2]; + kgid_t sysctl_ping_group_range[2]; long sysctl_tcp_mem[3]; - atomic_t rt_genid; atomic_t dev_addr_genid; #ifdef CONFIG_IP_MROUTE diff --cc net/9p/trans_fd.c index 4c3be8f6337c,6449bae15702..7bea6da41abe --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@@ -803,8 -800,8 +803,8 @@@ static int p9_socket_open(struct p9_cli return -ENOMEM; csocket->sk->sk_allocation = GFP_NOIO; - file = sock_alloc_file(csocket, 0); - fd = sock_map_fd(csocket, 0); - if (fd < 0) { ++ file = sock_alloc_file(csocket, 0, NULL); + if (IS_ERR(file)) { pr_err("%s (%d): failed to map fd\n", __func__, task_pid_nr(current)); sock_release(csocket); diff --cc net/batman-adv/bat_iv_ogm.c index 469daabd90c7,df79300dcb7b..b02b75dae3a8 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c @@@ -642,9 -652,9 +652,10 @@@ batadv_iv_ogm_orig_update(struct batadv struct batadv_neigh_node *router = NULL; struct batadv_orig_node *orig_node_tmp; struct hlist_node *node; + int if_num; uint8_t sum_orig, sum_neigh; uint8_t *neigh_addr; + uint8_t tq_avg; batadv_dbg(BATADV_DBG_BATMAN, bat_priv, "update_originator(): Searching and updating originator entry of received packet\n"); diff --cc net/sctp/socket.c index fb5931ca50d0,d37d24ff197f..59d16ea927f0 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@@ -4297,13 -4311,6 +4313,13 @@@ static int sctp_getsockopt_peeloff(stru goto out; } - newfile = sock_alloc_file(newsock, 0); ++ newfile = sock_alloc_file(newsock, 0, NULL); + if (unlikely(IS_ERR(newfile))) { + put_unused_fd(retval); + sock_release(newsock); + return PTR_ERR(newfile); + } + SCTP_DEBUG_PRINTK("%s: sk: %p newsk: %p sd: %d\n", __func__, sk, newsock->sk, retval); diff --cc net/socket.c index 38a14311f3a6,c641549a13e2..06c4dbeeacf2 --- a/net/socket.c +++ b/net/socket.c @@@ -346,15 -347,30 +347,23 @@@ static struct file_system_type sock_fs_ * but we take care of internal coherence yet. */ - struct file *sock_alloc_file(struct socket *sock, int flags) -static int sock_alloc_file(struct socket *sock, struct file **f, int flags, - const char *dname) ++struct file *sock_alloc_file(struct socket *sock, int flags, ++ const char *dname) { struct qstr name = { .name = "" }; struct path path; struct file *file; - int fd; - - fd = get_unused_fd_flags(flags); - if (unlikely(fd < 0)) - return fd; + if (dname) { + name.name = dname; + name.len = strlen(name.name); + } else if (sock->sk) { + name.name = sock->sk->sk_prot_creator->name; + name.len = strlen(name.name); + } path.dentry = d_alloc_pseudo(sock_mnt->mnt_sb, &name); - if (unlikely(!path.dentry)) { - put_unused_fd(fd); - return -ENOMEM; - } + if (unlikely(!path.dentry)) + return ERR_PTR(-ENOMEM); path.mnt = mntget(sock_mnt); d_instantiate(path.dentry, SOCK_INODE(sock)); @@@ -373,26 -390,22 +382,26 @@@ file->f_flags = O_RDWR | (flags & O_NONBLOCK); file->f_pos = 0; file->private_data = sock; - - *f = file; - return fd; + return file; } +EXPORT_SYMBOL(sock_alloc_file); -int sock_map_fd(struct socket *sock, int flags) +static int sock_map_fd(struct socket *sock, int flags) { struct file *newfile; - int fd = sock_alloc_file(sock, &newfile, flags, NULL); + int fd = get_unused_fd_flags(flags); + if (unlikely(fd < 0)) + return fd; - newfile = sock_alloc_file(sock, flags); - if (likely(fd >= 0)) ++ newfile = sock_alloc_file(sock, flags, NULL); + if (likely(!IS_ERR(newfile))) { fd_install(fd, newfile); + return fd; + } - return fd; + put_unused_fd(fd); + return PTR_ERR(newfile); } -EXPORT_SYMBOL(sock_map_fd); struct socket *sock_from_file(struct file *file, int *err) { @@@ -1395,27 -1471,12 +1467,27 @@@ SYSCALL_DEFINE4(socketpair, int, family err = fd1; goto out_release_both; } - - fd2 = sock_alloc_file(sock2, &newfile2, flags, NULL); + fd2 = get_unused_fd_flags(flags); if (unlikely(fd2 < 0)) { err = fd2; + put_unused_fd(fd1); + goto out_release_both; + } + - newfile1 = sock_alloc_file(sock1, flags); ++ newfile1 = sock_alloc_file(sock1, flags, NULL); + if (unlikely(IS_ERR(newfile1))) { + err = PTR_ERR(newfile1); + put_unused_fd(fd1); + put_unused_fd(fd2); + goto out_release_both; + } + - newfile2 = sock_alloc_file(sock2, flags); ++ newfile2 = sock_alloc_file(sock2, flags, NULL); + if (IS_ERR(newfile2)) { + err = PTR_ERR(newfile2); fput(newfile1); put_unused_fd(fd1); + put_unused_fd(fd2); sock_release(sock2); goto out; } @@@ -1553,13 -1615,6 +1625,14 @@@ SYSCALL_DEFINE4(accept4, int, fd, struc sock_release(newsock); goto out_put; } - newfile = sock_alloc_file(newsock, flags); ++ newfile = sock_alloc_file(newsock, flags, ++ sock->sk->sk_prot_creator->name); + if (unlikely(IS_ERR(newfile))) { + err = PTR_ERR(newfile); + put_unused_fd(newfd); + sock_release(newsock); + goto out_put; + } err = security_socket_accept(sock, newsock); if (err)