diff options
-rw-r--r-- | net/sunrpc/svc.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 17e0d7265dfd..bd0ee312dac9 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -896,38 +896,31 @@ int svc_register(const struct svc_serv *serv, const int family, | |||
896 | return error; | 896 | return error; |
897 | } | 897 | } |
898 | 898 | ||
899 | #ifdef CONFIG_SUNRPC_REGISTER_V4 | 899 | /* |
900 | 900 | * If user space is running rpcbind, it should take the v4 UNSET | |
901 | * and clear everything for this [program, version]. If user space | ||
902 | * is running portmap, it will reject the v4 UNSET, but won't have | ||
903 | * any "inet6" entries anyway. So a PMAP_UNSET should be sufficient | ||
904 | * in this case to clear all existing entries for [program, version]. | ||
905 | */ | ||
901 | static void __svc_unregister(const u32 program, const u32 version, | 906 | static void __svc_unregister(const u32 program, const u32 version, |
902 | const char *progname) | 907 | const char *progname) |
903 | { | 908 | { |
904 | struct sockaddr_in6 sin6 = { | ||
905 | .sin6_family = AF_INET6, | ||
906 | .sin6_addr = IN6ADDR_ANY_INIT, | ||
907 | .sin6_port = 0, | ||
908 | }; | ||
909 | int error; | 909 | int error; |
910 | 910 | ||
911 | error = rpcb_v4_register(program, version, | 911 | error = rpcb_v4_register(program, version, NULL, ""); |
912 | (struct sockaddr *)&sin6, ""); | ||
913 | dprintk("svc: %s(%sv%u), error %d\n", | ||
914 | __func__, progname, version, error); | ||
915 | } | ||
916 | |||
917 | #else /* CONFIG_SUNRPC_REGISTER_V4 */ | ||
918 | 912 | ||
919 | static void __svc_unregister(const u32 program, const u32 version, | 913 | /* |
920 | const char *progname) | 914 | * User space didn't support rpcbind v4, so retry this |
921 | { | 915 | * request with the legacy rpcbind v2 protocol. |
922 | int error; | 916 | */ |
917 | if (error == -EPROTONOSUPPORT) | ||
918 | error = rpcb_register(program, version, 0, 0); | ||
923 | 919 | ||
924 | error = rpcb_register(program, version, 0, 0); | ||
925 | dprintk("svc: %s(%sv%u), error %d\n", | 920 | dprintk("svc: %s(%sv%u), error %d\n", |
926 | __func__, progname, version, error); | 921 | __func__, progname, version, error); |
927 | } | 922 | } |
928 | 923 | ||
929 | #endif /* CONFIG_SUNRPC_REGISTER_V4 */ | ||
930 | |||
931 | /* | 924 | /* |
932 | * All netids, bind addresses and ports registered for [program, version] | 925 | * All netids, bind addresses and ports registered for [program, version] |
933 | * are removed from the local rpcbind database (if the service is not | 926 | * are removed from the local rpcbind database (if the service is not |