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/sunrpc/rpc_pipe.c | |
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/sunrpc/rpc_pipe.c')
-rw-r--r-- | net/sunrpc/rpc_pipe.c | 20 |
1 files changed, 20 insertions, 0 deletions
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 |