1180 else if (so->sk->sk_protocol != IPPROTO_TCP &&
1181 so->sk->sk_protocol != IPPROTO_UDP)
1182 err = -EPROTONOSUPPORT;
1183 else if (so->state > SS_UNCONNECTED)
1184 err = -EISCONN;
1185 else {
1186 if (!try_module_get(THIS_MODULE))
1187 err = -ENOENT;
1188 else
1189 svsk = svc_setup_socket(serv, so, &err,
1190 SVC_SOCK_DEFAULTS);
1191 if (svsk) {
1192 struct sockaddr_storage addr;
1193 struct sockaddr *sin = (struct sockaddr *)&addr;
1194 int salen;
1195 if (kernel_getsockname(svsk->sk_sock, sin, &salen) == 0)
1196 svc_xprt_set_local(&svsk->sk_xprt, sin, salen);
1197 clear_bit(XPT_TEMP, &svsk->sk_xprt.xpt_flags);
1198 spin_lock_bh(&serv->sv_lock);
1199 list_add(&svsk->sk_xprt.xpt_list, &serv->sv_permsocks);
1200 spin_unlock_bh(&serv->sv_lock);
1201 svc_xprt_received(&svsk->sk_xprt);
1202 err = 0;
1203 } else
1204 module_put(THIS_MODULE);
1205 }
1206 if (err) {
1207 sockfd_put(so);
1208 return err;
1209 }
1210 return one_sock_name(name_return, svsk);
1211}
1212EXPORT_SYMBOL_GPL(svc_addsock);
1213
1214
1215
1216
1217static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
1218 int protocol,
1219 struct sockaddr *sin, int len,
1220 int flags)