Lines Matching defs:dr
1154 #define DRHASH(dr) XIDHASH((dr)->dr_xid)
1181 struct dupreq *dr;
1192 dr = rdmadrhashtbl[XIDHASH(xid)];
1193 while (dr != NULL) {
1194 if (dr->dr_xid == xid &&
1195 dr->dr_proc == req->rq_proc &&
1196 dr->dr_prog == req->rq_prog &&
1197 dr->dr_vers == req->rq_vers &&
1198 dr->dr_addr.len == req->rq_xprt->xp_rtaddr.len &&
1199 bcmp((caddr_t)dr->dr_addr.buf,
1201 dr->dr_addr.len) == 0) {
1202 status = dr->dr_status;
1204 bcopy(dr->dr_resp.buf, res, size);
1206 *dupcachedp = (dr->dr_resfree != NULL);
1208 dr->dr_status = DUP_INPROGRESS;
1209 *drpp = dr;
1215 dr = dr->dr_chain;
1223 dr = kmem_alloc(sizeof (*dr), KM_NOSLEEP);
1224 if (dr == NULL) {
1228 dr->dr_resp.buf = NULL;
1229 dr->dr_resp.maxlen = 0;
1230 dr->dr_addr.buf = NULL;
1231 dr->dr_addr.maxlen = 0;
1233 dr->dr_next = rdmadrmru->dr_next;
1234 rdmadrmru->dr_next = dr;
1236 dr->dr_next = dr;
1240 dr = rdmadrmru->dr_next;
1241 while (dr->dr_status == DUP_INPROGRESS) {
1242 dr = dr->dr_next;
1243 if (dr == rdmadrmru->dr_next) {
1248 unhash(dr);
1249 if (dr->dr_resfree) {
1250 (*dr->dr_resfree)(dr->dr_resp.buf);
1253 dr->dr_resfree = NULL;
1254 rdmadrmru = dr;
1256 dr->dr_xid = REQTOXID(req);
1257 dr->dr_prog = req->rq_prog;
1258 dr->dr_vers = req->rq_vers;
1259 dr->dr_proc = req->rq_proc;
1260 if (dr->dr_addr.maxlen < req->rq_xprt->xp_rtaddr.len) {
1261 if (dr->dr_addr.buf != NULL)
1262 kmem_free(dr->dr_addr.buf, dr->dr_addr.maxlen);
1263 dr->dr_addr.maxlen = req->rq_xprt->xp_rtaddr.len;
1264 dr->dr_addr.buf = kmem_alloc(dr->dr_addr.maxlen, KM_NOSLEEP);
1265 if (dr->dr_addr.buf == NULL) {
1266 dr->dr_addr.maxlen = 0;
1267 dr->dr_status = DUP_DROP;
1272 dr->dr_addr.len = req->rq_xprt->xp_rtaddr.len;
1273 bcopy(req->rq_xprt->xp_rtaddr.buf, dr->dr_addr.buf, dr->dr_addr.len);
1274 if (dr->dr_resp.maxlen < size) {
1275 if (dr->dr_resp.buf != NULL)
1276 kmem_free(dr->dr_resp.buf, dr->dr_resp.maxlen);
1277 dr->dr_resp.maxlen = (unsigned int)size;
1278 dr->dr_resp.buf = kmem_alloc(size, KM_NOSLEEP);
1279 if (dr->dr_resp.buf == NULL) {
1280 dr->dr_resp.maxlen = 0;
1281 dr->dr_status = DUP_DROP;
1286 dr->dr_status = DUP_INPROGRESS;
1288 drhash = (uint32_t)DRHASH(dr);
1289 dr->dr_chain = rdmadrhashtbl[drhash];
1290 rdmadrhashtbl[drhash] = dr;
1293 *drpp = dr;
1302 svc_rdma_kdupdone(struct dupreq *dr, caddr_t res, void (*dis_resfree)(),
1305 ASSERT(dr->dr_resfree == NULL);
1307 bcopy(res, dr->dr_resp.buf, size);
1308 dr->dr_resfree = dis_resfree;
1310 dr->dr_status = status;
1317 unhash(struct dupreq *dr)
1325 drhash = (uint32_t)DRHASH(dr);
1328 if (drt == dr) {