diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-25 09:44:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-25 09:44:06 -0400 |
commit | ef78cc75f11ba3b085b105209cbfc6666ee10499 (patch) | |
tree | 1820dbd8ebb422b0a5751981cdfb6a2ecd30e20b /net | |
parent | 1442d1678ca7e53574fd403ba7bee6f4125d920c (diff) | |
parent | 940aab490215424a269f93d2eba2794fc8b3e269 (diff) |
Merge branch 'nfs-for-3.2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
* 'nfs-for-3.2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (26 commits)
Check validity of cl_rpcclient in nfs_server_list_show
NFS: Get rid of the nfs_rdata_mempool
NFS: Don't rely on PageError in nfs_readpage_release_partial
NFS: Get rid of unnecessary calls to ClearPageError() in read code
NFS: Get rid of nfs_restart_rpc()
NFS: Get rid of the unused nfs_write_data->flags field
NFS: Get rid of the unused nfs_read_data->flags field
NFSv4: Translate NFS4ERR_BADNAME into ENOENT when applied to a lookup
NFS: Remove the unused "lookupfh()" version of nfs4_proc_lookup()
NFS: Use the inode->i_version to cache NFSv4 change attribute information
SUNRPC: Remove unnecessary export of rpc_sockaddr2uaddr
SUNRPC: Fix rpc_sockaddr2uaddr
nfs/super.c: local functions should be static
pnfsblock: fix writeback deadlock
pnfsblock: fix NULL pointer dereference
pnfs: recoalesce when ld read pagelist fails
pnfs: recoalesce when ld write pagelist fails
pnfs: make _set_lo_fail generic
pnfsblock: add missing rpc_put_mount and path_put
SUNRPC/NFS: make rpc pipe upcall generic
...
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/addr.c | 6 | ||||
-rw-r--r-- | net/sunrpc/auth_gss/auth_gss.c | 24 | ||||
-rw-r--r-- | net/sunrpc/clnt.c | 4 | ||||
-rw-r--r-- | net/sunrpc/rpc_pipe.c | 20 | ||||
-rw-r--r-- | net/sunrpc/rpcb_clnt.c | 6 |
5 files changed, 31 insertions, 29 deletions
diff --git a/net/sunrpc/addr.c b/net/sunrpc/addr.c index 4195233c4914..4548757c9871 100644 --- a/net/sunrpc/addr.c +++ b/net/sunrpc/addr.c | |||
@@ -255,12 +255,13 @@ EXPORT_SYMBOL_GPL(rpc_pton); | |||
255 | /** | 255 | /** |
256 | * rpc_sockaddr2uaddr - Construct a universal address string from @sap. | 256 | * rpc_sockaddr2uaddr - Construct a universal address string from @sap. |
257 | * @sap: socket address | 257 | * @sap: socket address |
258 | * @gfp_flags: allocation mode | ||
258 | * | 259 | * |
259 | * Returns a %NUL-terminated string in dynamically allocated memory; | 260 | * Returns a %NUL-terminated string in dynamically allocated memory; |
260 | * otherwise NULL is returned if an error occurred. Caller must | 261 | * otherwise NULL is returned if an error occurred. Caller must |
261 | * free the returned string. | 262 | * free the returned string. |
262 | */ | 263 | */ |
263 | char *rpc_sockaddr2uaddr(const struct sockaddr *sap) | 264 | char *rpc_sockaddr2uaddr(const struct sockaddr *sap, gfp_t gfp_flags) |
264 | { | 265 | { |
265 | char portbuf[RPCBIND_MAXUADDRPLEN]; | 266 | char portbuf[RPCBIND_MAXUADDRPLEN]; |
266 | char addrbuf[RPCBIND_MAXUADDRLEN]; | 267 | char addrbuf[RPCBIND_MAXUADDRLEN]; |
@@ -288,9 +289,8 @@ char *rpc_sockaddr2uaddr(const struct sockaddr *sap) | |||
288 | if (strlcat(addrbuf, portbuf, sizeof(addrbuf)) > sizeof(addrbuf)) | 289 | if (strlcat(addrbuf, portbuf, sizeof(addrbuf)) > sizeof(addrbuf)) |
289 | return NULL; | 290 | return NULL; |
290 | 291 | ||
291 | return kstrdup(addrbuf, GFP_KERNEL); | 292 | return kstrdup(addrbuf, gfp_flags); |
292 | } | 293 | } |
293 | EXPORT_SYMBOL_GPL(rpc_sockaddr2uaddr); | ||
294 | 294 | ||
295 | /** | 295 | /** |
296 | * rpc_uaddr2sockaddr - convert a universal address to a socket address. | 296 | * rpc_uaddr2sockaddr - convert a universal address to a socket address. |
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index d4132754cbe1..afb56553dfe7 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c | |||
@@ -603,26 +603,6 @@ out: | |||
603 | return err; | 603 | return err; |
604 | } | 604 | } |
605 | 605 | ||
606 | static ssize_t | ||
607 | gss_pipe_upcall(struct file *filp, struct rpc_pipe_msg *msg, | ||
608 | char __user *dst, size_t buflen) | ||
609 | { | ||
610 | char *data = (char *)msg->data + msg->copied; | ||
611 | size_t mlen = min(msg->len, buflen); | ||
612 | unsigned long left; | ||
613 | |||
614 | left = copy_to_user(dst, data, mlen); | ||
615 | if (left == mlen) { | ||
616 | msg->errno = -EFAULT; | ||
617 | return -EFAULT; | ||
618 | } | ||
619 | |||
620 | mlen -= left; | ||
621 | msg->copied += mlen; | ||
622 | msg->errno = 0; | ||
623 | return mlen; | ||
624 | } | ||
625 | |||
626 | #define MSG_BUF_MAXSIZE 1024 | 606 | #define MSG_BUF_MAXSIZE 1024 |
627 | 607 | ||
628 | static ssize_t | 608 | static ssize_t |
@@ -1590,7 +1570,7 @@ static const struct rpc_credops gss_nullops = { | |||
1590 | }; | 1570 | }; |
1591 | 1571 | ||
1592 | static const struct rpc_pipe_ops gss_upcall_ops_v0 = { | 1572 | static const struct rpc_pipe_ops gss_upcall_ops_v0 = { |
1593 | .upcall = gss_pipe_upcall, | 1573 | .upcall = rpc_pipe_generic_upcall, |
1594 | .downcall = gss_pipe_downcall, | 1574 | .downcall = gss_pipe_downcall, |
1595 | .destroy_msg = gss_pipe_destroy_msg, | 1575 | .destroy_msg = gss_pipe_destroy_msg, |
1596 | .open_pipe = gss_pipe_open_v0, | 1576 | .open_pipe = gss_pipe_open_v0, |
@@ -1598,7 +1578,7 @@ static const struct rpc_pipe_ops gss_upcall_ops_v0 = { | |||
1598 | }; | 1578 | }; |
1599 | 1579 | ||
1600 | static const struct rpc_pipe_ops gss_upcall_ops_v1 = { | 1580 | static const struct rpc_pipe_ops gss_upcall_ops_v1 = { |
1601 | .upcall = gss_pipe_upcall, | 1581 | .upcall = rpc_pipe_generic_upcall, |
1602 | .downcall = gss_pipe_downcall, | 1582 | .downcall = gss_pipe_downcall, |
1603 | .destroy_msg = gss_pipe_destroy_msg, | 1583 | .destroy_msg = gss_pipe_destroy_msg, |
1604 | .open_pipe = gss_pipe_open_v1, | 1584 | .open_pipe = gss_pipe_open_v1, |
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index c5347d29cfb7..f0268ea7e711 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -850,7 +850,9 @@ rpc_restart_call_prepare(struct rpc_task *task) | |||
850 | { | 850 | { |
851 | if (RPC_ASSASSINATED(task)) | 851 | if (RPC_ASSASSINATED(task)) |
852 | return 0; | 852 | return 0; |
853 | task->tk_action = rpc_prepare_task; | 853 | task->tk_action = call_start; |
854 | if (task->tk_ops->rpc_call_prepare != NULL) | ||
855 | task->tk_action = rpc_prepare_task; | ||
854 | return 1; | 856 | return 1; |
855 | } | 857 | } |
856 | EXPORT_SYMBOL_GPL(rpc_restart_call_prepare); | 858 | EXPORT_SYMBOL_GPL(rpc_restart_call_prepare); |
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index 3156ba864519..bfddd68b31d3 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
@@ -77,6 +77,26 @@ rpc_timeout_upcall_queue(struct work_struct *work) | |||
77 | rpc_purge_list(rpci, &free_list, destroy_msg, -ETIMEDOUT); | 77 | rpc_purge_list(rpci, &free_list, destroy_msg, -ETIMEDOUT); |
78 | } | 78 | } |
79 | 79 | ||
80 | ssize_t rpc_pipe_generic_upcall(struct file *filp, struct rpc_pipe_msg *msg, | ||
81 | char __user *dst, size_t buflen) | ||
82 | { | ||
83 | char *data = (char *)msg->data + msg->copied; | ||
84 | size_t mlen = min(msg->len - msg->copied, buflen); | ||
85 | unsigned long left; | ||
86 | |||
87 | left = copy_to_user(dst, data, mlen); | ||
88 | if (left == mlen) { | ||
89 | msg->errno = -EFAULT; | ||
90 | return -EFAULT; | ||
91 | } | ||
92 | |||
93 | mlen -= left; | ||
94 | msg->copied += mlen; | ||
95 | msg->errno = 0; | ||
96 | return mlen; | ||
97 | } | ||
98 | EXPORT_SYMBOL_GPL(rpc_pipe_generic_upcall); | ||
99 | |||
80 | /** | 100 | /** |
81 | * rpc_queue_upcall - queue an upcall message to userspace | 101 | * rpc_queue_upcall - queue an upcall message to userspace |
82 | * @inode: inode of upcall pipe on which to queue given message | 102 | * @inode: inode of upcall pipe on which to queue given message |
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index e45d2fbbe5a8..f588b852d41c 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c | |||
@@ -410,7 +410,7 @@ static int rpcb_register_inet4(const struct sockaddr *sap, | |||
410 | unsigned short port = ntohs(sin->sin_port); | 410 | unsigned short port = ntohs(sin->sin_port); |
411 | int result; | 411 | int result; |
412 | 412 | ||
413 | map->r_addr = rpc_sockaddr2uaddr(sap); | 413 | map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL); |
414 | 414 | ||
415 | dprintk("RPC: %sregistering [%u, %u, %s, '%s'] with " | 415 | dprintk("RPC: %sregistering [%u, %u, %s, '%s'] with " |
416 | "local rpcbind\n", (port ? "" : "un"), | 416 | "local rpcbind\n", (port ? "" : "un"), |
@@ -437,7 +437,7 @@ static int rpcb_register_inet6(const struct sockaddr *sap, | |||
437 | unsigned short port = ntohs(sin6->sin6_port); | 437 | unsigned short port = ntohs(sin6->sin6_port); |
438 | int result; | 438 | int result; |
439 | 439 | ||
440 | map->r_addr = rpc_sockaddr2uaddr(sap); | 440 | map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL); |
441 | 441 | ||
442 | dprintk("RPC: %sregistering [%u, %u, %s, '%s'] with " | 442 | dprintk("RPC: %sregistering [%u, %u, %s, '%s'] with " |
443 | "local rpcbind\n", (port ? "" : "un"), | 443 | "local rpcbind\n", (port ? "" : "un"), |
@@ -686,7 +686,7 @@ void rpcb_getport_async(struct rpc_task *task) | |||
686 | case RPCBVERS_4: | 686 | case RPCBVERS_4: |
687 | case RPCBVERS_3: | 687 | case RPCBVERS_3: |
688 | map->r_netid = rpc_peeraddr2str(clnt, RPC_DISPLAY_NETID); | 688 | map->r_netid = rpc_peeraddr2str(clnt, RPC_DISPLAY_NETID); |
689 | map->r_addr = rpc_sockaddr2uaddr(sap); | 689 | map->r_addr = rpc_sockaddr2uaddr(sap, GFP_ATOMIC); |
690 | map->r_owner = ""; | 690 | map->r_owner = ""; |
691 | break; | 691 | break; |
692 | case RPCBVERS_2: | 692 | case RPCBVERS_2: |