svcrpc: share some setup of listening sockets
There's some duplicate code here. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
c334196694
commit
39b5530137
3 changed files with 12 additions and 11 deletions
|
@ -124,6 +124,7 @@ struct svc_xprt *svc_find_xprt(struct svc_serv *serv, const char *xcl_name,
|
|||
struct net *net, const sa_family_t af,
|
||||
const unsigned short port);
|
||||
int svc_xprt_names(struct svc_serv *serv, char *buf, const int buflen);
|
||||
void svc_add_new_perm_xprt(struct svc_serv *serv, struct svc_xprt *xprt);
|
||||
|
||||
static inline void svc_xprt_get(struct svc_xprt *xprt)
|
||||
{
|
||||
|
|
|
@ -208,6 +208,15 @@ static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
|
|||
return xcl->xcl_ops->xpo_create(serv, net, sap, len, flags);
|
||||
}
|
||||
|
||||
void svc_add_new_perm_xprt(struct svc_serv *serv, struct svc_xprt *new)
|
||||
{
|
||||
clear_bit(XPT_TEMP, &new->xpt_flags);
|
||||
spin_lock_bh(&serv->sv_lock);
|
||||
list_add(&new->xpt_list, &serv->sv_permsocks);
|
||||
spin_unlock_bh(&serv->sv_lock);
|
||||
svc_xprt_received(new);
|
||||
}
|
||||
|
||||
int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
|
||||
struct net *net, const int family,
|
||||
const unsigned short port, int flags)
|
||||
|
@ -232,13 +241,8 @@ int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
|
|||
module_put(xcl->xcl_owner);
|
||||
return PTR_ERR(newxprt);
|
||||
}
|
||||
|
||||
clear_bit(XPT_TEMP, &newxprt->xpt_flags);
|
||||
spin_lock_bh(&serv->sv_lock);
|
||||
list_add(&newxprt->xpt_list, &serv->sv_permsocks);
|
||||
spin_unlock_bh(&serv->sv_lock);
|
||||
svc_add_new_perm_xprt(serv, newxprt);
|
||||
newport = svc_xprt_local_port(newxprt);
|
||||
svc_xprt_received(newxprt);
|
||||
return newport;
|
||||
}
|
||||
err:
|
||||
|
|
|
@ -1478,11 +1478,7 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return,
|
|||
}
|
||||
if (kernel_getsockname(svsk->sk_sock, sin, &salen) == 0)
|
||||
svc_xprt_set_local(&svsk->sk_xprt, sin, salen);
|
||||
clear_bit(XPT_TEMP, &svsk->sk_xprt.xpt_flags);
|
||||
spin_lock_bh(&serv->sv_lock);
|
||||
list_add(&svsk->sk_xprt.xpt_list, &serv->sv_permsocks);
|
||||
spin_unlock_bh(&serv->sv_lock);
|
||||
svc_xprt_received(&svsk->sk_xprt);
|
||||
svc_add_new_perm_xprt(serv, &svsk->sk_xprt);
|
||||
return svc_one_sock_name(svsk, name_return, len);
|
||||
out:
|
||||
sockfd_put(so);
|
||||
|
|
Loading…
Reference in a new issue