diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/hugetlbfs/inode.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 0ab0c6f5f438..6903d37af037 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
@@ -252,6 +252,7 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf, | |||
252 | for (;;) { | 252 | for (;;) { |
253 | struct page *page; | 253 | struct page *page; |
254 | unsigned long nr, ret; | 254 | unsigned long nr, ret; |
255 | int ra; | ||
255 | 256 | ||
256 | /* nr is the maximum number of bytes to copy from this page */ | 257 | /* nr is the maximum number of bytes to copy from this page */ |
257 | nr = huge_page_size(h); | 258 | nr = huge_page_size(h); |
@@ -274,16 +275,19 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf, | |||
274 | */ | 275 | */ |
275 | ret = len < nr ? len : nr; | 276 | ret = len < nr ? len : nr; |
276 | if (clear_user(buf, ret)) | 277 | if (clear_user(buf, ret)) |
277 | ret = -EFAULT; | 278 | ra = -EFAULT; |
279 | else | ||
280 | ra = 0; | ||
278 | } else { | 281 | } else { |
279 | /* | 282 | /* |
280 | * We have the page, copy it to user space buffer. | 283 | * We have the page, copy it to user space buffer. |
281 | */ | 284 | */ |
282 | ret = hugetlbfs_read_actor(page, offset, buf, len, nr); | 285 | ra = hugetlbfs_read_actor(page, offset, buf, len, nr); |
286 | ret = ra; | ||
283 | } | 287 | } |
284 | if (ret < 0) { | 288 | if (ra < 0) { |
285 | if (retval == 0) | 289 | if (retval == 0) |
286 | retval = ret; | 290 | retval = ra; |
287 | if (page) | 291 | if (page) |
288 | page_cache_release(page); | 292 | page_cache_release(page); |
289 | goto out; | 293 | goto out; |