diff options
author | David S. Miller <davem@davemloft.net> | 2010-10-21 00:54:21 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-10-21 00:54:21 -0700 |
commit | 4c2a1b86644a6f3fc6b788d3a591563aff71f836 (patch) | |
tree | f615b0d88e2039ebc0ada2daf5009411f43febb9 /net | |
parent | e2269308359d5863b6aa1fcb95a425a2ab255f1f (diff) | |
parent | f6f94e2ab1b33f0082ac22d71f66385a60d8157f (diff) | |
download | op-kernel-dev-4c2a1b86644a6f3fc6b788d3a591563aff71f836.zip op-kernel-dev-4c2a1b86644a6f3fc6b788d3a591563aff71f836.tar.gz |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Diffstat (limited to 'net')
-rw-r--r-- | net/rds/page.c | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/net/rds/page.c b/net/rds/page.c index 595a952..1dfbfea 100644 --- a/net/rds/page.c +++ b/net/rds/page.c @@ -57,30 +57,17 @@ int rds_page_copy_user(struct page *page, unsigned long offset, unsigned long ret; void *addr; - if (to_user) + addr = kmap(page); + if (to_user) { rds_stats_add(s_copy_to_user, bytes); - else + ret = copy_to_user(ptr, addr + offset, bytes); + } else { rds_stats_add(s_copy_from_user, bytes); - - addr = kmap_atomic(page, KM_USER0); - if (to_user) - ret = __copy_to_user_inatomic(ptr, addr + offset, bytes); - else - ret = __copy_from_user_inatomic(addr + offset, ptr, bytes); - kunmap_atomic(addr, KM_USER0); - - if (ret) { - addr = kmap(page); - if (to_user) - ret = copy_to_user(ptr, addr + offset, bytes); - else - ret = copy_from_user(addr + offset, ptr, bytes); - kunmap(page); - if (ret) - return -EFAULT; + ret = copy_from_user(addr + offset, ptr, bytes); } + kunmap(page); - return 0; + return ret ? -EFAULT : 0; } EXPORT_SYMBOL_GPL(rds_page_copy_user); |