Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Fun set of conflict resolutions here... For the mac80211 stuff, these were fortunately just parallel adds. Trivially resolved. In drivers/net/phy/phy.c we had a bug fix in 'net' that moved the function phy_disable_interrupts() earlier in the file, whilst in 'net-next' the phy_error() call from this function was removed. In net/ipv4/xfrm4_policy.c, David Ahern's changes to remove the 'rt_table_id' member of rtable collided with a bug fix in 'net' that added a new struct member "rt_mtu_locked" which needs to be copied over here. The mlxsw driver conflict consisted of net-next separating the span code and definitions into separate files, whilst a 'net' bug fix made some changes to that moved code. The mlx5 infiniband conflict resolution was quite non-trivial, the RDMA tree's merge commit was used as a guide here, and here are their notes: ==================== Due to bug fixes found by the syzkaller bot and taken into the for-rc branch after development for the 4.17 merge window had already started being taken into the for-next branch, there were fairly non-trivial merge issues that would need to be resolved between the for-rc branch and the for-next branch. This merge resolves those conflicts and provides a unified base upon which ongoing development for 4.17 can be based. Conflicts: drivers/infiniband/hw/mlx5/main.c - Commit42cea83f95
(IB/mlx5: Fix cleanup order on unload) added to for-rc and commitb5ca15ad7e
(IB/mlx5: Add proper representors support) add as part of the devel cycle both needed to modify the init/de-init functions used by mlx5. To support the new representors, the new functions added by the cleanup patch needed to be made non-static, and the init/de-init list added by the representors patch needed to be modified to match the init/de-init list changes made by the cleanup patch. Updates: drivers/infiniband/hw/mlx5/mlx5_ib.h - Update function prototypes added by representors patch to reflect new function names as changed by cleanup patch drivers/infiniband/hw/mlx5/ib_rep.c - Update init/de-init stage list to match new order from cleanup patch ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -635,6 +635,7 @@ static inline u32 fnhe_hashfun(__be32 daddr)
|
||||
static void fill_route_from_fnhe(struct rtable *rt, struct fib_nh_exception *fnhe)
|
||||
{
|
||||
rt->rt_pmtu = fnhe->fnhe_pmtu;
|
||||
rt->rt_mtu_locked = fnhe->fnhe_mtu_locked;
|
||||
rt->dst.expires = fnhe->fnhe_expires;
|
||||
|
||||
if (fnhe->fnhe_gw) {
|
||||
@@ -645,7 +646,7 @@ static void fill_route_from_fnhe(struct rtable *rt, struct fib_nh_exception *fnh
|
||||
}
|
||||
|
||||
static void update_or_create_fnhe(struct fib_nh *nh, __be32 daddr, __be32 gw,
|
||||
u32 pmtu, unsigned long expires)
|
||||
u32 pmtu, bool lock, unsigned long expires)
|
||||
{
|
||||
struct fnhe_hash_bucket *hash;
|
||||
struct fib_nh_exception *fnhe;
|
||||
@@ -682,8 +683,10 @@ static void update_or_create_fnhe(struct fib_nh *nh, __be32 daddr, __be32 gw,
|
||||
fnhe->fnhe_genid = genid;
|
||||
if (gw)
|
||||
fnhe->fnhe_gw = gw;
|
||||
if (pmtu)
|
||||
if (pmtu) {
|
||||
fnhe->fnhe_pmtu = pmtu;
|
||||
fnhe->fnhe_mtu_locked = lock;
|
||||
}
|
||||
fnhe->fnhe_expires = max(1UL, expires);
|
||||
/* Update all cached dsts too */
|
||||
rt = rcu_dereference(fnhe->fnhe_rth_input);
|
||||
@@ -707,6 +710,7 @@ static void update_or_create_fnhe(struct fib_nh *nh, __be32 daddr, __be32 gw,
|
||||
fnhe->fnhe_daddr = daddr;
|
||||
fnhe->fnhe_gw = gw;
|
||||
fnhe->fnhe_pmtu = pmtu;
|
||||
fnhe->fnhe_mtu_locked = lock;
|
||||
fnhe->fnhe_expires = expires;
|
||||
|
||||
/* Exception created; mark the cached routes for the nexthop
|
||||
@@ -788,7 +792,8 @@ static void __ip_do_redirect(struct rtable *rt, struct sk_buff *skb, struct flow
|
||||
struct fib_nh *nh = &FIB_RES_NH(res);
|
||||
|
||||
update_or_create_fnhe(nh, fl4->daddr, new_gw,
|
||||
0, jiffies + ip_rt_gc_timeout);
|
||||
0, false,
|
||||
jiffies + ip_rt_gc_timeout);
|
||||
}
|
||||
if (kill_route)
|
||||
rt->dst.obsolete = DST_OBSOLETE_KILL;
|
||||
@@ -1010,15 +1015,18 @@ static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu)
|
||||
{
|
||||
struct dst_entry *dst = &rt->dst;
|
||||
struct fib_result res;
|
||||
bool lock = false;
|
||||
|
||||
if (dst_metric_locked(dst, RTAX_MTU))
|
||||
if (ip_mtu_locked(dst))
|
||||
return;
|
||||
|
||||
if (ipv4_mtu(dst) < mtu)
|
||||
return;
|
||||
|
||||
if (mtu < ip_rt_min_pmtu)
|
||||
if (mtu < ip_rt_min_pmtu) {
|
||||
lock = true;
|
||||
mtu = ip_rt_min_pmtu;
|
||||
}
|
||||
|
||||
if (rt->rt_pmtu == mtu &&
|
||||
time_before(jiffies, dst->expires - ip_rt_mtu_expires / 2))
|
||||
@@ -1028,7 +1036,7 @@ static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu)
|
||||
if (fib_lookup(dev_net(dst->dev), fl4, &res, 0) == 0) {
|
||||
struct fib_nh *nh = &FIB_RES_NH(res);
|
||||
|
||||
update_or_create_fnhe(nh, fl4->daddr, 0, mtu,
|
||||
update_or_create_fnhe(nh, fl4->daddr, 0, mtu, lock,
|
||||
jiffies + ip_rt_mtu_expires);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
@@ -1281,7 +1289,7 @@ static unsigned int ipv4_mtu(const struct dst_entry *dst)
|
||||
|
||||
mtu = READ_ONCE(dst->dev->mtu);
|
||||
|
||||
if (unlikely(dst_metric_locked(dst, RTAX_MTU))) {
|
||||
if (unlikely(ip_mtu_locked(dst))) {
|
||||
if (rt->rt_uses_gateway && mtu > 576)
|
||||
mtu = 576;
|
||||
}
|
||||
@@ -1394,7 +1402,7 @@ struct uncached_list {
|
||||
|
||||
static DEFINE_PER_CPU_ALIGNED(struct uncached_list, rt_uncached_list);
|
||||
|
||||
static void rt_add_uncached_list(struct rtable *rt)
|
||||
void rt_add_uncached_list(struct rtable *rt)
|
||||
{
|
||||
struct uncached_list *ul = raw_cpu_ptr(&rt_uncached_list);
|
||||
|
||||
@@ -1405,14 +1413,8 @@ static void rt_add_uncached_list(struct rtable *rt)
|
||||
spin_unlock_bh(&ul->lock);
|
||||
}
|
||||
|
||||
static void ipv4_dst_destroy(struct dst_entry *dst)
|
||||
void rt_del_uncached_list(struct rtable *rt)
|
||||
{
|
||||
struct dst_metrics *p = (struct dst_metrics *)DST_METRICS_PTR(dst);
|
||||
struct rtable *rt = (struct rtable *) dst;
|
||||
|
||||
if (p != &dst_default_metrics && refcount_dec_and_test(&p->refcnt))
|
||||
kfree(p);
|
||||
|
||||
if (!list_empty(&rt->rt_uncached)) {
|
||||
struct uncached_list *ul = rt->rt_uncached_list;
|
||||
|
||||
@@ -1422,6 +1424,17 @@ static void ipv4_dst_destroy(struct dst_entry *dst)
|
||||
}
|
||||
}
|
||||
|
||||
static void ipv4_dst_destroy(struct dst_entry *dst)
|
||||
{
|
||||
struct dst_metrics *p = (struct dst_metrics *)DST_METRICS_PTR(dst);
|
||||
struct rtable *rt = (struct rtable *)dst;
|
||||
|
||||
if (p != &dst_default_metrics && refcount_dec_and_test(&p->refcnt))
|
||||
kfree(p);
|
||||
|
||||
rt_del_uncached_list(rt);
|
||||
}
|
||||
|
||||
void rt_flush_dev(struct net_device *dev)
|
||||
{
|
||||
struct net *net = dev_net(dev);
|
||||
@@ -1517,6 +1530,7 @@ struct rtable *rt_dst_alloc(struct net_device *dev,
|
||||
rt->rt_is_input = 0;
|
||||
rt->rt_iif = 0;
|
||||
rt->rt_pmtu = 0;
|
||||
rt->rt_mtu_locked = 0;
|
||||
rt->rt_gateway = 0;
|
||||
rt->rt_uses_gateway = 0;
|
||||
INIT_LIST_HEAD(&rt->rt_uncached);
|
||||
@@ -2533,6 +2547,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or
|
||||
rt->rt_is_input = ort->rt_is_input;
|
||||
rt->rt_iif = ort->rt_iif;
|
||||
rt->rt_pmtu = ort->rt_pmtu;
|
||||
rt->rt_mtu_locked = ort->rt_mtu_locked;
|
||||
|
||||
rt->rt_genid = rt_genid_ipv4(net);
|
||||
rt->rt_flags = ort->rt_flags;
|
||||
@@ -2635,6 +2650,8 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src, u32 table_id,
|
||||
memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics));
|
||||
if (rt->rt_pmtu && expires)
|
||||
metrics[RTAX_MTU - 1] = rt->rt_pmtu;
|
||||
if (rt->rt_mtu_locked && expires)
|
||||
metrics[RTAX_LOCK - 1] |= BIT(RTAX_MTU);
|
||||
if (rtnetlink_put_metrics(skb, metrics) < 0)
|
||||
goto nla_put_failure;
|
||||
|
||||
|
Reference in New Issue
Block a user