Lines Matching defs:dr

728 #define	DRHASH(dr)	XIDHASH((dr)->dr_xid)
767 struct dupreq *dr;
778 dr = cotsdrhashtbl[XIDHASH(xid)];
779 while (dr != NULL) {
780 if (dr->dr_xid == xid &&
781 dr->dr_proc == req->rq_proc &&
782 dr->dr_prog == req->rq_prog &&
783 dr->dr_vers == req->rq_vers &&
784 dr->dr_addr.len == req->rq_xprt->xp_rtaddr.len &&
785 bcmp((caddr_t)dr->dr_addr.buf,
787 dr->dr_addr.len) == 0) {
788 status = dr->dr_status;
790 bcopy(dr->dr_resp.buf, res, size);
792 *dupcachedp = (dr->dr_resfree != NULL);
796 dr->dr_status = DUP_INPROGRESS;
797 *drpp = dr;
806 dr = dr->dr_chain;
814 dr = kmem_alloc(sizeof (*dr), KM_NOSLEEP);
815 if (dr == NULL) {
819 dr->dr_resp.buf = NULL;
820 dr->dr_resp.maxlen = 0;
821 dr->dr_addr.buf = NULL;
822 dr->dr_addr.maxlen = 0;
824 dr->dr_next = cotsdrmru->dr_next;
825 cotsdrmru->dr_next = dr;
827 dr->dr_next = dr;
831 dr = cotsdrmru->dr_next;
832 while (dr->dr_status == DUP_INPROGRESS) {
833 dr = dr->dr_next;
834 if (dr == cotsdrmru->dr_next) {
840 unhash(dr);
841 if (dr->dr_resfree) {
842 (*dr->dr_resfree)(dr->dr_resp.buf);
845 dr->dr_resfree = NULL;
846 cotsdrmru = dr;
848 dr->dr_xid = REQTOXID(req);
849 dr->dr_prog = req->rq_prog;
850 dr->dr_vers = req->rq_vers;
851 dr->dr_proc = req->rq_proc;
852 if (dr->dr_addr.maxlen < req->rq_xprt->xp_rtaddr.len) {
853 if (dr->dr_addr.buf != NULL)
854 kmem_free(dr->dr_addr.buf, dr->dr_addr.maxlen);
855 dr->dr_addr.maxlen = req->rq_xprt->xp_rtaddr.len;
856 dr->dr_addr.buf = kmem_alloc(dr->dr_addr.maxlen, KM_NOSLEEP);
857 if (dr->dr_addr.buf == NULL) {
858 dr->dr_addr.maxlen = 0;
859 dr->dr_status = DUP_DROP;
864 dr->dr_addr.len = req->rq_xprt->xp_rtaddr.len;
865 bcopy(req->rq_xprt->xp_rtaddr.buf, dr->dr_addr.buf, dr->dr_addr.len);
866 if (dr->dr_resp.maxlen < size) {
867 if (dr->dr_resp.buf != NULL)
868 kmem_free(dr->dr_resp.buf, dr->dr_resp.maxlen);
869 dr->dr_resp.maxlen = (unsigned int)size;
870 dr->dr_resp.buf = kmem_alloc(size, KM_NOSLEEP);
871 if (dr->dr_resp.buf == NULL) {
872 dr->dr_resp.maxlen = 0;
873 dr->dr_status = DUP_DROP;
878 dr->dr_status = DUP_INPROGRESS;
880 drhash = (uint32_t)DRHASH(dr);
881 dr->dr_chain = cotsdrhashtbl[drhash];
882 cotsdrhashtbl[drhash] = dr;
885 *drpp = dr;
899 svc_cots_kdupdone(struct dupreq *dr, caddr_t res, void (*dis_resfree)(),
902 ASSERT(dr->dr_resfree == NULL);
904 bcopy(res, dr->dr_resp.buf, size);
905 dr->dr_resfree = dis_resfree;
907 dr->dr_status = status;
914 unhash(struct dupreq *dr)
922 drhash = (uint32_t)DRHASH(dr);
925 if (drt == dr) {