diff options
author | Peng Tao <bergwolf@gmail.com> | 2011-09-22 21:50:10 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-10-18 12:08:12 -0400 |
commit | c1225158a8dad9e9d5eee8a17dbbd9c7cda05ab9 (patch) | |
tree | ed543930670a47c3cb911d5580941584509b73f2 /net/sunrpc | |
parent | fdc17abbc4b6094b34ee8ff5d91eaba8637594a2 (diff) |
SUNRPC/NFS: make rpc pipe upcall generic
The same function is used by idmap, gss and blocklayout code. Make it
generic.
Signed-off-by: Peng Tao <peng_tao@emc.com>
Signed-off-by: Jim Rees <rees@umich.edu>
Cc: stable@kernel.org [3.0]
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/auth_gss/auth_gss.c | 24 | ||||
-rw-r--r-- | net/sunrpc/rpc_pipe.c | 20 |
2 files changed, 22 insertions, 22 deletions
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 364eb45e989d..e9b76939268d 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/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index b181e3441323..67dbc1884383 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 |