]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/fuse/file.c
fuse: use true,false for bool variable
[linux.git] / fs / fuse / file.c
index ce715380143cd890057605575323ecddc01706d1..9d67b830fb7a25445bfd4f930c6ef7fa66fbbd1e 100644 (file)
@@ -803,6 +803,10 @@ static int fuse_do_readpage(struct file *file, struct page *page)
 
        attr_ver = fuse_get_attr_version(fc);
 
+       /* Don't overflow end offset */
+       if (pos + (desc.length - 1) == LLONG_MAX)
+               desc.length--;
+
        fuse_read_args_fill(&ia, file, pos, desc.length, FUSE_READ);
        res = fuse_simple_request(fc, &ia.ap.args);
        if (res < 0)
@@ -888,6 +892,14 @@ static void fuse_send_readpages(struct fuse_io_args *ia, struct file *file)
        ap->args.out_pages = true;
        ap->args.page_zeroing = true;
        ap->args.page_replace = true;
+
+       /* Don't overflow end offset */
+       if (pos + (count - 1) == LLONG_MAX) {
+               count--;
+               ap->descs[ap->num_pages - 1].length--;
+       }
+       WARN_ON((loff_t) (pos + count) < 0);
+
        fuse_read_args_fill(ia, file, pos, count, FUSE_READ);
        ia->read.attr_ver = fuse_get_attr_version(fc);
        if (fc->async_read) {
@@ -1397,9 +1409,9 @@ static int fuse_get_user_pages(struct fuse_args_pages *ap, struct iov_iter *ii,
        }
 
        if (write)
-               ap->args.in_pages = 1;
+               ap->args.in_pages = true;
        else
-               ap->args.out_pages = 1;
+               ap->args.out_pages = true;
 
        *nbytesp = nbytes;
 
@@ -1465,6 +1477,7 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
                }
                ia = NULL;
                if (nres < 0) {
+                       iov_iter_revert(iter, nbytes);
                        err = nres;
                        break;
                }
@@ -1473,8 +1486,10 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
                count -= nres;
                res += nres;
                pos += nres;
-               if (nres != nbytes)
+               if (nres != nbytes) {
+                       iov_iter_revert(iter, nbytes - nres);
                        break;
+               }
                if (count) {
                        max_pages = iov_iter_npages(iter, fc->max_pages);
                        ia = fuse_io_alloc(io, max_pages);