Lines Matching refs:dr

1156 #define	DRHASH(dr)	XIDHASH((dr)->dr_xid)  argument
1183 struct dupreq *dr; in svc_rdma_kdup() local
1194 dr = rdmadrhashtbl[XIDHASH(xid)]; in svc_rdma_kdup()
1195 while (dr != NULL) { in svc_rdma_kdup()
1196 if (dr->dr_xid == xid && in svc_rdma_kdup()
1197 dr->dr_proc == req->rq_proc && in svc_rdma_kdup()
1198 dr->dr_prog == req->rq_prog && in svc_rdma_kdup()
1199 dr->dr_vers == req->rq_vers && in svc_rdma_kdup()
1200 dr->dr_addr.len == req->rq_xprt->xp_rtaddr.len && in svc_rdma_kdup()
1201 bcmp((caddr_t)dr->dr_addr.buf, in svc_rdma_kdup()
1203 dr->dr_addr.len) == 0) { in svc_rdma_kdup()
1204 status = dr->dr_status; in svc_rdma_kdup()
1206 bcopy(dr->dr_resp.buf, res, size); in svc_rdma_kdup()
1208 *dupcachedp = (dr->dr_resfree != NULL); in svc_rdma_kdup()
1210 dr->dr_status = DUP_INPROGRESS; in svc_rdma_kdup()
1211 *drpp = dr; in svc_rdma_kdup()
1217 dr = dr->dr_chain; in svc_rdma_kdup()
1225 dr = kmem_alloc(sizeof (*dr), KM_NOSLEEP); in svc_rdma_kdup()
1226 if (dr == NULL) { in svc_rdma_kdup()
1230 dr->dr_resp.buf = NULL; in svc_rdma_kdup()
1231 dr->dr_resp.maxlen = 0; in svc_rdma_kdup()
1232 dr->dr_addr.buf = NULL; in svc_rdma_kdup()
1233 dr->dr_addr.maxlen = 0; in svc_rdma_kdup()
1235 dr->dr_next = rdmadrmru->dr_next; in svc_rdma_kdup()
1236 rdmadrmru->dr_next = dr; in svc_rdma_kdup()
1238 dr->dr_next = dr; in svc_rdma_kdup()
1242 dr = rdmadrmru->dr_next; in svc_rdma_kdup()
1243 while (dr->dr_status == DUP_INPROGRESS) { in svc_rdma_kdup()
1244 dr = dr->dr_next; in svc_rdma_kdup()
1245 if (dr == rdmadrmru->dr_next) { in svc_rdma_kdup()
1250 unhash(dr); in svc_rdma_kdup()
1251 if (dr->dr_resfree) { in svc_rdma_kdup()
1252 (*dr->dr_resfree)(dr->dr_resp.buf); in svc_rdma_kdup()
1255 dr->dr_resfree = NULL; in svc_rdma_kdup()
1256 rdmadrmru = dr; in svc_rdma_kdup()
1258 dr->dr_xid = REQTOXID(req); in svc_rdma_kdup()
1259 dr->dr_prog = req->rq_prog; in svc_rdma_kdup()
1260 dr->dr_vers = req->rq_vers; in svc_rdma_kdup()
1261 dr->dr_proc = req->rq_proc; in svc_rdma_kdup()
1262 if (dr->dr_addr.maxlen < req->rq_xprt->xp_rtaddr.len) { in svc_rdma_kdup()
1263 if (dr->dr_addr.buf != NULL) in svc_rdma_kdup()
1264 kmem_free(dr->dr_addr.buf, dr->dr_addr.maxlen); in svc_rdma_kdup()
1265 dr->dr_addr.maxlen = req->rq_xprt->xp_rtaddr.len; in svc_rdma_kdup()
1266 dr->dr_addr.buf = kmem_alloc(dr->dr_addr.maxlen, KM_NOSLEEP); in svc_rdma_kdup()
1267 if (dr->dr_addr.buf == NULL) { in svc_rdma_kdup()
1268 dr->dr_addr.maxlen = 0; in svc_rdma_kdup()
1269 dr->dr_status = DUP_DROP; in svc_rdma_kdup()
1274 dr->dr_addr.len = req->rq_xprt->xp_rtaddr.len; in svc_rdma_kdup()
1275 bcopy(req->rq_xprt->xp_rtaddr.buf, dr->dr_addr.buf, dr->dr_addr.len); in svc_rdma_kdup()
1276 if (dr->dr_resp.maxlen < size) { in svc_rdma_kdup()
1277 if (dr->dr_resp.buf != NULL) in svc_rdma_kdup()
1278 kmem_free(dr->dr_resp.buf, dr->dr_resp.maxlen); in svc_rdma_kdup()
1279 dr->dr_resp.maxlen = (unsigned int)size; in svc_rdma_kdup()
1280 dr->dr_resp.buf = kmem_alloc(size, KM_NOSLEEP); in svc_rdma_kdup()
1281 if (dr->dr_resp.buf == NULL) { in svc_rdma_kdup()
1282 dr->dr_resp.maxlen = 0; in svc_rdma_kdup()
1283 dr->dr_status = DUP_DROP; in svc_rdma_kdup()
1288 dr->dr_status = DUP_INPROGRESS; in svc_rdma_kdup()
1290 drhash = (uint32_t)DRHASH(dr); in svc_rdma_kdup()
1291 dr->dr_chain = rdmadrhashtbl[drhash]; in svc_rdma_kdup()
1292 rdmadrhashtbl[drhash] = dr; in svc_rdma_kdup()
1295 *drpp = dr; in svc_rdma_kdup()
1304 svc_rdma_kdupdone(struct dupreq *dr, caddr_t res, void (*dis_resfree)(), in svc_rdma_kdupdone() argument
1307 ASSERT(dr->dr_resfree == NULL); in svc_rdma_kdupdone()
1309 bcopy(res, dr->dr_resp.buf, size); in svc_rdma_kdupdone()
1310 dr->dr_resfree = dis_resfree; in svc_rdma_kdupdone()
1312 dr->dr_status = status; in svc_rdma_kdupdone()
1319 unhash(struct dupreq *dr) in unhash() argument
1327 drhash = (uint32_t)DRHASH(dr); in unhash()
1330 if (drt == dr) { in unhash()