* 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