X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=ldiskfs%2Fkernel_patches%2Fpatches%2Fext3-mballoc2-2.6.9-rhel4.patch;h=766cf96f03a6cdb581131e94dd5ceb2e69942bbc;hp=f80b66e83ed6a75a52bd8f4e8447ead5c442ab19;hb=58744d506d55ecbe2a36bb9d86b1e043f9535111;hpb=58e0a812631eac5c3dee3a9bf82328bc54aadf4c diff --git a/ldiskfs/kernel_patches/patches/ext3-mballoc2-2.6.9-rhel4.patch b/ldiskfs/kernel_patches/patches/ext3-mballoc2-2.6.9-rhel4.patch index f80b66e..766cf96 100644 --- a/ldiskfs/kernel_patches/patches/ext3-mballoc2-2.6.9-rhel4.patch +++ b/ldiskfs/kernel_patches/patches/ext3-mballoc2-2.6.9-rhel4.patch @@ -1,7 +1,7 @@ -Index: linux-2.6.9-full/include/linux/ext3_fs.h +Index: linux-2.6.10/include/linux/ext3_fs.h =================================================================== ---- linux-2.6.9-full.orig/include/linux/ext3_fs.h 2006-06-01 14:58:46.000000000 +0400 -+++ linux-2.6.9-full/include/linux/ext3_fs.h 2006-10-24 12:54:31.000000000 +0400 +--- linux-2.6.10.orig/include/linux/ext3_fs.h ++++ linux-2.6.10/include/linux/ext3_fs.h @@ -57,6 +57,14 @@ struct statfs; #define ext3_debug(f, a...) do {} while (0) #endif @@ -17,7 +17,7 @@ Index: linux-2.6.9-full/include/linux/ext3_fs.h /* * Special inodes numbers */ -@@ -365,6 +373,7 @@ struct ext3_inode { +@@ -362,6 +370,7 @@ struct ext3_inode { #define EXT3_MOUNT_IOPEN_NOPRIV 0x100000/* Make iopen world-readable */ #define EXT3_MOUNT_EXTENTS 0x200000/* Extents support */ #define EXT3_MOUNT_EXTDEBUG 0x400000/* Extents debug */ @@ -25,7 +25,7 @@ Index: linux-2.6.9-full/include/linux/ext3_fs.h /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */ #ifndef clear_opt -@@ -387,6 +396,14 @@ struct ext3_inode { +@@ -384,6 +393,14 @@ struct ext3_inode { #define ext3_find_first_zero_bit ext2_find_first_zero_bit #define ext3_find_next_zero_bit ext2_find_next_zero_bit @@ -40,7 +40,7 @@ Index: linux-2.6.9-full/include/linux/ext3_fs.h /* * Maximal mount counts between two filesystem checks */ -@@ -726,7 +743,8 @@ extern int ext3_bg_has_super(struct supe +@@ -723,7 +740,8 @@ extern int ext3_bg_has_super(struct supe extern unsigned long ext3_bg_num_gdb(struct super_block *sb, int group); extern int ext3_new_block (handle_t *, struct inode *, unsigned long, int *); extern void ext3_free_blocks (handle_t *, struct inode *, unsigned long, @@ -50,9 +50,9 @@ Index: linux-2.6.9-full/include/linux/ext3_fs.h extern void ext3_free_blocks_sb (handle_t *, struct super_block *, unsigned long, unsigned long, int *); extern unsigned long ext3_count_free_blocks (struct super_block *); -@@ -857,6 +874,17 @@ extern void ext3_extents_initialize_bloc - extern int ext3_ext_ioctl(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg); +@@ -854,6 +872,17 @@ extern void ext3_ext_init(struct super_b + extern void ext3_ext_release(struct super_block *); + extern void ext3_extents_initialize_blockmap(handle_t *, struct inode *); +/* mballoc.c */ +extern long ext3_mb_stats; @@ -68,10 +68,10 @@ Index: linux-2.6.9-full/include/linux/ext3_fs.h #endif /* __KERNEL__ */ /* EXT3_IOC_CREATE_INUM at bottom of file (visible to kernel and user). */ -Index: linux-2.6.9-full/include/linux/ext3_fs_sb.h +Index: linux-2.6.10/include/linux/ext3_fs_sb.h =================================================================== ---- linux-2.6.9-full.orig/include/linux/ext3_fs_sb.h 2006-05-18 23:57:04.000000000 +0400 -+++ linux-2.6.9-full/include/linux/ext3_fs_sb.h 2006-10-24 12:54:31.000000000 +0400 +--- linux-2.6.10.orig/include/linux/ext3_fs_sb.h ++++ linux-2.6.10/include/linux/ext3_fs_sb.h @@ -23,9 +23,15 @@ #define EXT_INCLUDE #include @@ -132,10 +132,10 @@ Index: linux-2.6.9-full/include/linux/ext3_fs_sb.h + [(group) & (EXT3_DESC_PER_BLOCK(sb) - 1)] + #endif /* _LINUX_EXT3_FS_SB */ -Index: linux-2.6.9-full/fs/ext3/super.c +Index: linux-2.6.10/fs/ext3/super.c =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/super.c 2006-06-01 14:58:46.000000000 +0400 -+++ linux-2.6.9-full/fs/ext3/super.c 2006-10-24 12:54:31.000000000 +0400 +--- linux-2.6.10.orig/fs/ext3/super.c ++++ linux-2.6.10/fs/ext3/super.c @@ -394,6 +394,7 @@ void ext3_put_super (struct super_block struct ext3_super_block *es = sbi->s_es; int i; @@ -182,7 +182,7 @@ Index: linux-2.6.9-full/fs/ext3/super.c default: printk (KERN_ERR "EXT3-fs: Unrecognized mount option \"%s\" " -@@ -1651,6 +1669,7 @@ static int ext3_fill_super (struct super +@@ -1647,6 +1665,7 @@ static int ext3_fill_super (struct super ext3_count_dirs(sb)); ext3_ext_init(sb); @@ -212,12 +212,12 @@ Index: linux-2.6.9-full/fs/ext3/super.c + exit_ext3_proc(); } - int ext3_prep_san_write(struct inode *inode, long *blocks, -Index: linux-2.6.9-full/fs/ext3/extents.c + int ext3_map_inode_page(struct inode *inode, struct page *page, +Index: linux-2.6.10/fs/ext3/extents.c =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/extents.c 2006-06-01 14:58:46.000000000 +0400 -+++ linux-2.6.9-full/fs/ext3/extents.c 2006-10-24 12:54:31.000000000 +0400 -@@ -777,7 +777,7 @@ cleanup: +--- linux-2.6.10.orig/fs/ext3/extents.c ++++ linux-2.6.10/fs/ext3/extents.c +@@ -780,7 +780,7 @@ cleanup: for (i = 0; i < depth; i++) { if (!ablocks[i]) continue; @@ -226,7 +226,7 @@ Index: linux-2.6.9-full/fs/ext3/extents.c } } kfree(ablocks); -@@ -1434,7 +1434,7 @@ int ext3_ext_rm_idx(handle_t *handle, st +@@ -1439,7 +1439,7 @@ int ext3_ext_rm_idx(handle_t *handle, st path->p_idx->ei_leaf); bh = sb_find_get_block(tree->inode->i_sb, path->p_idx->ei_leaf); ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf); @@ -235,7 +235,7 @@ Index: linux-2.6.9-full/fs/ext3/extents.c return err; } -@@ -1919,10 +1919,12 @@ ext3_remove_blocks(struct ext3_extents_t +@@ -1924,10 +1924,12 @@ ext3_remove_blocks(struct ext3_extents_t int needed = ext3_remove_blocks_credits(tree, ex, from, to); handle_t *handle = ext3_journal_start(tree->inode, needed); struct buffer_head *bh; @@ -249,7 +249,7 @@ Index: linux-2.6.9-full/fs/ext3/extents.c if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) { /* tail removal */ unsigned long num, start; -@@ -1934,7 +1936,7 @@ ext3_remove_blocks(struct ext3_extents_t +@@ -1939,7 +1941,7 @@ ext3_remove_blocks(struct ext3_extents_t bh = sb_find_get_block(tree->inode->i_sb, start + i); ext3_forget(handle, 0, tree->inode, bh, start + i); } @@ -258,10 +258,10 @@ Index: linux-2.6.9-full/fs/ext3/extents.c } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) { printk("strange request: removal %lu-%lu from %u:%u\n", from, to, ex->ee_block, ex->ee_len); -Index: linux-2.6.9-full/fs/ext3/inode.c +Index: linux-2.6.10/fs/ext3/inode.c =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/inode.c 2006-06-01 14:58:46.000000000 +0400 -+++ linux-2.6.9-full/fs/ext3/inode.c 2006-10-24 12:54:31.000000000 +0400 +--- linux-2.6.10.orig/fs/ext3/inode.c ++++ linux-2.6.10/fs/ext3/inode.c @@ -572,7 +572,7 @@ static int ext3_alloc_branch(handle_t *h ext3_journal_forget(handle, branch[i].bh); } @@ -280,7 +280,7 @@ Index: linux-2.6.9-full/fs/ext3/inode.c return err; } -@@ -1831,7 +1831,7 @@ ext3_clear_blocks(handle_t *handle, stru +@@ -1833,7 +1833,7 @@ ext3_clear_blocks(handle_t *handle, stru } } @@ -289,7 +289,7 @@ Index: linux-2.6.9-full/fs/ext3/inode.c } /** -@@ -2004,7 +2004,7 @@ static void ext3_free_branches(handle_t +@@ -2006,7 +2006,7 @@ static void ext3_free_branches(handle_t ext3_journal_test_restart(handle, inode); } @@ -298,10 +298,10 @@ Index: linux-2.6.9-full/fs/ext3/inode.c if (parent_bh) { /* -Index: linux-2.6.9-full/fs/ext3/balloc.c +Index: linux-2.6.10/fs/ext3/balloc.c =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/balloc.c 2006-03-10 18:20:03.000000000 +0300 -+++ linux-2.6.9-full/fs/ext3/balloc.c 2006-10-24 12:54:31.000000000 +0400 +--- linux-2.6.10.orig/fs/ext3/balloc.c ++++ linux-2.6.10/fs/ext3/balloc.c @@ -79,7 +79,7 @@ struct ext3_group_desc * ext3_get_group_ * * Return buffer_head on success or NULL in case of failure. @@ -311,7 +311,7 @@ Index: linux-2.6.9-full/fs/ext3/balloc.c read_block_bitmap(struct super_block *sb, unsigned int block_group) { struct ext3_group_desc * desc; -@@ -451,24 +451,6 @@ error_return: +@@ -449,24 +449,6 @@ error_return: return; } @@ -336,7 +336,7 @@ Index: linux-2.6.9-full/fs/ext3/balloc.c /* * For ext3 allocations, we must not reuse any blocks which are * allocated in the bitmap buffer's "last committed data" copy. This -@@ -1131,7 +1113,7 @@ int ext3_should_retry_alloc(struct super +@@ -1129,7 +1111,7 @@ int ext3_should_retry_alloc(struct super * bitmap, and then for any free bit if that fails. * This function also updates quota and i_blocks field. */ @@ -345,11 +345,11 @@ Index: linux-2.6.9-full/fs/ext3/balloc.c unsigned long goal, int *errp) { struct buffer_head *bitmap_bh = NULL; -Index: linux-2.6.9-full/fs/ext3/xattr.c +Index: linux-2.6.10/fs/ext3/xattr.c =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/xattr.c 2006-05-18 23:57:04.000000000 +0400 -+++ linux-2.6.9-full/fs/ext3/xattr.c 2006-10-24 12:54:31.000000000 +0400 -@@ -1281,7 +1281,7 @@ ext3_xattr_set_handle2(handle_t *handle, +--- linux-2.6.10.orig/fs/ext3/xattr.c ++++ linux-2.6.10/fs/ext3/xattr.c +@@ -1287,7 +1287,7 @@ ext3_xattr_set_handle2(handle_t *handle, new_bh = sb_getblk(sb, block); if (!new_bh) { getblk_failed: @@ -358,7 +358,7 @@ Index: linux-2.6.9-full/fs/ext3/xattr.c error = -EIO; goto cleanup; } -@@ -1328,7 +1328,7 @@ getblk_failed: +@@ -1334,7 +1334,7 @@ getblk_failed: if (ce) mb_cache_entry_free(ce); ea_bdebug(old_bh, "freeing"); @@ -367,7 +367,7 @@ Index: linux-2.6.9-full/fs/ext3/xattr.c /* ext3_forget() calls bforget() for us, but we let our caller release old_bh, so we need to -@@ -1427,7 +1427,7 @@ ext3_xattr_delete_inode(handle_t *handle +@@ -1433,7 +1433,7 @@ ext3_xattr_delete_inode(handle_t *handle if (HDR(bh)->h_refcount == cpu_to_le32(1)) { if (ce) mb_cache_entry_free(ce); @@ -376,13 +376,13 @@ Index: linux-2.6.9-full/fs/ext3/xattr.c get_bh(bh); ext3_forget(handle, 1, inode, bh, EXT3_I(inode)->i_file_acl); } else { -Index: linux-2.6.9-full/fs/ext3/mballoc.c +Index: linux-2.6.10/fs/ext3/mballoc.c =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/mballoc.c 2006-10-23 18:07:54.821533176 +0400 -+++ linux-2.6.9-full/fs/ext3/mballoc.c 2006-10-24 13:00:56.000000000 +0400 -@@ -0,0 +1,2725 @@ +--- /dev/null ++++ linux-2.6.10/fs/ext3/mballoc.c +@@ -0,0 +1,2728 @@ +/* -+ * Copyright (c) 2003-2005, Cluster File Systems, Inc, info@clusterfs.com ++ * Copyright 2008 Sun Microsystems, Inc. + * Written by Alex Tomas + * + * This program is free software; you can redistribute it and/or modify @@ -1353,8 +1353,8 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c + struct ext3_free_extent *gex = &ac->ac_g_ex; + + J_ASSERT(ex->fe_len > 0); -+ J_ASSERT(ex->fe_len < (1 << ac->ac_sb->s_blocksize_bits) * 8); -+ J_ASSERT(ex->fe_start < (1 << ac->ac_sb->s_blocksize_bits) * 8); ++ J_ASSERT(ex->fe_len < EXT3_BLOCKS_PER_GROUP(ac->ac_sb)); ++ J_ASSERT(ex->fe_start < EXT3_BLOCKS_PER_GROUP(ac->ac_sb)); + + ac->ac_found++; + @@ -1548,8 +1548,8 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c + i = e3b->bd_info->bb_first_free; + + while (free && ac->ac_status == AC_STATUS_CONTINUE) { -+ i = mb_find_next_zero_bit(bitmap, sb->s_blocksize * 8, i); -+ if (i >= sb->s_blocksize * 8) { ++ i = mb_find_next_zero_bit(bitmap, EXT3_BLOCKS_PER_GROUP(sb), i); ++ if (i >= EXT3_BLOCKS_PER_GROUP(sb)) { + J_ASSERT(free == 0); + break; + } @@ -1587,7 +1587,7 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c + i = (i - le32_to_cpu(sbi->s_es->s_first_data_block)) % + EXT3_BLOCKS_PER_GROUP(sb); + -+ while (i < sb->s_blocksize * 8) { ++ while (i < EXT3_BLOCKS_PER_GROUP(sb)) { + if (!mb_test_bit(i, bitmap)) { + max = mb_find_extent(e3b, 0, i, sbi->s_stripe, &ex); + if (max >= sbi->s_stripe) { @@ -2261,7 +2261,8 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c + spin_lock_init(&sbi->s_mb_history_lock); + i = sbi->s_mb_history_max * sizeof(struct ext3_mb_history); + sbi->s_mb_history = kmalloc(i, GFP_KERNEL); -+ memset(sbi->s_mb_history, 0, i); ++ if (likely(sbi->s_mb_history != NULL)) ++ memset(sbi->s_mb_history, 0, i); + /* if we can't allocate history, then we simple won't use it */ +} + @@ -2272,7 +2273,7 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c + struct ext3_sb_info *sbi = EXT3_SB(sb); + struct ext3_mb_history h; + -+ if (likely(sbi->s_mb_history == NULL)) ++ if (unlikely(sbi->s_mb_history == NULL)) + return; + + h.pid = current->pid; @@ -3106,10 +3107,12 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c + remove_proc_entry(EXT3_MB_ORDER2_REQ, proc_root_ext3); + remove_proc_entry(EXT3_ROOT, proc_root_fs); +} -Index: linux-2.6.9-full/fs/ext3/Makefile ++ ++EXPORT_SYMBOL(ext3_free_blocks); +Index: linux-2.6.10/fs/ext3/Makefile =================================================================== ---- linux-2.6.9-full.orig/fs/ext3/Makefile 2006-06-01 14:58:46.000000000 +0400 -+++ linux-2.6.9-full/fs/ext3/Makefile 2006-10-24 12:54:31.000000000 +0400 +--- linux-2.6.10.orig/fs/ext3/Makefile ++++ linux-2.6.10/fs/ext3/Makefile @@ -6,7 +6,7 @@ obj-$(CONFIG_EXT3_FS) += ext3.o ext3-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \