Btrfs: Fix PAGE_CACHE_SHIFT shifts on 32 bit machines
authorChris Mason <chris.mason@oracle.com>
Tue, 30 Oct 2007 20:56:53 +0000 (16:56 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:03:57 +0000 (11:03 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/disk-io.c
fs/btrfs/extent_map.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/transaction.c

index 5a7e60d7f443044cb457ec637dadabdad96c36e9..8935eec31ee28df646942db10ee2463aef7a5533 100644 (file)
@@ -159,7 +159,7 @@ static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
 int csum_dirty_buffer(struct btrfs_root *root, struct page *page)
 {
        struct extent_map_tree *tree;
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 found_start;
        int found_level;
        unsigned long len;
index e4ee980cc138adea7d19ac1fbe76083851ba98f7..238cb1d81d56091b2e629263a3dd100ef7486c26 100644 (file)
@@ -1229,7 +1229,7 @@ EXPORT_SYMBOL(test_range_bit);
 static int check_page_uptodate(struct extent_map_tree *tree,
                               struct page *page)
 {
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 end = start + PAGE_CACHE_SIZE - 1;
        if (test_range_bit(tree, start, end, EXTENT_UPTODATE, 1))
                SetPageUptodate(page);
@@ -1243,7 +1243,7 @@ static int check_page_uptodate(struct extent_map_tree *tree,
 static int check_page_locked(struct extent_map_tree *tree,
                             struct page *page)
 {
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 end = start + PAGE_CACHE_SIZE - 1;
        if (!test_range_bit(tree, start, end, EXTENT_LOCKED, 0))
                unlock_page(page);
@@ -1257,7 +1257,7 @@ static int check_page_locked(struct extent_map_tree *tree,
 static int check_page_writeback(struct extent_map_tree *tree,
                             struct page *page)
 {
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 end = start + PAGE_CACHE_SIZE - 1;
        if (!test_range_bit(tree, start, end, EXTENT_WRITEBACK, 0))
                end_page_writeback(page);
@@ -1296,7 +1296,8 @@ static int end_bio_extent_writepage(struct bio *bio,
 
        do {
                struct page *page = bvec->bv_page;
-               start = (page->index << PAGE_CACHE_SHIFT) + bvec->bv_offset;
+               start = ((u64)page->index << PAGE_CACHE_SHIFT) +
+                        bvec->bv_offset;
                end = start + bvec->bv_len - 1;
 
                if (bvec->bv_offset == 0 && bvec->bv_len == PAGE_CACHE_SIZE)
@@ -1361,7 +1362,8 @@ static int end_bio_extent_readpage(struct bio *bio,
 
        do {
                struct page *page = bvec->bv_page;
-               start = (page->index << PAGE_CACHE_SHIFT) + bvec->bv_offset;
+               start = ((u64)page->index << PAGE_CACHE_SHIFT) +
+                       bvec->bv_offset;
                end = start + bvec->bv_len - 1;
 
                if (bvec->bv_offset == 0 && bvec->bv_len == PAGE_CACHE_SIZE)
@@ -1427,7 +1429,8 @@ static int end_bio_extent_preparewrite(struct bio *bio,
 
        do {
                struct page *page = bvec->bv_page;
-               start = (page->index << PAGE_CACHE_SHIFT) + bvec->bv_offset;
+               start = ((u64)page->index << PAGE_CACHE_SHIFT) +
+                       bvec->bv_offset;
                end = start + bvec->bv_len - 1;
 
                if (--bvec >= bio->bi_io_vec)
@@ -1503,7 +1506,7 @@ int extent_read_full_page(struct extent_map_tree *tree, struct page *page,
                          get_extent_t *get_extent)
 {
        struct inode *inode = page->mapping->host;
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 page_end = start + PAGE_CACHE_SIZE - 1;
        u64 end;
        u64 cur = start;
@@ -1608,7 +1611,7 @@ int extent_write_full_page(struct extent_map_tree *tree, struct page *page,
                          struct writeback_control *wbc)
 {
        struct inode *inode = page->mapping->host;
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 page_end = start + PAGE_CACHE_SIZE - 1;
        u64 end;
        u64 cur = start;
@@ -1750,7 +1753,7 @@ EXPORT_SYMBOL(extent_write_full_page);
 int extent_invalidatepage(struct extent_map_tree *tree,
                          struct page *page, unsigned long offset)
 {
-       u64 start = (page->index << PAGE_CACHE_SHIFT);
+       u64 start = ((u64)page->index << PAGE_CACHE_SHIFT);
        u64 end = start + PAGE_CACHE_SIZE - 1;
        size_t blocksize = page->mapping->host->i_sb->s_blocksize;
 
@@ -1792,7 +1795,7 @@ int extent_prepare_write(struct extent_map_tree *tree,
                         struct inode *inode, struct page *page,
                         unsigned from, unsigned to, get_extent_t *get_extent)
 {
-       u64 page_start = page->index << PAGE_CACHE_SHIFT;
+       u64 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 page_end = page_start + PAGE_CACHE_SIZE - 1;
        u64 block_start;
        u64 orig_block_start;
@@ -1890,7 +1893,7 @@ EXPORT_SYMBOL(extent_prepare_write);
 int try_release_extent_mapping(struct extent_map_tree *tree, struct page *page)
 {
        struct extent_map *em;
-       u64 start = page->index << PAGE_CACHE_SHIFT;
+       u64 start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 end = start + PAGE_CACHE_SIZE - 1;
        u64 orig_start = start;
        int ret = 1;
@@ -2202,7 +2205,7 @@ int clear_extent_buffer_dirty(struct extent_map_tree *tree,
                if ((i == 0 && (eb->start & (PAGE_CACHE_SIZE - 1))) ||
                    ((i == num_pages - 1) &&
                     ((eb->start + eb->len) & (PAGE_CACHE_SIZE - 1)))) {
-                       start = page->index << PAGE_CACHE_SHIFT;
+                       start = (u64)page->index << PAGE_CACHE_SHIFT;
                        end  = start + PAGE_CACHE_SIZE - 1;
                        if (test_range_bit(tree, start, end,
                                           EXTENT_DIRTY, 0)) {
index 843e920388edd2507ea5183888be92edef1e17d5..abdd9caad94ec57f745061ff9116911c25ee835f 100644 (file)
@@ -301,7 +301,8 @@ static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
                        SetPageUptodate(p);
                        set_page_dirty(p);
                }
-               last_end = pages[num_pages -1]->index << PAGE_CACHE_SHIFT;
+               last_end = (u64)(pages[num_pages -1]->index) <<
+                               PAGE_CACHE_SHIFT;
                last_end += PAGE_CACHE_SIZE - 1;
                set_extent_delalloc(em_tree, start_pos, end_of_last_block,
                                 GFP_NOFS);
index 0ba1cdbdf112bd18824012b332e754805b7967f8..5d10b64e42df1173d04bd473aa2408ca59cfb1cf 100644 (file)
@@ -111,7 +111,7 @@ int btrfs_writepage_io_hook(struct page *page, u64 start, u64 end)
        struct btrfs_trans_handle *trans;
        char *kaddr;
        int ret;
-       u64 page_start = page->index << PAGE_CACHE_SHIFT;
+       u64 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
        size_t offset = start - page_start;
 
        mutex_lock(&root->fs_info->fs_mutex);
@@ -160,7 +160,7 @@ out:
 
 int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
 {
-       size_t offset = start - (page->index << PAGE_CACHE_SHIFT);
+       size_t offset = start - ((u64)page->index << PAGE_CACHE_SHIFT);
        struct inode *inode = page->mapping->host;
        struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
        char *kaddr;
@@ -688,7 +688,7 @@ static int btrfs_cow_one_page(struct inode *inode, struct page *page,
        char *kaddr;
        int ret = 0;
        struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
-       u64 page_start = page->index << PAGE_CACHE_SHIFT;
+       u64 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
        u64 page_end = page_start + PAGE_CACHE_SIZE - 1;
 
        set_page_extent_mapped(page);
@@ -739,7 +739,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from)
                        goto out;
                }
        }
-       page_start = page->index << PAGE_CACHE_SHIFT;
+       page_start = (u64)page->index << PAGE_CACHE_SHIFT;
 
        ret = btrfs_cow_one_page(inode, page, offset);
 
@@ -1618,7 +1618,7 @@ again:
                        goto out;
                }
 
-               extent_offset = (page->index << PAGE_CACHE_SHIFT) -
+               extent_offset = ((u64)page->index << PAGE_CACHE_SHIFT) -
                        extent_start + page_offset;
                copy_size = min_t(u64, PAGE_CACHE_SIZE - page_offset,
                                size - extent_offset);
@@ -1769,7 +1769,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct page *page)
        lock_page(page);
        wait_on_page_writeback(page);
        size = i_size_read(inode);
-       page_start = page->index << PAGE_CACHE_SHIFT;
+       page_start = (u64)page->index << PAGE_CACHE_SHIFT;
 
        if ((page->mapping != inode->i_mapping) ||
            (page_start > size)) {
@@ -2065,7 +2065,7 @@ int btrfs_defrag_file(struct file *file) {
                                goto out_unlock;
                        }
                }
-               page_start = page->index << PAGE_CACHE_SHIFT;
+               page_start = (u64)page->index << PAGE_CACHE_SHIFT;
                page_end = page_start + PAGE_CACHE_SIZE - 1;
 
                lock_extent(em_tree, page_start, page_end, GFP_NOFS);
index bdfe05cf26c679bddbc417d4524d938fabd645af..4af1c0dab7f8baa1c8c47f0d9588c57e4bc7aeb8 100644 (file)
@@ -169,7 +169,7 @@ int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
                clear_extent_dirty(dirty_pages, start, end, GFP_NOFS);
                while(start <= end) {
                        index = start >> PAGE_CACHE_SHIFT;
-                       start = (index + 1) << PAGE_CACHE_SHIFT;
+                       start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
                        page = find_lock_page(btree_inode->i_mapping, index);
                        if (!page)
                                continue;