* Time conversion error in linux-2.6.11.10/net/sunrpoc/svcsock.c
@ 2005-08-01 21:11 Josip Loncaric
2005-08-01 22:56 ` [PATCH] net/sunrpc: fix time conversion error Nishanth Aravamudan
0 siblings, 1 reply; 4+ messages in thread
From: Josip Loncaric @ 2005-08-01 21:11 UTC (permalink / raw)
To: linux-kernel
Line 589 of linux-2.6.11.10/net/sunrpc/svcsock.c is obviously wrong:
skb->stamp.tv_usec = xtime.tv_nsec * 1000;
To convert nsec to usec, one should divide instead of multiplying:
skb->stamp.tv_usec = xtime.tv_nsec / 1000;
The same bug could be present in the latest kernels, although I haven't
checked. This bug makes svc_udp_recvfrom() timestamps incorrect.
Sincerely,
Josip
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH] net/sunrpc: fix time conversion error 2005-08-01 21:11 Time conversion error in linux-2.6.11.10/net/sunrpoc/svcsock.c Josip Loncaric @ 2005-08-01 22:56 ` Nishanth Aravamudan 2005-08-02 0:03 ` Patrick McHardy 0 siblings, 1 reply; 4+ messages in thread From: Nishanth Aravamudan @ 2005-08-01 22:56 UTC (permalink / raw) To: Josip Loncaric; +Cc: linux-kernel, netdev On 01.08.2005 [15:11:48 -0600], Josip Loncaric wrote: > Line 589 of linux-2.6.11.10/net/sunrpc/svcsock.c is obviously wrong: > > skb->stamp.tv_usec = xtime.tv_nsec * 1000; > > To convert nsec to usec, one should divide instead of multiplying: > > skb->stamp.tv_usec = xtime.tv_nsec / 1000; > > The same bug could be present in the latest kernels, although I haven't > checked. This bug makes svc_udp_recvfrom() timestamps incorrect. Agreed, the conversion is wrong. I think the code is buggy period, as it accesses xtime without grabbing the xtime_lock first. Following patch should fix both issues. Description: This function incorrectly multiplies a nanosecond value by 1000, instead of dividing by 1000, to obtain a corresponding microsecond value. Fix the math. Also, the function incorrectly accesses xtime without using the xtime_lock. Fixed as well. Patch is compile-tested. Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com> --- svcsock.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) --- 2.6.13-rc4/net/sunrpc/svcsock.c 2005-07-29 14:11:50.000000000 -0700 +++ 2.6.13-rc4-dev/net/sunrpc/svcsock.c 2005-08-01 15:51:11.000000000 -0700 @@ -559,6 +559,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) struct svc_serv *serv = svsk->sk_server; struct sk_buff *skb; int err, len; + unsigned long seq; if (test_and_clear_bit(SK_CHNGBUF, &svsk->sk_flags)) /* udp sockets need large rcvbuf as all pending @@ -585,8 +586,11 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) dprintk("svc: recvfrom returned error %d\n", -err); } if (skb->stamp.tv_sec == 0) { - skb->stamp.tv_sec = xtime.tv_sec; - skb->stamp.tv_usec = xtime.tv_nsec * 1000; + do { + seq = read_seqbegin(&xtime_lock); + skb->stamp.tv_sec = xtime.tv_sec; + skb->stamp.tv_usec = xtime.tv_nsec / 1000; + } while (read_seqretry(&xtime_lock, seq)); /* Don't enable netstamp, sunrpc doesn't need that much accuracy */ } ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] net/sunrpc: fix time conversion error 2005-08-01 22:56 ` [PATCH] net/sunrpc: fix time conversion error Nishanth Aravamudan @ 2005-08-02 0:03 ` Patrick McHardy 2005-08-02 0:11 ` Nishanth Aravamudan 0 siblings, 1 reply; 4+ messages in thread From: Patrick McHardy @ 2005-08-02 0:03 UTC (permalink / raw) To: Nishanth Aravamudan; +Cc: Josip Loncaric, linux-kernel, netdev Nishanth Aravamudan wrote: > On 01.08.2005 [15:11:48 -0600], Josip Loncaric wrote: > >>Line 589 of linux-2.6.11.10/net/sunrpc/svcsock.c is obviously wrong: >> >> skb->stamp.tv_usec = xtime.tv_nsec * 1000; >> >>To convert nsec to usec, one should divide instead of multiplying: >> >> skb->stamp.tv_usec = xtime.tv_nsec / 1000; >> >>The same bug could be present in the latest kernels, although I haven't >>checked. This bug makes svc_udp_recvfrom() timestamps incorrect. > > > Agreed, the conversion is wrong. I think the code is buggy period, as it > accesses xtime without grabbing the xtime_lock first. Following patch > should fix both issues. > > Description: This function incorrectly multiplies a nanosecond value by > 1000, instead of dividing by 1000, to obtain a corresponding microsecond > value. Fix the math. Also, the function incorrectly accesses xtime > without using the xtime_lock. Fixed as well. Patch is compile-tested. Depending on in which release you want this patch included, you might want to redo it against Dave's net-2.6.14 tree. It includes a patch that changes skb->stamp to an offset against a base timestamp. Regards Patrick PS: I'll submit the patch to break compilation for unconverted users ASAP. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] net/sunrpc: fix time conversion error 2005-08-02 0:03 ` Patrick McHardy @ 2005-08-02 0:11 ` Nishanth Aravamudan 0 siblings, 0 replies; 4+ messages in thread From: Nishanth Aravamudan @ 2005-08-02 0:11 UTC (permalink / raw) To: Patrick McHardy; +Cc: Josip Loncaric, linux-kernel, netdev On 02.08.2005 [02:03:59 +0200], Patrick McHardy wrote: > Nishanth Aravamudan wrote: > > On 01.08.2005 [15:11:48 -0600], Josip Loncaric wrote: > > > >>Line 589 of linux-2.6.11.10/net/sunrpc/svcsock.c is obviously wrong: > >> > >> skb->stamp.tv_usec = xtime.tv_nsec * 1000; > >> > >>To convert nsec to usec, one should divide instead of multiplying: > >> > >> skb->stamp.tv_usec = xtime.tv_nsec / 1000; > >> > >>The same bug could be present in the latest kernels, although I haven't > >>checked. This bug makes svc_udp_recvfrom() timestamps incorrect. > > > > > > Agreed, the conversion is wrong. I think the code is buggy period, as it > > accesses xtime without grabbing the xtime_lock first. Following patch > > should fix both issues. > > > > Description: This function incorrectly multiplies a nanosecond value by > > 1000, instead of dividing by 1000, to obtain a corresponding microsecond > > value. Fix the math. Also, the function incorrectly accesses xtime > > without using the xtime_lock. Fixed as well. Patch is compile-tested. > > Depending on in which release you want this patch included, you might > want to redo it against Dave's net-2.6.14 tree. It includes a patch that > changes skb->stamp to an offset against a base timestamp. Ok, I'll try and get around to rediff'ing tonight or tomorrow. Thanks for the feedback! <snip> > PS: I'll submit the patch to break compilation for unconverted users > ASAP. Thanks, Nish ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-08-02 0:11 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-08-01 21:11 Time conversion error in linux-2.6.11.10/net/sunrpoc/svcsock.c Josip Loncaric 2005-08-01 22:56 ` [PATCH] net/sunrpc: fix time conversion error Nishanth Aravamudan 2005-08-02 0:03 ` Patrick McHardy 2005-08-02 0:11 ` Nishanth Aravamudan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox