Loading fs/lockd/host.c +1 −13 Original line number Diff line number Diff line Loading @@ -87,18 +87,6 @@ static unsigned int nlm_hash_address(const struct sockaddr *sap) return hash & (NLM_HOST_NRHASH - 1); } static void nlm_clear_port(struct sockaddr *sap) { switch (sap->sa_family) { case AF_INET: ((struct sockaddr_in *)sap)->sin_port = 0; break; case AF_INET6: ((struct sockaddr_in6 *)sap)->sin6_port = 0; break; } } /* * Common host lookup routine for server & client */ Loading Loading @@ -177,7 +165,7 @@ static struct nlm_host *nlm_lookup_host(struct nlm_lookup_host_info *ni) host->h_addrbuf = nsm->sm_addrbuf; memcpy(nlm_addr(host), ni->sap, ni->salen); host->h_addrlen = ni->salen; nlm_clear_port(nlm_addr(host)); rpc_set_port(nlm_addr(host), 0); memcpy(nlm_srcaddr(host), ni->src_sap, ni->src_len); host->h_version = ni->version; host->h_proto = ni->protocol; Loading fs/lockd/mon.c +5 −39 Original line number Diff line number Diff line Loading @@ -61,43 +61,6 @@ static inline struct sockaddr *nsm_addr(const struct nsm_handle *nsm) return (struct sockaddr *)&nsm->sm_addr; } static void nsm_display_ipv4_address(const struct sockaddr *sap, char *buf, const size_t len) { const struct sockaddr_in *sin = (struct sockaddr_in *)sap; snprintf(buf, len, "%pI4", &sin->sin_addr.s_addr); } static void nsm_display_ipv6_address(const struct sockaddr *sap, char *buf, const size_t len) { const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; if (ipv6_addr_v4mapped(&sin6->sin6_addr)) snprintf(buf, len, "%pI4", &sin6->sin6_addr.s6_addr32[3]); else if (sin6->sin6_scope_id != 0) snprintf(buf, len, "%pI6%%%u", &sin6->sin6_addr, sin6->sin6_scope_id); else snprintf(buf, len, "%pI6", &sin6->sin6_addr); } static void nsm_display_address(const struct sockaddr *sap, char *buf, const size_t len) { switch (sap->sa_family) { case AF_INET: nsm_display_ipv4_address(sap, buf, len); break; case AF_INET6: nsm_display_ipv6_address(sap, buf, len); break; default: snprintf(buf, len, "unsupported address family"); break; } } static struct rpc_clnt *nsm_create(void) { struct sockaddr_in sin = { Loading Loading @@ -307,8 +270,11 @@ static struct nsm_handle *nsm_create_handle(const struct sockaddr *sap, memcpy(nsm_addr(new), sap, salen); new->sm_addrlen = salen; nsm_init_private(new); nsm_display_address((const struct sockaddr *)&new->sm_addr, new->sm_addrbuf, sizeof(new->sm_addrbuf)); if (rpc_ntop(nsm_addr(new), new->sm_addrbuf, sizeof(new->sm_addrbuf)) == 0) (void)snprintf(new->sm_addrbuf, sizeof(new->sm_addrbuf), "unsupported address family"); memcpy(new->sm_name, hostname, hostname_len); new->sm_name[hostname_len] = '\0'; Loading fs/nfs/internal.h +1 −22 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ struct nfs_mount_request { }; extern int nfs_mount(struct nfs_mount_request *info); extern void nfs_umount(const struct nfs_mount_request *info); /* client.c */ extern struct rpc_program nfs_program; Loading Loading @@ -213,7 +214,6 @@ void nfs_zap_acl_cache(struct inode *inode); extern int nfs_wait_bit_killable(void *word); /* super.c */ void nfs_parse_ip_address(char *, size_t, struct sockaddr *, size_t *); extern struct file_system_type nfs_xdev_fs_type; #ifdef CONFIG_NFS_V4 extern struct file_system_type nfs4_xdev_fs_type; Loading Loading @@ -374,24 +374,3 @@ unsigned int nfs_page_array_len(unsigned int base, size_t len) return ((unsigned long)len + (unsigned long)base + PAGE_SIZE - 1) >> PAGE_SHIFT; } #define IPV6_SCOPE_DELIMITER '%' /* * Set the port number in an address. Be agnostic about the address * family. */ static inline void nfs_set_port(struct sockaddr *sap, unsigned short port) { struct sockaddr_in *ap = (struct sockaddr_in *)sap; struct sockaddr_in6 *ap6 = (struct sockaddr_in6 *)sap; switch (sap->sa_family) { case AF_INET: ap->sin_port = htons(port); break; case AF_INET6: ap6->sin6_port = htons(port); break; } } fs/nfs/mount_clnt.c +79 −0 Original line number Diff line number Diff line Loading @@ -209,6 +209,71 @@ int nfs_mount(struct nfs_mount_request *info) goto out; } /** * nfs_umount - Notify a server that we have unmounted this export * @info: pointer to umount request arguments * * MOUNTPROC_UMNT is advisory, so we set a short timeout, and always * use UDP. */ void nfs_umount(const struct nfs_mount_request *info) { static const struct rpc_timeout nfs_umnt_timeout = { .to_initval = 1 * HZ, .to_maxval = 3 * HZ, .to_retries = 2, }; struct rpc_create_args args = { .protocol = IPPROTO_UDP, .address = info->sap, .addrsize = info->salen, .timeout = &nfs_umnt_timeout, .servername = info->hostname, .program = &mnt_program, .version = info->version, .authflavor = RPC_AUTH_UNIX, .flags = RPC_CLNT_CREATE_NOPING, }; struct mountres result; struct rpc_message msg = { .rpc_argp = info->dirpath, .rpc_resp = &result, }; struct rpc_clnt *clnt; int status; if (info->noresvport) args.flags |= RPC_CLNT_CREATE_NONPRIVPORT; clnt = rpc_create(&args); if (unlikely(IS_ERR(clnt))) goto out_clnt_err; dprintk("NFS: sending UMNT request for %s:%s\n", (info->hostname ? info->hostname : "server"), info->dirpath); if (info->version == NFS_MNT3_VERSION) msg.rpc_proc = &clnt->cl_procinfo[MOUNTPROC3_UMNT]; else msg.rpc_proc = &clnt->cl_procinfo[MOUNTPROC_UMNT]; status = rpc_call_sync(clnt, &msg, 0); rpc_shutdown_client(clnt); if (unlikely(status < 0)) goto out_call_err; return; out_clnt_err: dprintk("NFS: failed to create UMNT RPC client, status=%ld\n", PTR_ERR(clnt)); return; out_call_err: dprintk("NFS: UMNT request failed, status=%d\n", status); } /* * XDR encode/decode functions for MOUNT */ Loading Loading @@ -407,6 +472,13 @@ static struct rpc_procinfo mnt_procedures[] = { .p_statidx = MOUNTPROC_MNT, .p_name = "MOUNT", }, [MOUNTPROC_UMNT] = { .p_proc = MOUNTPROC_UMNT, .p_encode = (kxdrproc_t)mnt_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC_UMNT, .p_name = "UMOUNT", }, }; static struct rpc_procinfo mnt3_procedures[] = { Loading @@ -419,6 +491,13 @@ static struct rpc_procinfo mnt3_procedures[] = { .p_statidx = MOUNTPROC3_MNT, .p_name = "MOUNT", }, [MOUNTPROC3_UMNT] = { .p_proc = MOUNTPROC3_UMNT, .p_encode = (kxdrproc_t)mnt_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC3_UMNT, .p_name = "UMOUNT", }, }; Loading fs/nfs/nfs4namespace.c +4 −4 Original line number Diff line number Diff line Loading @@ -121,11 +121,11 @@ static struct vfsmount *try_location(struct nfs_clone_mount *mountdata, if (memchr(buf->data, IPV6_SCOPE_DELIMITER, buf->len)) continue; nfs_parse_ip_address(buf->data, buf->len, mountdata->addr, &mountdata->addrlen); if (mountdata->addr->sa_family == AF_UNSPEC) mountdata->addrlen = rpc_pton(buf->data, buf->len, mountdata->addr, mountdata->addrlen); if (mountdata->addrlen == 0) continue; nfs_set_port(mountdata->addr, NFS_PORT); rpc_set_port(mountdata->addr, NFS_PORT); memcpy(page2, buf->data, buf->len); page2[buf->len] = '\0'; Loading Loading
fs/lockd/host.c +1 −13 Original line number Diff line number Diff line Loading @@ -87,18 +87,6 @@ static unsigned int nlm_hash_address(const struct sockaddr *sap) return hash & (NLM_HOST_NRHASH - 1); } static void nlm_clear_port(struct sockaddr *sap) { switch (sap->sa_family) { case AF_INET: ((struct sockaddr_in *)sap)->sin_port = 0; break; case AF_INET6: ((struct sockaddr_in6 *)sap)->sin6_port = 0; break; } } /* * Common host lookup routine for server & client */ Loading Loading @@ -177,7 +165,7 @@ static struct nlm_host *nlm_lookup_host(struct nlm_lookup_host_info *ni) host->h_addrbuf = nsm->sm_addrbuf; memcpy(nlm_addr(host), ni->sap, ni->salen); host->h_addrlen = ni->salen; nlm_clear_port(nlm_addr(host)); rpc_set_port(nlm_addr(host), 0); memcpy(nlm_srcaddr(host), ni->src_sap, ni->src_len); host->h_version = ni->version; host->h_proto = ni->protocol; Loading
fs/lockd/mon.c +5 −39 Original line number Diff line number Diff line Loading @@ -61,43 +61,6 @@ static inline struct sockaddr *nsm_addr(const struct nsm_handle *nsm) return (struct sockaddr *)&nsm->sm_addr; } static void nsm_display_ipv4_address(const struct sockaddr *sap, char *buf, const size_t len) { const struct sockaddr_in *sin = (struct sockaddr_in *)sap; snprintf(buf, len, "%pI4", &sin->sin_addr.s_addr); } static void nsm_display_ipv6_address(const struct sockaddr *sap, char *buf, const size_t len) { const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; if (ipv6_addr_v4mapped(&sin6->sin6_addr)) snprintf(buf, len, "%pI4", &sin6->sin6_addr.s6_addr32[3]); else if (sin6->sin6_scope_id != 0) snprintf(buf, len, "%pI6%%%u", &sin6->sin6_addr, sin6->sin6_scope_id); else snprintf(buf, len, "%pI6", &sin6->sin6_addr); } static void nsm_display_address(const struct sockaddr *sap, char *buf, const size_t len) { switch (sap->sa_family) { case AF_INET: nsm_display_ipv4_address(sap, buf, len); break; case AF_INET6: nsm_display_ipv6_address(sap, buf, len); break; default: snprintf(buf, len, "unsupported address family"); break; } } static struct rpc_clnt *nsm_create(void) { struct sockaddr_in sin = { Loading Loading @@ -307,8 +270,11 @@ static struct nsm_handle *nsm_create_handle(const struct sockaddr *sap, memcpy(nsm_addr(new), sap, salen); new->sm_addrlen = salen; nsm_init_private(new); nsm_display_address((const struct sockaddr *)&new->sm_addr, new->sm_addrbuf, sizeof(new->sm_addrbuf)); if (rpc_ntop(nsm_addr(new), new->sm_addrbuf, sizeof(new->sm_addrbuf)) == 0) (void)snprintf(new->sm_addrbuf, sizeof(new->sm_addrbuf), "unsupported address family"); memcpy(new->sm_name, hostname, hostname_len); new->sm_name[hostname_len] = '\0'; Loading
fs/nfs/internal.h +1 −22 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ struct nfs_mount_request { }; extern int nfs_mount(struct nfs_mount_request *info); extern void nfs_umount(const struct nfs_mount_request *info); /* client.c */ extern struct rpc_program nfs_program; Loading Loading @@ -213,7 +214,6 @@ void nfs_zap_acl_cache(struct inode *inode); extern int nfs_wait_bit_killable(void *word); /* super.c */ void nfs_parse_ip_address(char *, size_t, struct sockaddr *, size_t *); extern struct file_system_type nfs_xdev_fs_type; #ifdef CONFIG_NFS_V4 extern struct file_system_type nfs4_xdev_fs_type; Loading Loading @@ -374,24 +374,3 @@ unsigned int nfs_page_array_len(unsigned int base, size_t len) return ((unsigned long)len + (unsigned long)base + PAGE_SIZE - 1) >> PAGE_SHIFT; } #define IPV6_SCOPE_DELIMITER '%' /* * Set the port number in an address. Be agnostic about the address * family. */ static inline void nfs_set_port(struct sockaddr *sap, unsigned short port) { struct sockaddr_in *ap = (struct sockaddr_in *)sap; struct sockaddr_in6 *ap6 = (struct sockaddr_in6 *)sap; switch (sap->sa_family) { case AF_INET: ap->sin_port = htons(port); break; case AF_INET6: ap6->sin6_port = htons(port); break; } }
fs/nfs/mount_clnt.c +79 −0 Original line number Diff line number Diff line Loading @@ -209,6 +209,71 @@ int nfs_mount(struct nfs_mount_request *info) goto out; } /** * nfs_umount - Notify a server that we have unmounted this export * @info: pointer to umount request arguments * * MOUNTPROC_UMNT is advisory, so we set a short timeout, and always * use UDP. */ void nfs_umount(const struct nfs_mount_request *info) { static const struct rpc_timeout nfs_umnt_timeout = { .to_initval = 1 * HZ, .to_maxval = 3 * HZ, .to_retries = 2, }; struct rpc_create_args args = { .protocol = IPPROTO_UDP, .address = info->sap, .addrsize = info->salen, .timeout = &nfs_umnt_timeout, .servername = info->hostname, .program = &mnt_program, .version = info->version, .authflavor = RPC_AUTH_UNIX, .flags = RPC_CLNT_CREATE_NOPING, }; struct mountres result; struct rpc_message msg = { .rpc_argp = info->dirpath, .rpc_resp = &result, }; struct rpc_clnt *clnt; int status; if (info->noresvport) args.flags |= RPC_CLNT_CREATE_NONPRIVPORT; clnt = rpc_create(&args); if (unlikely(IS_ERR(clnt))) goto out_clnt_err; dprintk("NFS: sending UMNT request for %s:%s\n", (info->hostname ? info->hostname : "server"), info->dirpath); if (info->version == NFS_MNT3_VERSION) msg.rpc_proc = &clnt->cl_procinfo[MOUNTPROC3_UMNT]; else msg.rpc_proc = &clnt->cl_procinfo[MOUNTPROC_UMNT]; status = rpc_call_sync(clnt, &msg, 0); rpc_shutdown_client(clnt); if (unlikely(status < 0)) goto out_call_err; return; out_clnt_err: dprintk("NFS: failed to create UMNT RPC client, status=%ld\n", PTR_ERR(clnt)); return; out_call_err: dprintk("NFS: UMNT request failed, status=%d\n", status); } /* * XDR encode/decode functions for MOUNT */ Loading Loading @@ -407,6 +472,13 @@ static struct rpc_procinfo mnt_procedures[] = { .p_statidx = MOUNTPROC_MNT, .p_name = "MOUNT", }, [MOUNTPROC_UMNT] = { .p_proc = MOUNTPROC_UMNT, .p_encode = (kxdrproc_t)mnt_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC_UMNT, .p_name = "UMOUNT", }, }; static struct rpc_procinfo mnt3_procedures[] = { Loading @@ -419,6 +491,13 @@ static struct rpc_procinfo mnt3_procedures[] = { .p_statidx = MOUNTPROC3_MNT, .p_name = "MOUNT", }, [MOUNTPROC3_UMNT] = { .p_proc = MOUNTPROC3_UMNT, .p_encode = (kxdrproc_t)mnt_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC3_UMNT, .p_name = "UMOUNT", }, }; Loading
fs/nfs/nfs4namespace.c +4 −4 Original line number Diff line number Diff line Loading @@ -121,11 +121,11 @@ static struct vfsmount *try_location(struct nfs_clone_mount *mountdata, if (memchr(buf->data, IPV6_SCOPE_DELIMITER, buf->len)) continue; nfs_parse_ip_address(buf->data, buf->len, mountdata->addr, &mountdata->addrlen); if (mountdata->addr->sa_family == AF_UNSPEC) mountdata->addrlen = rpc_pton(buf->data, buf->len, mountdata->addr, mountdata->addrlen); if (mountdata->addrlen == 0) continue; nfs_set_port(mountdata->addr, NFS_PORT); rpc_set_port(mountdata->addr, NFS_PORT); memcpy(page2, buf->data, buf->len); page2[buf->len] = '\0'; Loading