Commit 65b2e665 authored by J. Bruce Fields's avatar J. Bruce Fields

svcrpc: split up svc_handle_xprt

Move initialization of newly accepted socket into a helper.
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 6797fa5a
...@@ -679,6 +679,23 @@ struct svc_xprt *svc_get_next_xprt(struct svc_rqst *rqstp, long timeout) ...@@ -679,6 +679,23 @@ struct svc_xprt *svc_get_next_xprt(struct svc_rqst *rqstp, long timeout)
return xprt; return xprt;
} }
void svc_add_new_temp_xprt(struct svc_serv *serv, struct svc_xprt *newxpt)
{
spin_lock_bh(&serv->sv_lock);
set_bit(XPT_TEMP, &newxpt->xpt_flags);
list_add(&newxpt->xpt_list, &serv->sv_tempsocks);
serv->sv_tmpcnt++;
if (serv->sv_temptimer.function == NULL) {
/* setup timer to age temp transports */
setup_timer(&serv->sv_temptimer, svc_age_temp_xprts,
(unsigned long)serv);
mod_timer(&serv->sv_temptimer,
jiffies + svc_conn_age_period * HZ);
}
spin_unlock_bh(&serv->sv_lock);
svc_xprt_received(newxpt);
}
static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt) static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt)
{ {
struct svc_serv *serv = rqstp->rq_server; struct svc_serv *serv = rqstp->rq_server;
...@@ -692,29 +709,15 @@ static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt) ...@@ -692,29 +709,15 @@ static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt)
} }
if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) { if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) {
struct svc_xprt *newxpt; struct svc_xprt *newxpt;
newxpt = xprt->xpt_ops->xpo_accept(xprt);
if (newxpt) {
/* /*
* We know this module_get will succeed because the * We know this module_get will succeed because the
* listener holds a reference too * listener holds a reference too
*/ */
__module_get(newxpt->xpt_class->xcl_owner); __module_get(xprt->xpt_class->xcl_owner);
svc_check_conn_limits(xprt->xpt_server); svc_check_conn_limits(xprt->xpt_server);
spin_lock_bh(&serv->sv_lock); newxpt = xprt->xpt_ops->xpo_accept(xprt);
set_bit(XPT_TEMP, &newxpt->xpt_flags); if (newxpt)
list_add(&newxpt->xpt_list, &serv->sv_tempsocks); svc_add_new_temp_xprt(serv, newxpt);
serv->sv_tmpcnt++;
if (serv->sv_temptimer.function == NULL) {
/* setup timer to age temp transports */
setup_timer(&serv->sv_temptimer,
svc_age_temp_xprts,
(unsigned long)serv);
mod_timer(&serv->sv_temptimer,
jiffies + svc_conn_age_period * HZ);
}
spin_unlock_bh(&serv->sv_lock);
svc_xprt_received(newxpt);
}
} else if (xprt->xpt_ops->xpo_has_wspace(xprt)) { } else if (xprt->xpt_ops->xpo_has_wspace(xprt)) {
/* XPT_DATA|XPT_DEFERRED case: */ /* XPT_DATA|XPT_DEFERRED case: */
dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n", dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment