Commit a8e10078 authored by J. Bruce Fields's avatar J. Bruce Fields

svcrpc: clean up control flow

Mainly, use the kernel standard

	err = -ERROR;
	if (something_bad)
		goto out;
	normal case;

rather than

	if (something_bad)
		err = -ERROR
	else {
		normal case;
	}
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 72c35376
...@@ -1451,44 +1451,42 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return, ...@@ -1451,44 +1451,42 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return,
int err = 0; int err = 0;
struct socket *so = sockfd_lookup(fd, &err); struct socket *so = sockfd_lookup(fd, &err);
struct svc_sock *svsk = NULL; struct svc_sock *svsk = NULL;
struct sockaddr_storage addr;
struct sockaddr *sin = (struct sockaddr *)&addr;
int salen;
if (!so) if (!so)
return err; return err;
err = -EAFNOSUPPORT;
if ((so->sk->sk_family != PF_INET) && (so->sk->sk_family != PF_INET6)) if ((so->sk->sk_family != PF_INET) && (so->sk->sk_family != PF_INET6))
err = -EAFNOSUPPORT; goto out;
else if (so->sk->sk_protocol != IPPROTO_TCP && err = -EPROTONOSUPPORT;
if (so->sk->sk_protocol != IPPROTO_TCP &&
so->sk->sk_protocol != IPPROTO_UDP) so->sk->sk_protocol != IPPROTO_UDP)
err = -EPROTONOSUPPORT; goto out;
else if (so->state > SS_UNCONNECTED) err = -EISCONN;
err = -EISCONN; if (so->state > SS_UNCONNECTED)
else { goto out;
if (!try_module_get(THIS_MODULE)) err = -ENOENT;
err = -ENOENT; if (!try_module_get(THIS_MODULE))
else { goto out;
svsk = svc_setup_socket(serv, so, SVC_SOCK_DEFAULTS); svsk = svc_setup_socket(serv, so, SVC_SOCK_DEFAULTS);
if (IS_ERR(svsk)) if (IS_ERR(svsk)) {
err = PTR_ERR(svsk); module_put(THIS_MODULE);
} err = PTR_ERR(svsk);
if (err == 0) { goto out;
struct sockaddr_storage addr;
struct sockaddr *sin = (struct sockaddr *)&addr;
int salen;
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);
err = 0;
} else
module_put(THIS_MODULE);
}
if (err) {
sockfd_put(so);
return err;
} }
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);
return svc_one_sock_name(svsk, name_return, len); return svc_one_sock_name(svsk, name_return, len);
out:
sockfd_put(so);
return err;
} }
EXPORT_SYMBOL_GPL(svc_addsock); EXPORT_SYMBOL_GPL(svc_addsock);
...@@ -1567,11 +1565,12 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv, ...@@ -1567,11 +1565,12 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
} }
svsk = svc_setup_socket(serv, sock, flags); svsk = svc_setup_socket(serv, sock, flags);
if (!IS_ERR(svsk)) { if (IS_ERR(svsk)) {
svc_xprt_set_local(&svsk->sk_xprt, newsin, newlen); error = PTR_ERR(svsk);
return (struct svc_xprt *)svsk; goto bummer;
} }
error = PTR_ERR(svsk); svc_xprt_set_local(&svsk->sk_xprt, newsin, newlen);
return (struct svc_xprt *)svsk;
bummer: bummer:
dprintk("svc: svc_create_socket error = %d\n", -error); dprintk("svc: svc_create_socket error = %d\n", -error);
sock_release(sock); sock_release(sock);
......
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