From 0c00b4a10c951a7a5cba075a3e8181662dab50b8 Mon Sep 17 00:00:00 2001 From: James Simmons Date: Thu, 14 Mar 2013 13:33:15 -0400 Subject: [PATCH] LU-2748 fsfilt: ext4_map_inode_page in osd and ldisk out of sync The functon ext4_map_inode_page is mismatched in its use between osd-ldiskfs and ldiskfs. The integer array is no longer used so we remove its handling from the ldiskfs layer. Signed-off-by: James Simmons Change-Id: I9b5522ce187f06983f328408cbcd0ce077e72ea1 Reviewed-on: http://review.whamcloud.com/5708 Tested-by: Hudson Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Tested-by: Maloo Reviewed-by: Mike Pershin --- .../rhel6.3/ext4-map_inode_page-2.6.18.patch | 48 +++++++++------------- .../sles11sp2/ext4-map_inode_page-3.0.patch | 14 ++----- lustre/lvfs/fsfilt_ext3.c | 2 - 3 files changed, 23 insertions(+), 41 deletions(-) diff --git a/ldiskfs/kernel_patches/patches/rhel6.3/ext4-map_inode_page-2.6.18.patch b/ldiskfs/kernel_patches/patches/rhel6.3/ext4-map_inode_page-2.6.18.patch index 87a1435..bbb4b78 100644 --- a/ldiskfs/kernel_patches/patches/rhel6.3/ext4-map_inode_page-2.6.18.patch +++ b/ldiskfs/kernel_patches/patches/rhel6.3/ext4-map_inode_page-2.6.18.patch @@ -1,14 +1,25 @@ -Index: linux-2.6.18.i386/fs/ext4/inode.c -=================================================================== ---- linux-2.6.18.i386.orig/fs/ext4/inode.c -+++ linux-2.6.18.i386/fs/ext4/inode.c -@@ -3666,3 +3666,67 @@ out_unlock: - unlock_page(page); - return ret; +diff -ur a/fs/ext4/ext4.h b/fs/ext4/ext4.h +--- a/fs/ext4/ext4.h 2013-03-14 12:04:44.105541822 -0400 ++++ b/fs/ext4/ext4.h 2013-03-14 12:09:14.264489405 -0400 +@@ -1661,6 +1661,8 @@ + extern int ext4_block_truncate_page(handle_t *handle, + struct address_space *mapping, loff_t from); + extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); ++extern int ext4_map_inode_page(struct inode *inode, struct page *page, ++ unsigned long *blocks, int create); + extern qsize_t *ext4_get_reserved_space(struct inode *inode); + extern int flush_aio_dio_completed_IO(struct inode *inode); + extern void ext4_da_update_reserve_space(struct inode *inode, +diff -ur a/fs/ext4/inode.c b/fs/ext4/inode.c +--- a/fs/ext4/inode.c 2013-03-14 12:04:44.103541330 -0400 ++++ b/fs/ext4/inode.c 2013-03-14 12:11:16.526353498 -0400 +@@ -6131,3 +6131,62 @@ + out: + return ret; } + +int ext4_map_inode_page(struct inode *inode, struct page *page, -+ unsigned long *blocks, int *created, int create) ++ unsigned long *blocks, int create) +{ + unsigned int blocksize, blocks_per_page; + unsigned long iblock; @@ -24,10 +35,6 @@ Index: linux-2.6.18.i386/fs/ext4/inode.c + blocks[i] = ext4_bmap(inode->i_mapping, iblock); + if (blocks[i] == 0) { + failed++; -+ if (created) -+ created[i] = -1; -+ } else if (created) { -+ created[i] = 0; + } + } + @@ -62,8 +69,6 @@ Index: linux-2.6.18.i386/fs/ext4/inode.c + unmap_underlying_metadata(dummy.b_bdev, + dummy.b_blocknr); + blocks[i] = dummy.b_blocknr; -+ if (created) -+ created[i] = 1; + } + +out: @@ -71,18 +76,3 @@ Index: linux-2.6.18.i386/fs/ext4/inode.c + return rc; +} +EXPORT_SYMBOL(ext4_map_inode_page); -Index: linux-2.6.18.i386/fs/ext4/super.c -=================================================================== ---- linux-2.6.18.i386.orig/fs/ext4/super.c -+++ linux-2.6.18.i386/fs/ext4/super.c -@@ -3498,6 +3498,10 @@ static void __exit exit_ext4_fs(void) - __free_page(ext4_zero_page); - } - -+int ext4_map_inode_page(struct inode *inode, struct page *page, -+ unsigned long *blocks, int *created, int create); -+EXPORT_SYMBOL(ext4_map_inode_page); -+ - MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); - MODULE_DESCRIPTION("Fourth Extended Filesystem with extents"); - MODULE_LICENSE("GPL"); diff --git a/ldiskfs/kernel_patches/patches/sles11sp2/ext4-map_inode_page-3.0.patch b/ldiskfs/kernel_patches/patches/sles11sp2/ext4-map_inode_page-3.0.patch index af03281..94eaff7 100644 --- a/ldiskfs/kernel_patches/patches/sles11sp2/ext4-map_inode_page-3.0.patch +++ b/ldiskfs/kernel_patches/patches/sles11sp2/ext4-map_inode_page-3.0.patch @@ -10,20 +10,20 @@ extern void ext4_da_update_reserve_space(struct inode *inode, int used, int quota_claim); +extern int ext4_map_inode_page(struct inode *inode, struct page *page, -+ unsigned long *blocks, int *created, -+ int create); ++ unsigned long *blocks, int created); ++ /* ioctl.c */ extern long ext4_ioctl(struct file *, unsigned int, unsigned long); extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long); --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c -@@ -5968,3 +5968,71 @@ out_unlock: +@@ -5968,3 +5968,65 @@ out_unlock: up_read(&inode->i_alloc_sem); return ret; } + +int ext4_map_inode_page(struct inode *inode, struct page *page, -+ unsigned long *blocks, int *created, int create) ++ unsigned long *blocks, int create) +{ + unsigned int blocksize, blocks_per_page; + unsigned long iblock; @@ -39,10 +39,6 @@ + blocks[i] = ext4_bmap(inode->i_mapping, iblock); + if (blocks[i] == 0) { + failed++; -+ if (created) -+ created[i] = -1; -+ } else if (created) { -+ created[i] = 0; + } + } + @@ -80,8 +76,6 @@ + unmap_underlying_metadata(inode->i_sb->s_bdev, + map.m_pblk); + blocks[i] = map.m_pblk; -+ if (created) -+ created[i] = 1; + } + +out: diff --git a/lustre/lvfs/fsfilt_ext3.c b/lustre/lvfs/fsfilt_ext3.c index 17a971b..4e15094 100644 --- a/lustre/lvfs/fsfilt_ext3.c +++ b/lustre/lvfs/fsfilt_ext3.c @@ -505,8 +505,6 @@ cleanup: return rc; } -extern int ext3_map_inode_page(struct inode *inode, struct page *page, - unsigned long *blocks, int create); int fsfilt_ext3_map_bm_inode_pages(struct inode *inode, struct page **page, int pages, unsigned long *blocks, int create) -- 1.8.3.1