X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fjfs%2Fjfs_metapage.c;fp=fs%2Fjfs%2Fjfs_metapage.c;h=c82d076c8274f50b36c340b0cebdb29094ea72cb;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=f5afc129d6b12d2c9483574441f7b7296fb15cac;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index f5afc129d..c82d076c8 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c @@ -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);