From c0fbeffbe43cc6af243451371d242a67544b9f62 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 14 Sep 2003 15:05:21 +0000 Subject: [PATCH] - extents initialization routine is called upon mount now NOTE: tested on 2.4.18-67chaos (dual P3) with dbench/fsx/etc for several hours --- .../patches/ext3-extents-2.4.18-chaos.patch | 82 ++++++++++------------ 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch index d0c315b..baddf66 100644 --- a/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch +++ b/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch @@ -1,17 +1,16 @@ fs/ext3/Makefile | 3 - fs/ext3/extents.c | 1573 +++++++++++++++++++++++++++++++++++++++++++++ + fs/ext3/extents.c | 1572 +++++++++++++++++++++++++++++++++++++++++++++ fs/ext3/ialloc.c | 4 fs/ext3/inode.c | 26 - fs/ext3/super.c | 9 + fs/ext3/super.c | 8 include/linux/ext3_fs.h | 18 include/linux/ext3_fs_i.h | 4 include/linux/ext3_fs_sb.h | 10 - 8 files changed, 1641 insertions(+), 6 deletions(-) + 8 files changed, 1639 insertions(+), 6 deletions(-) -diff -puN /dev/null fs/ext3/extents.c --- /dev/null 2003-01-30 13:24:37.000000000 +0300 -+++ linux-2.4.18-chaos-alexey/fs/ext3/extents.c 2003-08-25 21:11:58.000000000 +0400 -@@ -0,0 +1,1573 @@ ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/extents.c 2003-09-14 00:42:28.000000000 +0400 +@@ -0,0 +1,1572 @@ +/* + * + * linux/fs/ext3/extents.c @@ -1101,6 +1100,7 @@ diff -puN /dev/null fs/ext3/extents.c + ext3_ext_show_leaf(inode, path); + bh_result->b_dev = inode->i_dev; + bh_result->b_blocknr = newblock; ++ bh_result->b_state |= (1UL << BH_Mapped); +out2: + ext3_ext_drop_refs(inode, path); + kfree(path); @@ -1347,7 +1347,6 @@ diff -puN /dev/null fs/ext3/extents.c + handle_t *handle; + int i, depth, err = 0; + -+ down(&EXT3_I(inode)->i_ext_sem); + ext3_ext_collect_stats(inode); + + /* @@ -1360,10 +1359,8 @@ diff -puN /dev/null fs/ext3/extents.c + } else { + page = grab_cache_page(mapping, + inode->i_size >> PAGE_CACHE_SHIFT); -+ if (!page) { -+ up(&EXT3_I(inode)->i_ext_sem); ++ if (!page) + return; -+ } + } + + /* @@ -1378,7 +1375,6 @@ diff -puN /dev/null fs/ext3/extents.c + unlock_page(page); + page_cache_release(page); + } -+ up(&EXT3_I(inode)->i_ext_sem); + return; + } + @@ -1386,6 +1382,8 @@ diff -puN /dev/null fs/ext3/extents.c + ext3_block_truncate_page(handle, mapping, inode->i_size, page, + inode->i_sb->s_blocksize); + ++ down(&EXT3_I(inode)->i_ext_sem); ++ + /* + * TODO: optimization is possible here + * probably we need not scaning at all, @@ -1585,10 +1583,9 @@ diff -puN /dev/null fs/ext3/extents.c + sbi->s_ext_blocks / sbi->s_ext_extents); +} + -diff -puN fs/ext3/ialloc.c~ext3-extents fs/ext3/ialloc.c ---- linux-2.4.18-chaos/fs/ext3/ialloc.c~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/fs/ext3/ialloc.c 2003-08-25 21:12:14.000000000 +0400 -@@ -571,6 +571,10 @@ repeat: +--- linux-2.4.18-chaos-uml/fs/ext3/ialloc.c~ext3-extents-2.4.18-chaos 2003-09-09 16:57:40.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/ialloc.c 2003-09-14 00:23:18.000000000 +0400 +@@ -573,6 +573,10 @@ repeat: ei->i_prealloc_count = 0; #endif ei->i_block_group = i; @@ -1599,9 +1596,8 @@ diff -puN fs/ext3/ialloc.c~ext3-extents fs/ext3/ialloc.c if (ei->i_flags & EXT3_SYNC_FL) inode->i_flags |= S_SYNC; -diff -puN fs/ext3/inode.c~ext3-extents fs/ext3/inode.c ---- linux-2.4.18-chaos/fs/ext3/inode.c~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/fs/ext3/inode.c 2003-08-25 20:09:59.000000000 +0400 +--- linux-2.4.18-chaos-uml/fs/ext3/inode.c~ext3-extents-2.4.18-chaos 2003-09-09 16:57:41.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/inode.c 2003-09-14 00:56:08.000000000 +0400 @@ -842,6 +842,15 @@ changed: goto reread; } @@ -1654,16 +1650,16 @@ diff -puN fs/ext3/inode.c~ext3-extents fs/ext3/inode.c struct address_space *mapping, loff_t from, struct page *page, unsigned blocksize) { -@@ -2040,6 +2049,9 @@ void ext3_truncate(struct inode * inode) - */ - ei->i_disksize = inode->i_size; +@@ -1998,6 +2007,9 @@ void ext3_truncate(struct inode * inode) + + ext3_discard_prealloc(inode); + if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL) + return ext3_ext_truncate(inode); + - /* - * From here we block out all ext3_get_block() callers who want to - * modify the block allocation tree. + blocksize = inode->i_sb->s_blocksize; + last_block = (inode->i_size + blocksize-1) + >> EXT3_BLOCK_SIZE_BITS(inode->i_sb); @@ -2436,6 +2448,8 @@ void ext3_read_inode(struct inode * inod ei->i_prealloc_count = 0; #endif @@ -1691,9 +1687,8 @@ diff -puN fs/ext3/inode.c~ext3-extents fs/ext3/inode.c if (ext3_should_journal_data(inode)) ret = 3 * (bpp + indirects) + 2; else -diff -puN fs/ext3/Makefile~ext3-extents fs/ext3/Makefile ---- linux-2.4.18-chaos/fs/ext3/Makefile~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/fs/ext3/Makefile 2003-08-25 20:09:59.000000000 +0400 +--- linux-2.4.18-chaos-uml/fs/ext3/Makefile~ext3-extents-2.4.18-chaos 2003-09-09 16:57:40.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/Makefile 2003-09-09 16:57:41.000000000 +0400 @@ -12,7 +12,8 @@ O_TARGET := ext3.o export-objs := ext3-exports.o @@ -1704,9 +1699,8 @@ diff -puN fs/ext3/Makefile~ext3-extents fs/ext3/Makefile obj-m := $(O_TARGET) include $(TOPDIR)/Rules.make -diff -puN fs/ext3/super.c~ext3-extents fs/ext3/super.c ---- linux-2.4.18-chaos/fs/ext3/super.c~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/fs/ext3/super.c 2003-08-25 20:09:59.000000000 +0400 +--- linux-2.4.18-chaos-uml/fs/ext3/super.c~ext3-extents-2.4.18-chaos 2003-09-09 16:57:41.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/super.c 2003-09-13 23:52:17.000000000 +0400 @@ -619,6 +619,7 @@ void ext3_put_super (struct super_block kdev_t j_dev = sbi->s_journal->j_dev; int i; @@ -1728,18 +1722,16 @@ diff -puN fs/ext3/super.c~ext3-extents fs/ext3/super.c if (!strcmp (this_char, "bsddf")) clear_opt (*mount_options, MINIX_DF); else if (!strcmp (this_char, "nouid32")) { -@@ -1711,6 +1718,8 @@ static int ext3_create_journal(struct su - /* Make sure we flush the recovery flag to disk. */ - ext3_commit_super(sb, es, 1); - +@@ -1468,6 +1475,7 @@ struct super_block * ext3_read_super (st + test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal": + test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered": + "writeback"); + ext3_ext_init(sb); -+ - return 0; - } -diff -puN include/linux/ext3_fs.h~ext3-extents include/linux/ext3_fs.h ---- linux-2.4.18-chaos/include/linux/ext3_fs.h~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs.h 2003-08-25 21:12:14.000000000 +0400 + return sb; + +--- linux-2.4.18-chaos-uml/include/linux/ext3_fs.h~ext3-extents-2.4.18-chaos 2003-09-09 16:57:40.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs.h 2003-09-09 16:57:41.000000000 +0400 @@ -183,6 +183,7 @@ struct ext3_group_desc #define EXT3_IMAGIC_FL 0x00002000 /* AFS directory */ #define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */ @@ -1793,9 +1785,8 @@ diff -puN include/linux/ext3_fs.h~ext3-extents include/linux/ext3_fs.h #endif /* __KERNEL__ */ -diff -puN include/linux/ext3_fs_i.h~ext3-extents include/linux/ext3_fs_i.h ---- linux-2.4.18-chaos/include/linux/ext3_fs_i.h~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs_i.h 2003-08-25 20:09:59.000000000 +0400 +--- linux-2.4.18-chaos-uml/include/linux/ext3_fs_i.h~ext3-extents-2.4.18-chaos 2001-11-22 22:46:19.000000000 +0300 ++++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs_i.h 2003-09-09 16:57:41.000000000 +0400 @@ -73,6 +73,10 @@ struct ext3_inode_info { * by other means, so we have truncate_sem. */ @@ -1807,9 +1798,8 @@ diff -puN include/linux/ext3_fs_i.h~ext3-extents include/linux/ext3_fs_i.h }; #endif /* _LINUX_EXT3_FS_I */ -diff -puN include/linux/ext3_fs_sb.h~ext3-extents include/linux/ext3_fs_sb.h ---- linux-2.4.18-chaos/include/linux/ext3_fs_sb.h~ext3-extents 2003-08-25 20:09:59.000000000 +0400 -+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs_sb.h 2003-08-25 20:09:59.000000000 +0400 +--- linux-2.4.18-chaos-uml/include/linux/ext3_fs_sb.h~ext3-extents-2.4.18-chaos 2003-09-09 16:57:40.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs_sb.h 2003-09-09 16:57:41.000000000 +0400 @@ -84,6 +84,16 @@ struct ext3_sb_info { wait_queue_head_t s_delete_thread_queue; wait_queue_head_t s_delete_waiter_queue; -- 1.8.3.1