aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2005-12-15 16:41:20 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2005-12-15 16:41:20 +0000
commit154ffe2c27e84a29eafedc5327f663a313f2721a (patch)
tree42d3497095b2eb452cbe3a504733112f0c44ad8d /kernel/file.c
parent4e8290961d24105834fed054afbf1f7749553e47 (diff)
downloadlibfuse-154ffe2c27e84a29eafedc5327f663a313f2721a.tar.gz
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 0a625a2..2d34e01 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -538,9 +538,6 @@ static int fuse_commit_write(struct file *file, struct page *page,
if (is_bad_inode(inode))
return -EIO;
- if (count > fc->max_write)
- return -EIO;
-
req = fuse_get_request(fc);
if (!req)
return -EINTR;
@@ -592,7 +589,7 @@ static int fuse_get_user_pages(struct fuse_req *req, const char __user *buf,
nbytes = min(nbytes, (unsigned) FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT);
npages = (nbytes + offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
- npages = min(npages, FUSE_MAX_PAGES_PER_REQ);
+ npages = min(max(npages, 1), FUSE_MAX_PAGES_PER_REQ);
down_read(&current->mm->mmap_sem);
npages = get_user_pages(current, current->mm, user_addr, npages, write,
0, req->pages, NULL);
@@ -623,7 +620,6 @@ static ssize_t fuse_direct_io(struct file *file, const char __user *buf,
return -EINTR;
while (count) {
- size_t tmp;
size_t nres;
size_t nbytes = min(count, nmax);
int err = fuse_get_user_pages(req, buf, nbytes, !write);
@@ -631,8 +627,8 @@ static ssize_t fuse_direct_io(struct file *file, const char __user *buf,
res = err;
break;
}
- tmp = (req->num_pages << PAGE_SHIFT) - req->page_offset;
- nbytes = min(nbytes, tmp);
+ nbytes = (req->num_pages << PAGE_SHIFT) - req->page_offset;
+ nbytes = min(count, nbytes);
if (write)
nres = fuse_send_write(req, file, inode, pos, nbytes);
else