]> Pileus Git - ~andy/linux/blobdiff - mm/readahead.c
Input: don't modify the id of ioctl-provided ff effect on upload failure
[~andy/linux] / mm / readahead.c
index e4ed04149785f069b201cd2ffaa9caa90c4b0d22..7cdbb44aa90bd99bef05f43ee27cc13b2121ed7a 100644 (file)
@@ -401,6 +401,7 @@ ondemand_readahead(struct address_space *mapping,
                   unsigned long req_size)
 {
        unsigned long max = max_sane_readahead(ra->ra_pages);
+       pgoff_t prev_offset;
 
        /*
         * start of file
@@ -452,8 +453,11 @@ ondemand_readahead(struct address_space *mapping,
 
        /*
         * sequential cache miss
+        * trivial case: (offset - prev_offset) == 1
+        * unaligned reads: (offset - prev_offset) == 0
         */
-       if (offset - (ra->prev_pos >> PAGE_CACHE_SHIFT) <= 1UL)
+       prev_offset = (unsigned long long)ra->prev_pos >> PAGE_CACHE_SHIFT;
+       if (offset - prev_offset <= 1UL)
                goto initial_readahead;
 
        /*
@@ -569,7 +573,7 @@ static ssize_t
 do_readahead(struct address_space *mapping, struct file *filp,
             pgoff_t index, unsigned long nr)
 {
-       if (!mapping || !mapping->a_ops || !mapping->a_ops->readpage)
+       if (!mapping || !mapping->a_ops)
                return -EINVAL;
 
        force_page_cache_readahead(mapping, filp, index, nr);