Whamcloud - gitweb
LU-2748 fsfilt: ext4_map_inode_page in osd and ldisk out of sync
authorJames Simmons <uja.ornl@gmail.com>
Thu, 14 Mar 2013 17:33:15 +0000 (13:33 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 20 Mar 2013 18:36:10 +0000 (14:36 -0400)
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 <uja.ornl@gmail.com>
Change-Id: I9b5522ce187f06983f328408cbcd0ce077e72ea1
Reviewed-on: http://review.whamcloud.com/5708
Tested-by: Hudson
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Mike Pershin <mike.pershin@intel.com>
ldiskfs/kernel_patches/patches/rhel6.3/ext4-map_inode_page-2.6.18.patch
ldiskfs/kernel_patches/patches/sles11sp2/ext4-map_inode_page-3.0.patch
lustre/lvfs/fsfilt_ext3.c

index 87a1435..bbb4b78 100644 (file)
@@ -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");
index af03281..94eaff7 100644 (file)
  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;
 +              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:
index 17a971b..4e15094 100644 (file)
@@ -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)