linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / jfs / jfs_metapage.c
index f5afc12..c82d076 100644 (file)
@@ -104,9 +104,10 @@ static inline int insert_metapage(struct page *page, struct metapage *mp)
        if (PagePrivate(page))
                a = mp_anchor(page);
        else {
-               a = kzalloc(sizeof(struct meta_anchor), GFP_NOFS);
+               a = kmalloc(sizeof(struct meta_anchor), GFP_NOFS);
                if (!a)
                        return -ENOMEM;
+               memset(a, 0, sizeof(struct meta_anchor));
                set_page_private(page, (unsigned long)a);
                SetPagePrivate(page);
                kmap(page);
@@ -220,8 +221,8 @@ int __init metapage_init(void)
        if (metapage_cache == NULL)
                return -ENOMEM;
 
-       metapage_mempool = mempool_create_slab_pool(METAPOOL_MIN_PAGES,
-                                                   metapage_cache);
+       metapage_mempool = mempool_create(METAPOOL_MIN_PAGES, mempool_alloc_slab,
+                                         mempool_free_slab, metapage_cache);
 
        if (metapage_mempool == NULL) {
                kmem_cache_destroy(metapage_cache);
@@ -257,7 +258,7 @@ static sector_t metapage_get_blocks(struct inode *inode, sector_t lblock,
        int rc = 0;
        int xflag;
        s64 xaddr;
-       sector_t file_blocks = (inode->i_size + inode->i_sb->s_blocksize - 1) >>
+       sector_t file_blocks = (inode->i_size + inode->i_blksize - 1) >>
                               inode->i_blkbits;
 
        if (lblock >= file_blocks)
@@ -568,16 +569,17 @@ static int metapage_releasepage(struct page *page, gfp_t gfp_mask)
        return ret;
 }
 
-static void metapage_invalidatepage(struct page *page, unsigned long offset)
+static int metapage_invalidatepage(struct page *page, unsigned long offset)
 {
        BUG_ON(offset);
 
-       BUG_ON(PageWriteback(page));
+       if (PageWriteback(page))
+               return 0;
 
-       metapage_releasepage(page, 0);
+       return metapage_releasepage(page, 0);
 }
 
-const struct address_space_operations jfs_metapage_aops = {
+struct address_space_operations jfs_metapage_aops = {
        .readpage       = metapage_readpage,
        .writepage      = metapage_writepage,
        .sync_page      = block_sync_page,
@@ -632,9 +634,10 @@ struct metapage *__get_metapage(struct inode *inode, unsigned long lblock,
                }
                SetPageUptodate(page);
        } else {
-               page = read_mapping_page(mapping, page_index, NULL);
+               page = read_cache_page(mapping, page_index,
+                           (filler_t *)mapping->a_ops->readpage, NULL);
                if (IS_ERR(page) || !PageUptodate(page)) {
-                       jfs_err("read_mapping_page failed!");
+                       jfs_err("read_cache_page failed!");
                        return NULL;
                }
                lock_page(page);