aboutsummaryrefslogtreecommitdiff
path: root/net/tipc/discover.c
diff options
context:
space:
mode:
authorAllan Stephens <Allan.Stephens@windriver.com>2011-04-21 16:28:02 -0500
committerPaul Gortmaker <paul.gortmaker@windriver.com>2011-05-10 16:04:00 -0400
commit691a62075922b43b2b03def87ebcfdfbf0cd2ed8 (patch)
tree892bb742c6f6caaedd5ef3e3ac6d8fd96c66483b /net/tipc/discover.c
parent3a777ff8b14456e15991c9fcc225943453dc3a75 (diff)
tipc: Enhance sending of discovery object link request messages
Augments TIPC's discovery object to send its initial neighbor discovery request message as soon as the associated bearer is created, rather than waiting for its first periodic timeout to occur, thereby speeding up the discovery process. Also adds a check to suppress the initial request or subsequent requests if the bearer is blocked at the time the request is scheduled for transmission. Signed-off-by: Allan Stephens <Allan.Stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'net/tipc/discover.c')
-rw-r--r--net/tipc/discover.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index 6acf32a9eef..dba47673124 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -241,6 +241,17 @@ void tipc_disc_update_link_req(struct link_req *req)
}
/**
+ * disc_send_msg - send link setup request message
+ * @req: ptr to link request structure
+ */
+
+static void disc_send_msg(struct link_req *req)
+{
+ if (!req->bearer->blocked)
+ tipc_bearer_send(req->bearer, req->buf, &req->dest);
+}
+
+/**
* disc_timeout - send a periodic link setup request
* @req: ptr to link request structure
*
@@ -251,7 +262,7 @@ static void disc_timeout(struct link_req *req)
{
spin_lock_bh(&req->bearer->lock);
- req->bearer->media->send_msg(req->buf, req->bearer, &req->dest);
+ disc_send_msg(req);
if ((req->timer_intv == TIPC_LINK_REQ_SLOW) ||
(req->timer_intv == TIPC_LINK_REQ_FAST)) {
@@ -300,6 +311,7 @@ int tipc_disc_create(struct tipc_bearer *b_ptr,
k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
k_start_timer(&req->timer, req->timer_intv);
b_ptr->link_req = req;
+ disc_send_msg(req);
return 0;
}