From 9bc9b54c269b096264a0d0484bc4492cef93ee77 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 20 Dec 2007 14:54:42 -0500 Subject: [PATCH] --- yaml --- r: 79655 b: refs/heads/master c: a661b77fc12a172edea4b709e37f8cd58a6bd500 h: refs/heads/master i: 79653: 10b5b538ec67d6350c568650bd780d070d082c3c 79651: 82bf57a55380a5d37ab761dcefd031b47b9473e8 79647: ef5495a325830188945a1ec9ccc6c62e52dd5a6f v: v3 --- [refs] | 2 +- trunk/fs/nfs/idmap.c | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 4b2e28a91f52..bdbe3bfb860b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 369af0f1166f7a637751110395496cee156b4297 +refs/heads/master: a661b77fc12a172edea4b709e37f8cd58a6bd500 diff --git a/trunk/fs/nfs/idmap.c b/trunk/fs/nfs/idmap.c index c56fc7d5a46e..d93e071b900c 100644 --- a/trunk/fs/nfs/idmap.c +++ b/trunk/fs/nfs/idmap.c @@ -358,17 +358,15 @@ idmap_pipe_upcall(struct file *filp, struct rpc_pipe_msg *msg, char __user *dst, size_t buflen) { char *data = (char *)msg->data + msg->copied; - ssize_t mlen = msg->len - msg->copied; - ssize_t left; - - if (mlen > buflen) - mlen = buflen; + size_t mlen = min(msg->len, buflen); + unsigned long left; left = copy_to_user(dst, data, mlen); - if (left < 0) { - msg->errno = left; - return left; + if (left == mlen) { + msg->errno = -EFAULT; + return -EFAULT; } + mlen -= left; msg->copied += mlen; msg->errno = 0;