Here's a similar patch for ib_addr.
Signed-off-by: Sean Hefty <[EMAIL PROTECTED]>
---
Index: core/addr.c
===================================================================
--- core/addr.c (revision 6307)
+++ core/addr.c (working copy)
@@ -73,6 +73,7 @@ struct addr_req {
struct sockaddr src_addr;
struct sockaddr dst_addr;
struct rdma_dev_addr *addr;
+ struct module *owner;
void *context;
void (*callback)(int status, struct sockaddr *src_addr,
struct rdma_dev_addr *addr, void *context);
@@ -252,8 +253,10 @@ static void process_req(void *data)
list_for_each_entry_safe(req, temp_req, &done_list, list) {
list_del(&req->list);
+ BUG_ON(!try_module_get(req->owner));
req->callback(req->status, &req->src_addr, req->addr,
req->context);
+ module_put(req->owner);
kfree(req);
}
}
@@ -289,11 +292,12 @@ static int addr_resolve_local(struct soc
return ret;
}
-int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
- struct rdma_dev_addr *addr, int timeout_ms,
- void (*callback)(int status, struct sockaddr *src_addr,
- struct rdma_dev_addr *addr, void *context),
- void *context)
+int __rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
+ struct rdma_dev_addr *addr, int timeout_ms,
+ void (*callback)(int status, struct sockaddr *src_addr,
+ struct rdma_dev_addr *addr,
+ void *context),
+ void *context, struct module *owner)
{
struct sockaddr_in *src_in, *dst_in;
struct addr_req *req;
@@ -310,6 +314,7 @@ int rdma_resolve_ip(struct sockaddr *src
req->addr = addr;
req->callback = callback;
req->context = context;
+ req->owner = owner;
src_in = (struct sockaddr_in *) &req->src_addr;
dst_in = (struct sockaddr_in *) &req->dst_addr;
@@ -335,7 +340,7 @@ int rdma_resolve_ip(struct sockaddr *src
}
return ret;
}
-EXPORT_SYMBOL(rdma_resolve_ip);
+EXPORT_SYMBOL(__rdma_resolve_ip);
void rdma_addr_cancel(struct rdma_dev_addr *addr)
{
Index: include/rdma/ib_addr.h
===================================================================
--- include/rdma/ib_addr.h (revision 6307)
+++ include/rdma/ib_addr.h (working copy)
@@ -64,11 +64,16 @@ int rdma_translate_ip(struct sockaddr *a
* or been canceled. A status of 0 indicates success.
* @context: User-specified context associated with the call.
*/
-int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
- struct rdma_dev_addr *addr, int timeout_ms,
- void (*callback)(int status, struct sockaddr *src_addr,
- struct rdma_dev_addr *addr, void *context),
- void *context);
+static inline int
+rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
+ struct rdma_dev_addr *addr, int timeout_ms,
+ void (*callback)(int status, struct sockaddr *src_addr,
+ struct rdma_dev_addr *addr, void *context),
+ void *context)
+{
+ return __rdma_resolve_ip(src_addr, dst_addr, addr, timeout_ms,
+ callback, context, THIS_MODULE);
+}
void rdma_addr_cancel(struct rdma_dev_addr *addr);
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general