reiserfs: use ->invalidatepage() length argument
authorLukas Czerner <lczerner@redhat.com>
Wed, 22 May 2013 03:58:51 +0000 (23:58 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 22 May 2013 03:58:51 +0000 (23:58 -0400)
->invalidatepage() aop now accepts range to invalidate so we can make
use of it in reiserfs_invalidatepage()

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Cc: reiserfs-devel@vger.kernel.org
fs/reiserfs/inode.c

index 278c86e3e6c4037a81418c6791561716ec2dc19d..76c8faddf137c8860e4d0e5a6cb795ae72ca3e02 100644 (file)
@@ -2976,11 +2976,13 @@ static void reiserfs_invalidatepage(struct page *page, unsigned int offset,
        struct buffer_head *head, *bh, *next;
        struct inode *inode = page->mapping->host;
        unsigned int curr_off = 0;
+       unsigned int stop = offset + length;
+       int partial_page = (offset || length < PAGE_CACHE_SIZE);
        int ret = 1;
 
        BUG_ON(!PageLocked(page));
 
-       if (offset == 0)
+       if (!partial_page)
                ClearPageChecked(page);
 
        if (!page_has_buffers(page))
@@ -2992,6 +2994,9 @@ static void reiserfs_invalidatepage(struct page *page, unsigned int offset,
                unsigned int next_off = curr_off + bh->b_size;
                next = bh->b_this_page;
 
+               if (next_off > stop)
+                       goto out;
+
                /*
                 * is this block fully invalidated?
                 */
@@ -3010,7 +3015,7 @@ static void reiserfs_invalidatepage(struct page *page, unsigned int offset,
         * The get_block cached value has been unconditionally invalidated,
         * so real IO is not possible anymore.
         */
-       if (!offset && ret) {
+       if (!partial_page && ret) {
                ret = try_to_release_page(page, 0);
                /* maybe should BUG_ON(!ret); - neilb */
        }