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,28 +1451,31 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return, ...@@ -1451,28 +1451,31 @@ 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;
if ((so->sk->sk_family != PF_INET) && (so->sk->sk_family != PF_INET6))
err = -EAFNOSUPPORT; err = -EAFNOSUPPORT;
else if (so->sk->sk_protocol != IPPROTO_TCP && if ((so->sk->sk_family != PF_INET) && (so->sk->sk_family != PF_INET6))
so->sk->sk_protocol != IPPROTO_UDP) goto out;
err = -EPROTONOSUPPORT; err = -EPROTONOSUPPORT;
else if (so->state > SS_UNCONNECTED) if (so->sk->sk_protocol != IPPROTO_TCP &&
so->sk->sk_protocol != IPPROTO_UDP)
goto out;
err = -EISCONN; err = -EISCONN;
else { if (so->state > SS_UNCONNECTED)
if (!try_module_get(THIS_MODULE)) goto out;
err = -ENOENT; err = -ENOENT;
else { if (!try_module_get(THIS_MODULE))
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)) {
module_put(THIS_MODULE);
err = PTR_ERR(svsk); err = PTR_ERR(svsk);
goto out;
} }
if (err == 0) {
struct sockaddr_storage addr;
struct sockaddr *sin = (struct sockaddr *)&addr;
int salen;
if (kernel_getsockname(svsk->sk_sock, sin, &salen) == 0) if (kernel_getsockname(svsk->sk_sock, sin, &salen) == 0)
svc_xprt_set_local(&svsk->sk_xprt, sin, salen); svc_xprt_set_local(&svsk->sk_xprt, sin, salen);
clear_bit(XPT_TEMP, &svsk->sk_xprt.xpt_flags); clear_bit(XPT_TEMP, &svsk->sk_xprt.xpt_flags);
...@@ -1480,15 +1483,10 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return, ...@@ -1480,15 +1483,10 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return,
list_add(&svsk->sk_xprt.xpt_list, &serv->sv_permsocks); list_add(&svsk->sk_xprt.xpt_list, &serv->sv_permsocks);
spin_unlock_bh(&serv->sv_lock); spin_unlock_bh(&serv->sv_lock);
svc_xprt_received(&svsk->sk_xprt); svc_xprt_received(&svsk->sk_xprt);
err = 0; return svc_one_sock_name(svsk, name_return, len);
} else out:
module_put(THIS_MODULE);
}
if (err) {
sockfd_put(so); sockfd_put(so);
return err; return err;
}
return svc_one_sock_name(svsk, name_return, len);
} }
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)) {
error = PTR_ERR(svsk);
goto bummer;
}
svc_xprt_set_local(&svsk->sk_xprt, newsin, newlen); svc_xprt_set_local(&svsk->sk_xprt, newsin, newlen);
return (struct svc_xprt *)svsk; return (struct svc_xprt *)svsk;
}
error = PTR_ERR(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