------- Original Message ------- Sender : Jongman Heo <jongman....@samsung.com> Date : 2013-11-29 11:08 (GMT+09:00) Title : Re: [PATCH v2] inet: fix possible seqlock deadlocks > > >------ Original Message ------- >Sender : Eric Dumazet >Date : 2013-11-29 02:51 (GMT+09:00) >Title : [PATCH v2] inet: fix possible seqlock deadlocks >> >> From: Eric Dumazet >> >> In commit c9e9042994d3 ("ipv4: fix possible seqlock deadlock") I left >> another places where IP_INC_STATS_BH() were improperly used. >> >> udp_sendmsg(), ping_v4_sendmsg() and tcp_v4_connect() are called from >> process context, not from softirq context. >> >> This was detected by lockdep seqlock support. >> >> Reported-by: jongman heo >> Fixes: 584bdf8cbdf6 ("[IPV4]: Fix "ipOutNoRoutes" counter error for TCP and >> UDP") >> Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind") >> Signed-off-by: Eric Dumazet >> Cc: Hannes Frederic Sowa >> --- >> net/ipv4/ping.c | 2 +- >> net/ipv4/tcp_ipv4.c | 2 +- >> net/ipv4/udp.c | 2 +- >> 3 files changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c >> index 840cf1b9e6ee..242e7f4ed6f4 100644 >> --- a/net/ipv4/ping.c >> +++ b/net/ipv4/ping.c >> @@ -772,7 +772,7 @@ int ping_v4_sendmsg(struct kiocb *iocb, struct sock *sk, >> struct msghdr *msg, >> err = PTR_ERR(rt); >> rt = NULL; >> if (err == -ENETUNREACH) >> - IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES); >> + IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES); >> goto out; >> } >> >> diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c >> index 59a6f8b90cd9..067213924751 100644 >> --- a/net/ipv4/tcp_ipv4.c >> +++ b/net/ipv4/tcp_ipv4.c >> @@ -177,7 +177,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr >> *uaddr, int addr_len) >> if (IS_ERR(rt)) { >> err = PTR_ERR(rt); >> if (err == -ENETUNREACH) >> - IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES); >> + IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES); >> return err; >> } >> >> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c >> index 44dfaa09b584..44e3884f9e4c 100644 >> --- a/net/ipv4/udp.c >> +++ b/net/ipv4/udp.c >> @@ -999,7 +999,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, >> struct msghdr *msg, >> err = PTR_ERR(rt); >> rt = NULL; >> if (err == -ENETUNREACH) >> - IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES); >> + IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES); >> goto out; >> } >> > >Hi, Eric, > >I've applied your patch, and will let you know the result, after a full day or >half day test. >Usually the issue happens within 10 minutes after boot, but to be sure... > >Regards, >Jongman Heo. >
Hi, Eric, It has survived about 9 hours, looks fine. Thanks~. Tested-by: Jongman Heo <jongman....@samsung.com>