1 fs/ext3/inode.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
2 fs/ext3/super.c | 3 +++
3 2 files changed, 55 insertions(+)
5 Index: linux-2.6.0/fs/ext3/inode.c
6 ===================================================================
7 --- linux-2.6.0.orig/fs/ext3/inode.c 2003-12-31 00:33:49.000000000 +0300
8 +++ linux-2.6.0/fs/ext3/inode.c 2003-12-31 01:14:17.000000000 +0300
14 +int ext3_map_inode_page(struct inode *inode, struct page *page,
15 + unsigned long *blocks, int *created, int create)
17 + unsigned int blocksize, blocks_per_page;
18 + unsigned long iblock;
19 + struct buffer_head dummy;
21 + int i, rc = 0, failed = 0, needed_blocks;
23 + blocksize = inode->i_sb->s_blocksize;
24 + blocks_per_page = PAGE_SIZE >> inode->i_sb->s_blocksize_bits;
25 + iblock = page->index * blocks_per_page;
27 + for (i = 0; i < blocks_per_page; i++, iblock++) {
28 + blocks[i] = ext3_bmap(inode->i_mapping, iblock);
29 + if (blocks[i] == 0) {
37 + if (failed == 0 || create == 0)
40 + needed_blocks = ext3_writepage_trans_blocks(inode);
41 + handle = ext3_journal_start(inode, needed_blocks);
43 + return PTR_ERR(handle);
45 + iblock = page->index * blocks_per_page;
46 + for (i = 0; i < blocks_per_page; i++, iblock++) {
50 + rc = ext3_get_block_handle(handle, inode, iblock, &dummy, 1, 1);
52 + printk(KERN_INFO "ext3_map_inode_page: error reading "
53 + "block %ld\n", iblock);
56 + if (buffer_new(&dummy))
57 + unmap_underlying_metadata(dummy.b_bdev,
59 + blocks[i] = dummy.b_blocknr;
64 + ext3_journal_stop(handle);
68 Index: linux-2.6.0/fs/ext3/super.c
69 ===================================================================
70 --- linux-2.6.0.orig/fs/ext3/super.c 2003-12-31 00:33:49.000000000 +0300
71 +++ linux-2.6.0/fs/ext3/super.c 2003-12-31 01:10:40.000000000 +0300
73 int ext3_prep_san_write(struct inode *inode, long *blocks,
74 int nblocks, loff_t newsize);
75 EXPORT_SYMBOL(ext3_prep_san_write);
76 +int ext3_map_inode_page(struct inode *inode, struct page *page,
77 + unsigned long *blocks, int *created, int create);
78 +EXPORT_SYMBOL(ext3_map_inode_page);
80 MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
81 MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");