Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

svcrpc: split up svc_handle_xprt

Move initialization of newly accepted socket into a helper.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>

+25 -22
+25 -22
net/sunrpc/svc_xprt.c
··· 679 679 return xprt; 680 680 } 681 681 682 + void svc_add_new_temp_xprt(struct svc_serv *serv, struct svc_xprt *newxpt) 683 + { 684 + spin_lock_bh(&serv->sv_lock); 685 + set_bit(XPT_TEMP, &newxpt->xpt_flags); 686 + list_add(&newxpt->xpt_list, &serv->sv_tempsocks); 687 + serv->sv_tmpcnt++; 688 + if (serv->sv_temptimer.function == NULL) { 689 + /* setup timer to age temp transports */ 690 + setup_timer(&serv->sv_temptimer, svc_age_temp_xprts, 691 + (unsigned long)serv); 692 + mod_timer(&serv->sv_temptimer, 693 + jiffies + svc_conn_age_period * HZ); 694 + } 695 + spin_unlock_bh(&serv->sv_lock); 696 + svc_xprt_received(newxpt); 697 + } 698 + 682 699 static int svc_handle_xprt(struct svc_rqst *rqstp, struct svc_xprt *xprt) 683 700 { 684 701 struct svc_serv *serv = rqstp->rq_server; ··· 709 692 } 710 693 if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) { 711 694 struct svc_xprt *newxpt; 695 + /* 696 + * We know this module_get will succeed because the 697 + * listener holds a reference too 698 + */ 699 + __module_get(xprt->xpt_class->xcl_owner); 700 + svc_check_conn_limits(xprt->xpt_server); 712 701 newxpt = xprt->xpt_ops->xpo_accept(xprt); 713 - if (newxpt) { 714 - /* 715 - * We know this module_get will succeed because the 716 - * listener holds a reference too 717 - */ 718 - __module_get(newxpt->xpt_class->xcl_owner); 719 - svc_check_conn_limits(xprt->xpt_server); 720 - spin_lock_bh(&serv->sv_lock); 721 - set_bit(XPT_TEMP, &newxpt->xpt_flags); 722 - list_add(&newxpt->xpt_list, &serv->sv_tempsocks); 723 - serv->sv_tmpcnt++; 724 - if (serv->sv_temptimer.function == NULL) { 725 - /* setup timer to age temp transports */ 726 - setup_timer(&serv->sv_temptimer, 727 - svc_age_temp_xprts, 728 - (unsigned long)serv); 729 - mod_timer(&serv->sv_temptimer, 730 - jiffies + svc_conn_age_period * HZ); 731 - } 732 - spin_unlock_bh(&serv->sv_lock); 733 - svc_xprt_received(newxpt); 734 - } 702 + if (newxpt) 703 + svc_add_new_temp_xprt(serv, newxpt); 735 704 } else if (xprt->xpt_ops->xpo_has_wspace(xprt)) { 736 705 /* XPT_DATA|XPT_DEFERRED case: */ 737 706 dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n",