Thanks Hal, this patch fixed the problem (oops in ib_at.c) Itamar
> -----Original Message----- > From: Hal Rosenstock [mailto:[EMAIL PROTECTED] > Sent: Monday, May 30, 2005 8:37 PM > To: James Lentini > Cc: [email protected] > Subject: [openib-general] [PATCH] [ib_at]: Update async > structure prior > to returning requests to appropriate cache > > > [ib_at]: Update async structure prior to returning requests to > appropriate cache. This change affacts req_free, free_route_req, and > free_path_req. > > Also, some other minor changes to eliminate unneeded > parameter passed to > path_req_output and changes to some DEBUG messages. > > Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]> > > Index: at.c > =================================================================== > --- at.c (revision 2507) > +++ at.c (working copy) > @@ -155,7 +155,8 @@ > > static void free_route_req(void *async); > static void free_path_req(void *async); > -static void path_req_complete(int stat, struct > ib_sa_path_rec *ret, void *ctx); > +static void path_req_complete(int status, struct > ib_sa_path_rec *resp, > + void *context); > static int resolve_path(struct path_req *req); > > static int resolve_ip(struct ib_at_src *src, u32 dst_ip, u32 src_ip, > @@ -274,7 +275,6 @@ > } > > memset(dgid, 0, sizeof *dgid); > - > return 0; > } > > @@ -319,11 +319,10 @@ > break; > default: > WARN("bad async req type %d", pend->type); > + pend->status = IB_AT_STATUS_INVALID; > + pend->type = IBAT_REQ_NONE; > + pend->sa_query = NULL; > } > - > - pend->status = IB_AT_STATUS_INVALID; > - pend->type = IBAT_REQ_NONE; > - pend->sa_query = NULL; > } > > static int req_start(struct async *q, struct async *pend, > @@ -464,6 +463,11 @@ > struct route_req *req = container_of(async, struct > route_req, pend); > > DEBUG("free async %p req %p", async, req); > + > + req->pend.status = IB_AT_STATUS_INVALID; > + req->pend.type = IBAT_REQ_NONE; > + req->pend.sa_query = NULL; > + > kmem_cache_free(route_req_cache, req); > } > > @@ -472,6 +476,11 @@ > struct path_req *req = container_of(async, struct > path_req, pend); > > DEBUG("free async %p req %p", async, req); > + > + req->pend.status = IB_AT_STATUS_INVALID; > + req->pend.type = IBAT_REQ_NONE; > + req->pend.sa_query = NULL; > + > kmem_cache_free(path_req_cache, req); > } > > @@ -537,15 +546,14 @@ > return 1; /* one entry is filled */ > } > > -static int path_req_output(struct path_req *req, struct > ib_sa_path_rec *resp, > - int npath, struct ib_sa_path_rec > *out, int nelem) > +static int path_req_output(struct ib_sa_path_rec *resp, int npath, > + struct ib_sa_path_rec *out, int nelem) > { > int n = min(npath, nelem); > > - DEBUG("parent %p output %d records", req, n); > + DEBUG("fill ib_sa_path_rec %p output %d records", out, n); > > memcpy(out, resp, n * sizeof (struct ib_sa_path_rec)); > - > return n; > } > > @@ -579,7 +587,7 @@ > unsigned long flags; > struct async *pend; > > - DEBUG("req %p", req); > + DEBUG("req %p status %d", req, status); > > if (req->pend.parent) { > WARN("for child req %p???", req); > @@ -598,12 +606,12 @@ > return; > } > > - req->pend.nelem = path_req_output(req, resp, 1, > + req->pend.nelem = path_req_output(resp, 1, > req->pend.data, > req->pend.nelem); > > spin_lock_irqsave(&pending_reqs.lock, flags); > for (pend = req->pend.waiting; pend; pend = pend->waiting) > - pend->nelem = path_req_output(req, resp, 1, > + pend->nelem = path_req_output(resp, 1, > pend->data, pend->nelem); > > req_end(&req->pend, req->pend.nelem, NULL); > @@ -876,7 +884,7 @@ > if (in_cache) { > DEBUG("!in_cache free req %p", preq); > kmem_cache_free(path_req_cache, preq); > - return path_req_output(preq, cached_arr, n, > path_arr, npath); > + return path_req_output(cached_arr, n, path_arr, npath); > } > */ > > @@ -969,7 +977,6 @@ > EXPORT_SYMBOL(ib_at_status); > > > - > /* > * Internal init/cleanup functions: > */ > > > > _______________________________________________ > openib-general mailing list > [email protected] > http://openib.org/mailman/listinfo/openib-general > > To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general _______________________________________________ openib-general mailing list [email protected] http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
