OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [net/] [sunrpc/] [timer.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#include <linux/version.h>
2
#include <linux/types.h>
3
#include <linux/unistd.h>
4
 
5
#include <linux/sunrpc/clnt.h>
6
#include <linux/sunrpc/xprt.h>
7
#include <linux/sunrpc/timer.h>
8
 
9
#define RPC_RTO_MAX (60*HZ)
10
#define RPC_RTO_INIT (HZ/5)
11
#define RPC_RTO_MIN (HZ/10)
12
 
13
void
14
rpc_init_rtt(struct rpc_rtt *rt, long timeo)
15
{
16
        long t = (timeo - RPC_RTO_INIT) << 3;
17
        int i;
18
        rt->timeo = timeo;
19
        if (t < 0)
20
                t = 0;
21
        for (i = 0; i < 5; i++) {
22
                rt->srtt[i] = t;
23
                rt->sdrtt[i] = RPC_RTO_INIT;
24
        }
25
        memset(rt->ntimeouts, 0, sizeof(rt->ntimeouts));
26
}
27
 
28
void
29
rpc_update_rtt(struct rpc_rtt *rt, int timer, long m)
30
{
31
        long *srtt, *sdrtt;
32
 
33
        if (timer-- == 0)
34
                return;
35
 
36
        if (m == 0)
37
                m = 1;
38
        srtt = &rt->srtt[timer];
39
        m -= *srtt >> 3;
40
        *srtt += m;
41
        if (m < 0)
42
                m = -m;
43
        sdrtt = &rt->sdrtt[timer];
44
        m -= *sdrtt >> 2;
45
        *sdrtt += m;
46
        /* Set lower bound on the variance */
47
        if (*sdrtt < RPC_RTO_MIN)
48
                *sdrtt = RPC_RTO_MIN;
49
}
50
 
51
/*
52
 * Estimate rto for an nfs rpc sent via. an unreliable datagram.
53
 * Use the mean and mean deviation of rtt for the appropriate type of rpc
54
 * for the frequent rpcs and a default for the others.
55
 * The justification for doing "other" this way is that these rpcs
56
 * happen so infrequently that timer est. would probably be stale.
57
 * Also, since many of these rpcs are
58
 * non-idempotent, a conservative timeout is desired.
59
 * getattr, lookup,
60
 * read, write, commit     - A+4D
61
 * other                   - timeo
62
 */
63
 
64
long
65
rpc_calc_rto(struct rpc_rtt *rt, int timer)
66
{
67
        long res;
68
        if (timer-- == 0)
69
                return rt->timeo;
70
        res = (rt->srtt[timer] >> 3) + rt->sdrtt[timer];
71
        if (res > RPC_RTO_MAX)
72
                res = RPC_RTO_MAX;
73
        return res;
74
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.