Merge branch 'ipv6-fix-hangup-on-device-removal'
Paolo Abeni says: ==================== ipv6: fix hangup on device removal This addresses the infamous unregister_netdevice splat in net selftests; the actual fix is carried by the first patch, while the 2nd one addresses a related problem in the relevant test that was patially hiding the problem. Targeting net-next as the issue is quite old and I feel a little lost in the fib info/nh jungle. ==================== Link: https://patch.msgid.link/cover.1730828007.git.pabeni@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
3545f9b72f
|
|
@ -374,6 +374,7 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
|
|||
{
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
struct inet6_dev *idev = rt->rt6i_idev;
|
||||
struct fib6_info *from;
|
||||
|
||||
if (idev && idev->dev != blackhole_netdev) {
|
||||
struct inet6_dev *blackhole_idev = in6_dev_get(blackhole_netdev);
|
||||
|
|
@ -383,6 +384,8 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
|
|||
in6_dev_put(idev);
|
||||
}
|
||||
}
|
||||
from = unrcu_pointer(xchg(&rt->from, NULL));
|
||||
fib6_info_release(from);
|
||||
}
|
||||
|
||||
static bool __rt6_check_expired(const struct rt6_info *rt)
|
||||
|
|
@ -1455,7 +1458,6 @@ static DEFINE_SPINLOCK(rt6_exception_lock);
|
|||
static void rt6_remove_exception(struct rt6_exception_bucket *bucket,
|
||||
struct rt6_exception *rt6_ex)
|
||||
{
|
||||
struct fib6_info *from;
|
||||
struct net *net;
|
||||
|
||||
if (!bucket || !rt6_ex)
|
||||
|
|
@ -1467,8 +1469,6 @@ static void rt6_remove_exception(struct rt6_exception_bucket *bucket,
|
|||
/* purge completely the exception to allow releasing the held resources:
|
||||
* some [sk] cache may keep the dst around for unlimited time
|
||||
*/
|
||||
from = unrcu_pointer(xchg(&rt6_ex->rt6i->from, NULL));
|
||||
fib6_info_release(from);
|
||||
dst_dev_put(&rt6_ex->rt6i->dst);
|
||||
|
||||
hlist_del_rcu(&rt6_ex->hlist);
|
||||
|
|
|
|||
|
|
@ -2056,7 +2056,7 @@ check_running() {
|
|||
pid=${1}
|
||||
cmd=${2}
|
||||
|
||||
[ "$(cat /proc/${pid}/cmdline 2>/dev/null | tr -d '\0')" = "{cmd}" ]
|
||||
[ "$(cat /proc/${pid}/cmdline 2>/dev/null | tr -d '\0')" = "${cmd}" ]
|
||||
}
|
||||
|
||||
test_cleanup_vxlanX_exception() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue