3.10 final is out, so refresh patches and add md5sum.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 37116
ifeq ($(LINUX_VERSION),3.9.8)
LINUX_KERNEL_MD5SUM:=04d74575ef1c484ad00be61f32bb4557
endif
+ifeq ($(LINUX_VERSION),3.10)
+ LINUX_KERNEL_MD5SUM:=4f25cd5bec5f8d5a7d935b3f2ccb8481
+endif
# disable the md5sum check for unknown kernel versions
LINUX_KERNEL_MD5SUM?=x
# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_ALTERA_STAPL is not set
+# CONFIG_ALX is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_AMD_PHY is not set
# CONFIG_AMIGA_PARTITION is not set
will be called when part or all of the page is to be removed
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -6009,6 +6009,13 @@ F: drivers/scsi/osd/
+@@ -6019,6 +6019,13 @@ F: drivers/scsi/osd/
F: include/scsi/osd_*
F: fs/exofs/
+
+ rc = -EINVAL;
+ if (s->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
-+ printk(KERN_ERR "eCryptfs: maximum fs stacking depth exceeded\n");
++ pr_err("eCryptfs: maximum fs stacking depth exceeded\n");
+ goto out_free;
+ }
* namespace.c
*/
extern int copy_mount_options(const void __user *, unsigned long *);
+@@ -132,12 +127,6 @@ extern struct dentry *__d_alloc(struct s
+ extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *);
+
+ /*
+- * splice.c
+- */
+-extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
+- loff_t *opos, size_t len, unsigned int flags);
+-
+-/*
+ * pipe.c
+ */
+ extern const struct file_operations pipefifo_fops;
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -402,6 +402,7 @@ int __inode_permission(struct inode *ino
goto out;
--- a/fs/namespace.c
+++ b/fs/namespace.c
-@@ -1442,6 +1442,24 @@ void drop_collected_mounts(struct vfsmou
+@@ -1442,6 +1442,33 @@ void drop_collected_mounts(struct vfsmou
namespace_unlock();
}
++/**
++ * clone_private_mount - create a private clone of a path
++ *
++ * This creates a new vfsmount, which will be the clone of @path. The new will
++ * not be attached anywhere in the namespace and will be private (i.e. changes
++ * to the originating mount won't be propagated into this).
++ *
++ * Release with mntput().
++ */
+struct vfsmount *clone_private_mount(struct path *path)
+{
+ struct mount *old_mnt = real_mount(path->mnt);
+ down_read(&namespace_sem);
+ new_mnt = clone_mnt(old_mnt, path->dentry, CL_PRIVATE);
+ up_read(&namespace_sem);
-+ if (!new_mnt)
-+ return ERR_PTR(-ENOMEM);
++ if (IS_ERR(new_mnt))
++ return ERR_CAST(new_mnt);
+
+ return &new_mnt->mnt;
+}
int lookup_flags = 0;
--- /dev/null
+++ b/fs/overlayfs/Kconfig
-@@ -0,0 +1,4 @@
+@@ -0,0 +1,10 @@
+config OVERLAYFS_FS
+ tristate "Overlay filesystem support"
+ help
-+ Add support for overlay filesystem.
++ An overlay filesystem combines two filesystems - an 'upper' filesystem
++ and a 'lower' filesystem. When a name exists in both filesystems, the
++ object in the 'upper' filesystem is visible while the object in the
++ 'lower' filesystem is either hidden or, in the case of directories,
++ merged with the 'upper' object.
++
++ For more information see Documentation/filesystems/overlayfs.txt
--- /dev/null
+++ b/fs/overlayfs/Makefile
@@ -0,0 +1,7 @@
+overlayfs-objs := super.o inode.o dir.o readdir.o copy_up.o
--- /dev/null
+++ b/fs/overlayfs/copy_up.c
-@@ -0,0 +1,385 @@
+@@ -0,0 +1,387 @@
+/*
+ *
+ * Copyright (C) 2011 Novell Inc.
+{
+ struct file *old_file;
+ struct file *new_file;
++ loff_t old_pos = 0;
++ loff_t new_pos = 0;
+ int error = 0;
+
+ if (len == 0)
+
+ /* FIXME: copy up sparse files efficiently */
+ while (len) {
-+ loff_t offset = new_file->f_pos;
+ size_t this_len = OVL_COPY_UP_CHUNK_SIZE;
+ long bytes;
+
+ break;
+ }
+
-+ bytes = do_splice_direct(old_file, &offset, new_file, this_len,
-+ SPLICE_F_MOVE);
++ bytes = do_splice_direct(old_file, &old_pos,
++ new_file, &new_pos,
++ this_len, SPLICE_F_MOVE);
+ if (bytes <= 0) {
+ error = bytes;
+ break;
+}
--- /dev/null
+++ b/fs/overlayfs/dir.c
-@@ -0,0 +1,604 @@
+@@ -0,0 +1,605 @@
+/*
+ *
+ * Copyright (C) 2011 Novell Inc.
+ * There's no way to recover from failure to whiteout.
+ * What should we do? Log a big fat error and... ?
+ */
-+ printk(KERN_ERR "overlayfs: ERROR - failed to whiteout '%s'\n",
++ pr_err("overlayfs: ERROR - failed to whiteout '%s'\n",
+ dentry->d_name.name);
+ }
+
+ }
+ newinode = ovl_new_inode(old->d_sb, newdentry->d_inode->i_mode,
+ new->d_fsdata);
-+ if (!newinode)
++ if (!newinode) {
++ err = -ENOMEM;
+ goto link_fail;
++ }
+ ovl_copyattr(upperdir->d_inode, newinode);
+
+ ovl_dentry_version_inc(new->d_parent);
+ mutex_unlock(&upperdir->d_inode->i_mutex);
+out:
+ return err;
-+
+}
+
+static int ovl_rename(struct inode *olddir, struct dentry *old,
+ loff_t res;
+ struct ovl_dir_file *od = file->private_data;
+
-+ mutex_lock(&file->f_dentry->d_inode->i_mutex);
++ mutex_lock(&file_inode(file)->i_mutex);
+ if (!file->f_pos)
+ ovl_dir_reset(file);
+
+ res = offset;
+ }
+out_unlock:
-+ mutex_unlock(&file->f_dentry->d_inode->i_mutex);
++ mutex_unlock(&file_inode(file)->i_mutex);
+
+ return res;
+}
+
+ dentry = lookup_one_len(p->name, upperdir, p->len);
+ if (IS_ERR(dentry)) {
-+ printk(KERN_WARNING
++ pr_warn(
+ "overlayfs: failed to lookup whiteout %.*s: %li\n",
+ p->len, p->name, PTR_ERR(dentry));
+ continue;
+ ret = vfs_unlink(upperdir->d_inode, dentry);
+ dput(dentry);
+ if (ret)
-+ printk(KERN_WARNING
++ pr_warn(
+ "overlayfs: failed to unlink whiteout %.*s: %i\n",
+ p->len, p->name, ret);
+ }
+
+struct file *ovl_path_open(struct path *path, int flags)
+{
-+ path_get(path);
+ return dentry_open(path, flags, current_cred());
+}
+
+};
+
+enum {
-+ Opt_lowerdir,
-+ Opt_upperdir,
-+ Opt_err,
++ OPT_LOWERDIR,
++ OPT_UPPERDIR,
++ OPT_ERR,
+};
+
+static const match_table_t ovl_tokens = {
-+ {Opt_lowerdir, "lowerdir=%s"},
-+ {Opt_upperdir, "upperdir=%s"},
-+ {Opt_err, NULL}
++ {OPT_LOWERDIR, "lowerdir=%s"},
++ {OPT_UPPERDIR, "upperdir=%s"},
++ {OPT_ERR, NULL}
+};
+
+static int ovl_parse_opt(char *opt, struct ovl_config *config)
+
+ token = match_token(p, ovl_tokens, args);
+ switch (token) {
-+ case Opt_upperdir:
++ case OPT_UPPERDIR:
+ kfree(config->upperdir);
+ config->upperdir = match_strdup(&args[0]);
+ if (!config->upperdir)
+ return -ENOMEM;
+ break;
+
-+ case Opt_lowerdir:
++ case OPT_LOWERDIR:
+ kfree(config->lowerdir);
+ config->lowerdir = match_strdup(&args[0]);
+ if (!config->lowerdir)
+
+ err = -EINVAL;
+ if (!ufs->config.upperdir || !ufs->config.lowerdir) {
-+ printk(KERN_ERR "overlayfs: missing upperdir or lowerdir\n");
++ pr_err("overlayfs: missing upperdir or lowerdir\n");
+ goto out_free_config;
+ }
+
+
+ err = vfs_statfs(&lowerpath, &statfs);
+ if (err) {
-+ printk(KERN_ERR "overlayfs: statfs failed on lowerpath\n");
++ pr_err("overlayfs: statfs failed on lowerpath\n");
+ goto out_put_lowerpath;
+ }
+ ufs->lower_namelen = statfs.f_namelen;
+
+ err = -EINVAL;
+ if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
-+ printk(KERN_ERR "overlayfs: maximum fs stacking depth exceeded\n");
++ pr_err("overlayfs: maximum fs stacking depth exceeded\n");
+ goto out_put_lowerpath;
+ }
+
+ ufs->upper_mnt = clone_private_mount(&upperpath);
+ err = PTR_ERR(ufs->upper_mnt);
+ if (IS_ERR(ufs->upper_mnt)) {
-+ printk(KERN_ERR "overlayfs: failed to clone upperpath\n");
++ pr_err("overlayfs: failed to clone upperpath\n");
+ goto out_put_lowerpath;
+ }
+
+ ufs->lower_mnt = clone_private_mount(&lowerpath);
+ err = PTR_ERR(ufs->lower_mnt);
+ if (IS_ERR(ufs->lower_mnt)) {
-+ printk(KERN_ERR "overlayfs: failed to clone lowerpath\n");
++ pr_err("overlayfs: failed to clone lowerpath\n");
+ goto out_put_upper_mnt;
+ }
+
+ .mount = ovl_mount,
+ .kill_sb = kill_anon_super,
+};
++MODULE_ALIAS_FS("overlayfs");
+
+static int __init ovl_init(void)
+{
+module_exit(ovl_exit);
--- a/fs/splice.c
+++ b/fs/splice.c
-@@ -1311,6 +1311,7 @@ long do_splice_direct(struct file *in, l
+@@ -1313,6 +1313,7 @@ long do_splice_direct(struct file *in, l
return ret;
}
extern int generic_permission(struct inode *, int);
static inline bool execute_ok(struct inode *inode)
+@@ -2414,6 +2428,9 @@ extern ssize_t generic_file_splice_write
+ struct file *, loff_t *, size_t, unsigned int);
+ extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
+ struct file *out, loff_t *, size_t len, unsigned int flags);
++extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
++ loff_t *opos, size_t len, unsigned int flags);
++
+
+ extern void
+ file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -68,6 +68,9 @@ extern void mnt_pin(struct vfsmount *mnt
+++ /dev/null
---- a/fs/overlayfs/super.c
-+++ b/fs/overlayfs/super.c
-@@ -385,7 +385,6 @@ struct dentry *ovl_lookup(struct inode *
-
- struct file *ovl_path_open(struct path *path, int flags)
- {
-- path_get(path);
- return dentry_open(path, flags, current_cred());
- }
-
} else if (argc != 1)
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1244,6 +1244,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
+@@ -1245,6 +1245,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
the unaligned access emulation.
see arch/parisc/kernel/unaligned.c for reference
.init.data : {
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
-@@ -122,6 +122,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
+@@ -123,6 +123,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
ORIG_CFLAGS := $(KBUILD_CFLAGS)
KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
endif
+KBUILD_CFLAGS_KERNEL := $(patsubst -f%-sections,,$(KBUILD_CFLAGS_KERNEL))
ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj)
- asflags-y := -Wa,-march=all -DZIMAGE
+ asflags-y := -DZIMAGE
tristate "Userspace cryptographic algorithm configuration"
--- a/crypto/algboss.c
+++ b/crypto/algboss.c
-@@ -247,6 +247,9 @@ static int cryptomgr_schedule_test(struc
+@@ -248,6 +248,9 @@ static int cryptomgr_schedule_test(struc
type = alg->cra_flags;
/* This piece of crap needs to disappear into per-type test hooks. */
if ((!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) &
CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV) &&
((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) ==
-@@ -255,6 +258,7 @@ static int cryptomgr_schedule_test(struc
+@@ -256,6 +259,7 @@ static int cryptomgr_schedule_test(struc
(!((type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK) &&
alg->cra_type == &crypto_nivaead_type && alg->cra_aead.ivsize))
type |= CRYPTO_ALG_TESTED;
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
-@@ -1359,6 +1359,13 @@ config CRYPTO_842
+@@ -1361,6 +1361,13 @@ config CRYPTO_842
help
This is the 842 algorithm.
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3227,6 +3230,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3226,6 +3229,16 @@ packet_setsockopt(struct socket *sock, i
po->tp_tx_has_off = !!val;
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -3276,6 +3289,13 @@ static int packet_getsockopt(struct sock
+@@ -3275,6 +3288,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
unsigned char banned_flags)
-@@ -5133,6 +5132,9 @@ int __init addrconf_init(void)
+@@ -5137,6 +5136,9 @@ int __init addrconf_init(void)
ipv6_addr_label_rtnl_register();
return 0;
errout:
rtnl_af_unregister(&inet6_ops);
-@@ -5151,6 +5153,9 @@ void addrconf_cleanup(void)
+@@ -5155,6 +5157,9 @@ void addrconf_cleanup(void)
struct net_device *dev;
int i;
default:
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
-@@ -782,7 +782,7 @@ static void __br_multicast_send_query(st
+@@ -783,7 +783,7 @@ static void __br_multicast_send_query(st
if (port) {
__skb_push(skb, sizeof(struct ethhdr));
skb->dev = port->dev;
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -1847,7 +1847,7 @@ static inline int pskb_network_may_pull(
+@@ -1848,7 +1848,7 @@ static inline int pskb_network_may_pull(
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -1892,6 +1892,24 @@ static inline void pskb_trim_unique(stru
+@@ -1893,6 +1893,24 @@ static inline void pskb_trim_unique(stru
BUG_ON(err);
}
-diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
-index 005e2c2..a6a1df4 100644
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
@@ -55,6 +55,7 @@ struct netns_ipv6 {
struct rt6_info *ip6_blk_hole_entry;
struct fib6_table *fib6_local_tbl;
struct fib_rules_ops *fib6_rules_ops;
-diff --git a/include/uapi/linux/fib_rules.h b/include/uapi/linux/fib_rules.h
-index 51da65b..1429852 100644
--- a/include/uapi/linux/fib_rules.h
+++ b/include/uapi/linux/fib_rules.h
@@ -64,6 +64,10 @@ enum {
__FR_ACT_MAX,
};
-diff --git a/include/uapi/linux/icmpv6.h b/include/uapi/linux/icmpv6.h
-index e0133c7..dabfa1a 100644
--- a/include/uapi/linux/icmpv6.h
+++ b/include/uapi/linux/icmpv6.h
@@ -115,6 +115,7 @@ struct icmp6hdr {
/*
* Codes for Time Exceeded
-diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
-index 7a2144e..8f643f1 100644
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
@@ -203,6 +203,7 @@ enum {
__RTN_MAX
};
-diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c
-index 26aa65d..2f66341 100644
--- a/net/ipv4/fib_rules.c
+++ b/net/ipv4/fib_rules.c
-@@ -84,6 +84,10 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp,
+@@ -84,6 +84,10 @@ static int fib4_rule_action(struct fib_r
err = -EACCES;
goto errout;
case FR_ACT_BLACKHOLE:
default:
err = -EINVAL;
-diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
-index 8f6cb7a..dbae75d 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
-@@ -138,6 +138,10 @@ const struct fib_prop fib_props[RTN_MAX + 1] = {
+@@ -138,6 +138,10 @@ const struct fib_prop fib_props[RTN_MAX
.error = -EINVAL,
.scope = RT_SCOPE_NOWHERE,
},
};
static void rt_fibinfo_free(struct rtable __rcu **rtp)
-diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
-index 49616fe..e2845bd 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2334,6 +2334,7 @@ static const char *const rtn_type_names[__RTN_MAX] = {
+@@ -2334,6 +2334,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
};
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
-diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
-index df97f0a..2bd33cc 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
-@@ -181,6 +181,7 @@ static int ipmr_rule_action(struct fib_rule *rule, struct flowi *flp,
+@@ -181,6 +181,7 @@ static int ipmr_rule_action(struct fib_r
case FR_ACT_UNREACHABLE:
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
return -EACCES;
case FR_ACT_BLACKHOLE:
default:
-diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
-index 2e1a432..c4413b2 100644
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
-@@ -69,6 +69,9 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
+@@ -69,6 +69,9 @@ static int fib6_rule_action(struct fib_r
case FR_ACT_PROHIBIT:
rt = net->ipv6.ip6_prohibit_entry;
goto discard_pkt;
}
table = fib6_get_table(net, rule->table);
-diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
-index 583e8d4..1e524da 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
-@@ -166,6 +166,8 @@ static int ip6mr_rule_action(struct fib_rule *rule, struct flowi *flp,
+@@ -166,6 +166,8 @@ static int ip6mr_rule_action(struct fib_
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
return -EACCES;
case FR_ACT_BLACKHOLE:
default:
return -EINVAL;
-diff --git a/net/ipv6/route.c b/net/ipv6/route.c
-index 2b87418..864f5fe 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
-@@ -245,6 +245,24 @@ static const struct rt6_info ip6_prohibit_entry_template = {
+@@ -245,6 +245,24 @@ static const struct rt6_info ip6_prohibi
.rt6i_ref = ATOMIC_INIT(1),
};
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__refcnt = ATOMIC_INIT(1),
-@@ -1459,6 +1477,9 @@ int ip6_route_add(struct fib6_config *cfg)
+@@ -1459,6 +1477,9 @@ int ip6_route_add(struct fib6_config *cf
case RTN_THROW:
rt->dst.error = -EAGAIN;
break;
default:
rt->dst.error = -ENETUNREACH;
break;
-@@ -2035,6 +2056,17 @@ static int ip6_pkt_prohibit_out(struct sk_buff *skb)
+@@ -2035,6 +2056,17 @@ static int ip6_pkt_prohibit_out(struct s
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
}
#endif
/*
-@@ -2240,7 +2272,8 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
+@@ -2240,7 +2272,8 @@ static int rtm_to_fib6_config(struct sk_
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -2442,6 +2475,9 @@ static int rt6_fill_node(struct net *net,
+@@ -2442,6 +2475,9 @@ static int rt6_fill_node(struct net *net
case -EACCES:
rtm->rtm_type = RTN_PROHIBIT;
break;
case -EAGAIN:
rtm->rtm_type = RTN_THROW;
break;
-@@ -2692,6 +2728,8 @@ static int ip6_route_dev_notify(struct notifier_block *this,
+@@ -2692,6 +2728,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
-@@ -2952,6 +2990,17 @@ static int __net_init ip6_route_net_init(struct net *net)
+@@ -2952,6 +2990,17 @@ static int __net_init ip6_route_net_init
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
ip6_template_metrics, true);
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -2987,6 +3038,7 @@ static void __net_exit ip6_route_net_exit(struct net *net)
+@@ -2987,6 +3038,7 @@ static void __net_exit ip6_route_net_exi
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry);
kfree(net->ipv6.ip6_blk_hole_entry);
obj-$(CONFIG_CICADA_PHY) += cicada.o
--- a/include/uapi/linux/Kbuild
+++ b/include/uapi/linux/Kbuild
-@@ -360,6 +360,7 @@ header-y += stddef.h
+@@ -361,6 +361,7 @@ header-y += stddef.h
header-y += string.h
header-y += suspend_ioctls.h
header-y += swab.h
#define IF_GET_IFACE 0x0001 /* for querying only */
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -1877,6 +1877,10 @@ static inline int pskb_trim(struct sk_bu
+@@ -1878,6 +1878,10 @@ static inline int pskb_trim(struct sk_bu
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
}
/**
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
* @skb: buffer to alter
-@@ -2001,16 +2005,6 @@ static inline struct sk_buff *dev_alloc_
+@@ -2002,16 +2006,6 @@ static inline struct sk_buff *dev_alloc_
}
help
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -2542,9 +2542,19 @@ int dev_hard_start_xmit(struct sk_buff *
+@@ -2576,9 +2576,19 @@ int dev_hard_start_xmit(struct sk_buff *
if (!list_empty(&ptype_all))
dev_queue_xmit_nit(skb, dev);
if (rc == NETDEV_TX_OK)
txq_trans_update(txq);
return rc;
-@@ -2560,9 +2570,19 @@ gso:
+@@ -2594,9 +2604,19 @@ gso:
if (!list_empty(&ptype_all))
dev_queue_xmit_nit(nskb, dev);
goto err;
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -2851,6 +2851,8 @@ static __net_initdata struct pernet_oper
+@@ -2838,6 +2838,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void)
{
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2589,10 +2589,12 @@ static const struct file_operations fib_
+@@ -2590,10 +2590,12 @@ static const struct file_operations fib_
int __net_init fib_proc_init(struct net *net)
{
&fib_triestat_fops))
goto out2;
-@@ -2602,17 +2604,21 @@ int __net_init fib_proc_init(struct net
+@@ -2603,17 +2605,21 @@ int __net_init fib_proc_init(struct net
return 0;
out3:
endif
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -2467,12 +2467,26 @@ enum {
+@@ -2468,12 +2468,26 @@ enum {
DIO_SKIP_HOLES = 0x02,
};
+#endif
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1185,6 +1185,10 @@ config RELAY
+@@ -1186,6 +1186,10 @@ config RELAY
If unsure, say N.
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
-@@ -1404,3 +1404,6 @@ source "drivers/crypto/Kconfig"
+@@ -1406,3 +1406,6 @@ source "drivers/crypto/Kconfig"
source crypto/asymmetric_keys/Kconfig
endif # if CRYPTO
* When we die, we re-parent all our children, and try to:
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -3694,6 +3694,7 @@ int can_nice(const struct task_struct *p
+@@ -3707,6 +3707,7 @@ int can_nice(const struct task_struct *p
return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
capable(CAP_SYS_NICE));
}
--- a/mm/memory.c
+++ b/mm/memory.c
-@@ -1413,6 +1413,7 @@ void zap_page_range(struct vm_area_struc
+@@ -1404,6 +1404,7 @@ void zap_page_range(struct vm_area_struc
mmu_notifier_invalidate_range_end(mm, start, end);
tlb_finish_mmu(&tlb, start, end);
}
CFLAGS:=-Os -pipe -mtune=cortex-a9 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp
MAINTAINER:=Luka Perkov <luka@openwrt.org>
-LINUX_VERSION:=3.10-rc3
+LINUX_VERSION:=3.10
include $(INCLUDE_DIR)/target.mk