Lines Matching defs:dr
1772 struct dupreq *dr = NULL;
1794 if ((dr = __svc_dupcache_victim(dc, timenow)) == NULL)
1797 if ((rc = __svc_dupcache_enter(req, dr, dc, drxid, drhash, timenow))
1818 struct dupreq *dr = NULL;
1821 dr = dc->dc_hashtbl[drhash];
1822 while (dr != NULL) {
1823 if (dr->dr_xid == drxid &&
1824 dr->dr_proc == req->rq_proc &&
1825 dr->dr_prog == req->rq_prog &&
1826 dr->dr_vers == req->rq_vers &&
1827 dr->dr_addr.len == req->rq_xprt->xp_rtaddr.len &&
1828 memcmp(dr->dr_addr.buf, req->rq_xprt->xp_rtaddr.buf,
1829 dr->dr_addr.len) == 0) { /* entry found */
1830 if (dr->dr_hash != drhash) {
1846 if (((dr->dr_status == DUP_DONE) ||
1847 (dr->dr_status == DUP_DROP)) &&
1849 dr->dr_resp.buf != NULL) {
1850 *resp_buf = malloc(dr->dr_resp.len);
1857 (void) memset(*resp_buf, 0, dr->dr_resp.len);
1858 (void) memcpy(*resp_buf, dr->dr_resp.buf,
1859 dr->dr_resp.len);
1860 *resp_bufsz = dr->dr_resp.len;
1869 return (dr->dr_status);
1871 dr = dr->dr_chain;
1884 struct dupreq *dr = NULL;
1897 while ((dc->dc_mru) && (dr = dc->dc_mru->dr_next) &&
1898 ((timenow - dr->dr_time) > dc->dc_time)) {
1900 if (dr->dr_status != DUP_DONE &&
1901 dr->dr_status != DUP_DROP) {
1922 if (dr->dr_resp.buf) {
1923 free(dr->dr_resp.buf);
1924 dr->dr_resp.buf = NULL;
1926 if (dr->dr_addr.buf) {
1927 free(dr->dr_addr.buf);
1928 dr->dr_addr.buf = NULL;
1932 if (dr->dr_chain)
1933 dr->dr_chain->dr_prevchain = dr->dr_prevchain;
1934 if (dr->dr_prevchain)
1935 dr->dr_prevchain->dr_chain = dr->dr_chain;
1936 if (dc->dc_hashtbl[dr->dr_hash] == dr)
1937 dc->dc_hashtbl[dr->dr_hash] = dr->dr_chain;
1940 if (dc->dc_mru == dr) {
1943 dc->dc_mru->dr_next = dr->dr_next;
1944 dr->dr_next->dr_prev = dc->dc_mru;
1946 free(dr);
1947 dr = NULL;
1954 if ((dr = malloc(sizeof (*dr))) == NULL) {
1959 (void) memset(dr, 0, sizeof (*dr));
1960 return (dr);
1969 * __svc_dupcache_enter(struct svc_req *req, struct dupreq *dr,
1974 __svc_dupcache_enter(struct svc_req *req, struct dupreq *dr,
1977 dr->dr_xid = drxid;
1978 dr->dr_prog = req->rq_prog;
1979 dr->dr_vers = req->rq_vers;
1980 dr->dr_proc = req->rq_proc;
1981 dr->dr_addr.maxlen = req->rq_xprt->xp_rtaddr.len;
1982 dr->dr_addr.len = dr->dr_addr.maxlen;
1983 if ((dr->dr_addr.buf = malloc(dr->dr_addr.maxlen)) == NULL) {
1985 free(dr);
1988 (void) memset(dr->dr_addr.buf, 0, dr->dr_addr.len);
1989 (void) memcpy(dr->dr_addr.buf, req->rq_xprt->xp_rtaddr.buf,
1990 dr->dr_addr.len);
1991 dr->dr_resp.buf = NULL;
1992 dr->dr_resp.maxlen = 0;
1993 dr->dr_resp.len = 0;
1994 dr->dr_status = DUP_INPROGRESS;
1995 dr->dr_time = timenow;
1996 dr->dr_hash = drhash; /* needed for efficient victim cleanup */
2000 dr->dr_chain = dc->dc_hashtbl[drhash];
2001 dr->dr_prevchain = NULL;
2003 dc->dc_hashtbl[drhash]->dr_prevchain = dr;
2004 dc->dc_hashtbl[drhash] = dr;
2066 struct dupreq *dr = NULL;
2070 dr = dc->dc_hashtbl[drhash];
2071 while (dr != NULL) {
2072 if (dr->dr_xid == drxid &&
2073 dr->dr_proc == req->rq_proc &&
2074 dr->dr_prog == req->rq_prog &&
2075 dr->dr_vers == req->rq_vers &&
2076 dr->dr_addr.len == req->rq_xprt->xp_rtaddr.len &&
2077 memcmp(dr->dr_addr.buf, req->rq_xprt->xp_rtaddr.buf,
2078 dr->dr_addr.len) == 0) { /* entry found */
2079 if (dr->dr_hash != drhash) {
2089 if ((dr->dr_resp.buf =
2096 (void) memset(dr->dr_resp.buf, 0, resp_bufsz);
2097 (void) memcpy(dr->dr_resp.buf, resp_buf,
2099 dr->dr_resp.len = resp_bufsz;
2103 dr->dr_status = status;
2104 dr->dr_time = timenow;
2108 dr->dr_next = dr;
2109 dr->dr_prev = dr;
2111 dr->dr_next = dc->dc_mru->dr_next;
2112 dc->dc_mru->dr_next->dr_prev = dr;
2113 dr->dr_prev = dc->dc_mru;
2114 dc->dc_mru->dr_next = dr;
2116 dc->dc_mru = dr;
2121 dr = dr->dr_chain;
2139 struct dupreq *dr = NULL;
2146 dr = dc->dc_hashtbl[i];
2147 while (dr != NULL) {
2153 dr->dr_xid, dr->dr_status, dr->dr_time);
2154 fprintf(stderr, " dr: %x chain: %x prevchain: %x\n",
2155 dr, dr->dr_chain, dr->dr_prevchain);
2156 dr = dr->dr_chain;
2162 dr = dc->dc_mru->dr_next; /* lru */
2163 while (dr != dc->dc_mru) {
2165 dr->dr_xid, dr->dr_status, dr->dr_time);
2166 fprintf(stderr, " dr: %x next: %x prev: %x\n",
2167 dr, dr->dr_next, dr->dr_prev);
2168 dr = dr->dr_next;
2171 dr->dr_xid, dr->dr_status, dr->dr_time);
2172 fprintf(stderr, " dr: %x next: %x prev: %x\n",
2173 dr, dr->dr_next, dr->dr_prev);