- ext4-64-bit-divide-fix-fix.patch removed from -mm tree
The patch titled ext4-64-bit-divide-fix-fix has been removed from the -mm tree. Its filename is ext4-64-bit-divide-fix-fix.patch This patch was dropped because it was folded into ext4-64-bit-divide-fix.patch -- Subject: ext4-64-bit-divide-fix-fix From: Andrew Morton [EMAIL PROTECTED] Give up. Hope that ext4_fsblk_t is compatiblee with u64 for all do_div() implementations. Cc: linux-ext4@vger.kernel.org Signed-off-by: Andrew Morton [EMAIL PROTECTED] --- fs/ext4/balloc.c |2 +- fs/ext4/ialloc.c |4 ++-- fs/ext4/super.c |4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff -puN fs/ext4/balloc.c~ext4-64-bit-divide-fix-fix fs/ext4/balloc.c --- a/fs/ext4/balloc.c~ext4-64-bit-divide-fix-fix +++ a/fs/ext4/balloc.c @@ -34,7 +34,7 @@ void ext4_get_group_no_and_offset(struct ext4_grpblk_t offset; blocknr = blocknr - le32_to_cpu(es-s_first_data_block); - offset = do_div((u64)blocknr, EXT4_BLOCKS_PER_GROUP(sb)); + offset = do_div(blocknr, EXT4_BLOCKS_PER_GROUP(sb)); if (offsetp) *offsetp = offset; if (blockgrpp) diff -puN fs/ext4/ialloc.c~ext4-64-bit-divide-fix-fix fs/ext4/ialloc.c --- a/fs/ext4/ialloc.c~ext4-64-bit-divide-fix-fix +++ a/fs/ext4/ialloc.c @@ -275,7 +275,7 @@ static int find_group_orlov(struct super avefreei = freei / ngroups; freeb = percpu_counter_read_positive(sbi-s_freeblocks_counter); avefreeb = freeb; - do_div((u64)avefreeb, ngroups); + do_div(avefreeb, ngroups); ndirs = percpu_counter_read_positive(sbi-s_dirs_counter); if ((parent == sb-s_root-d_inode) || @@ -305,7 +305,7 @@ static int find_group_orlov(struct super } blocks_per_dir = ext4_blocks_count(es) - freeb; - do_div((u64)blocks_per_dir, ndirs); + do_div(blocks_per_dir, ndirs); max_dirs = ndirs / ngroups + inodes_per_group / 16; min_inodes = avefreei - inodes_per_group / 4; diff -puN fs/ext4/super.c~ext4-64-bit-divide-fix-fix fs/ext4/super.c --- a/fs/ext4/super.c~ext4-64-bit-divide-fix-fix +++ a/fs/ext4/super.c @@ -1485,7 +1485,7 @@ static int ext4_fill_super (struct super */ if (blocksize != EXT4_MIN_BLOCK_SIZE) { logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; - offset = do_div((u64)logic_sb_block, blocksize); + offset = do_div(logic_sb_block, blocksize); } else { logic_sb_block = sb_block; } @@ -1591,7 +1591,7 @@ static int ext4_fill_super (struct super brelse (bh); sb_set_blocksize(sb, blocksize); logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; - offset = do_div((u64)logic_sb_block, blocksize); + offset = do_div(logic_sb_block, blocksize); bh = sb_bread(sb, logic_sb_block); if (!bh) { printk(KERN_ERR _ Patches currently in -mm which might be from [EMAIL PROTECTED] are origin.patch revert-nvidiafb-use-generic-ddc-reading.patch ext4_blk_type_from_sector_t_to_ulonglong.patch ext4-uninline-ext4_get_group_no_and_offset.patch ext4-64-bit-divide-fix.patch ext4-64-bit-divide-fix-fix.patch ext4-rename-logic_sb_block.patch ext4-whitespace-cleanups.patch git-acpi.patch i386-acpi-build-fix.patch acpi-asus-s3-resume-fix.patch sony_apci-resume.patch git-cifs-fixup.patch cifs-kconfig-dont-select-connector.patch git-dvb-build-fix.patch w1-kconfig-fix.patch git-geode-fixup.patch git-gfs2.patch git-infiniband.patch git-input-fixup.patch git-libata-all-fixup.patch mtd-maps-support-for-bios-flash-chips-on-intel-esb2-southbridge.patch git-netdev-all.patch libphy-dont-do-that.patch ibmveth-irq-fix.patch drivers-net-ns83820c-add-paramter-to-disable-auto.patch git-pcmcia-fixup.patch git-serial-fixup.patch git-scsi-target-fixup.patch git-scsi-target-vs-git-block.patch fix-gregkh-usb-usbatm-fix-tiny-race.patch xpad-dance-pad-support.patch git-watchdog.patch x86_64-dump_trace-atomicity-fix.patch spinlock-debug-all-cpu-backtrace.patch spinlock-debug-all-cpu-backtrace-fix.patch spinlock-debug-all-cpu-backtrace-fix-2.patch spinlock-debug-all-cpu-backtrace-fix-3.patch xfs-rename-uio_read.patch touchkit-ps-2-touchscreen-driver-regs-fix.patch direct-io-sync-and-invalidate-file-region-when-falling-back-to-buffered-write-fixes.patch get-rid-of-zone_table.patch new-scheme-to-preempt-swap-token-tidy.patch radix-tree-rcu-lockless-readside.patch acx1xx-wireless-driver.patch swsusp-add-resume_offset-command-line-parameter-rev-2.patch deprecate-smbfs-in-favour-of-cifs.patch edac-new-opteron-athlon64-memory-controller-driver.patch add-address_space_operationsbatch_write.patch add-config_headers_check-option-to-automatically-run-make-headers_check-nobble.patch kbuild-dont-put-temp-files-in-the-source-tree.patch grow_buffers-infinite-loop-fix.patch invalidate_inode_pages2_range-debug.patch
[patch 035/100] ext4: rename logic_sb_block
From: Andrew Morton [EMAIL PROTECTED] I assume this means logical sb block. So call it that. I still don't understand the name though. A block is a block. What's different about this one? Cc: linux-ext4@vger.kernel.org Signed-off-by: Andrew Morton [EMAIL PROTECTED] --- fs/ext4/super.c | 23 +++ 1 file changed, 11 insertions(+), 12 deletions(-) diff -puN fs/ext4/super.c~ext4-rename-logic_sb_block fs/ext4/super.c --- a/fs/ext4/super.c~ext4-rename-logic_sb_block +++ a/fs/ext4/super.c @@ -1423,8 +1423,7 @@ static loff_t ext4_max_size(int bits) } static ext4_fsblk_t descriptor_loc(struct super_block *sb, - ext4_fsblk_t logic_sb_block, - int nr) + ext4_fsblk_t logical_sb_block, int nr) { struct ext4_sb_info *sbi = EXT4_SB(sb); unsigned long bg, first_meta_bg; @@ -1434,7 +1433,7 @@ static ext4_fsblk_t descriptor_loc(struc if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_META_BG) || nr first_meta_bg) - return (logic_sb_block + nr + 1); + return logical_sb_block + nr + 1; bg = sbi-s_desc_per_block * nr; if (ext4_bg_has_super(sb, bg)) has_super = 1; @@ -1449,7 +1448,7 @@ static int ext4_fill_super (struct super struct ext4_sb_info *sbi; ext4_fsblk_t block; ext4_fsblk_t sb_block = get_sb_block(data); - ext4_fsblk_t logic_sb_block; + ext4_fsblk_t logical_sb_block; unsigned long offset = 0; unsigned int journal_inum = 0; unsigned long journal_devnum = 0; @@ -1484,13 +1483,13 @@ static int ext4_fill_super (struct super * block sizes. We need to calculate the offset from buffer start. */ if (blocksize != EXT4_MIN_BLOCK_SIZE) { - logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; - offset = do_div(logic_sb_block, blocksize); + logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; + offset = do_div(logical_sb_block, blocksize); } else { - logic_sb_block = sb_block; + logical_sb_block = sb_block; } - if (!(bh = sb_bread(sb, logic_sb_block))) { + if (!(bh = sb_bread(sb, logical_sb_block))) { printk (KERN_ERR EXT4-fs: unable to read superblock\n); goto out_fail; } @@ -1590,9 +1589,9 @@ static int ext4_fill_super (struct super brelse (bh); sb_set_blocksize(sb, blocksize); - logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; - offset = do_div(logic_sb_block, blocksize); - bh = sb_bread(sb, logic_sb_block); + logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; + offset = do_div(logical_sb_block, blocksize); + bh = sb_bread(sb, logical_sb_block); if (!bh) { printk(KERN_ERR EXT4-fs: Can't read superblock on 2nd try.\n); @@ -1711,7 +1710,7 @@ static int ext4_fill_super (struct super bgl_lock_init(sbi-s_blockgroup_lock); for (i = 0; i db_count; i++) { - block = descriptor_loc(sb, logic_sb_block, i); + block = descriptor_loc(sb, logical_sb_block, i); sbi-s_group_desc[i] = sb_bread(sb, block); if (!sbi-s_group_desc[i]) { printk (KERN_ERR EXT4-fs: _ - To unsubscribe from this list: send the line unsubscribe linux-ext4 in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: 2.6.18-mm2: ext3 BUG?
On Sun, 2006-10-08 08:33:30 +0200, Jan-Benedict Glaw [EMAIL PROTECTED] wrote: On Thu, 2006-10-05 17:14:28 -0700, Andrew Morton [EMAIL PROTECTED] wrote: In one case, there was a test case mentioned. I'll run that on my affected box in a non-productive LV, like this: dd bs=1M count=200 if=/dev/zero of=test0 while :; do echo cp 0-1; cp test0 test1 || break echo cp 1-2; cp test1 test2 || break echo cp 2-3; cp test2 test3 || break echo cp 3-4; cp test3 test4 || break echo od 0 ; od test0 || break echo rm 1; rm test1 || break echo rm 2; rm test2 || break echo rm 3; rm test3 || break echo rm 4; rm test4 || break done While I could reproduce it with a 200MB file, it seems I can't break it with a 10MB file. Hmm, I was running the test for several ours without any problem... The kernel is 2.6.17.6, ext3 in ordered data mode, standard SATA disk. I'm now running it again and trying my luck ;). What is your testing environment? Honza -- Jan Kara [EMAIL PROTECTED] SuSE CR Labs - To unsubscribe from this list: send the line unsubscribe linux-ext4 in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: 2.6.19-rc1-mm1 (ext4 problem ?)
On Wed, 11 Oct 2006 08:02:14 -0700 Badari Pulavarty [EMAIL PROTECTED] wrote: On Tue, 2006-10-10 at 21:01 -0700, Andrew Morton wrote: Andrew Morton wrote: ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.19-rc1/2.6.19-rc1-mm1/ - Added the ext4 filesystem. Quick usage instructions: - Grab updated e2fsprogs from ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs-interim/ ext4 did not survive my simple stress tests. I ran 4 copies of fsx on ext4dev filesystem (without extents) + 4 copies of fsx on ext4dev (with extents). Machine hung after running for few hours. There are 4 fsx sigsegv messages on the console and the last message on the console is do_IRQ: 0.62 No irq handler for vector Quite a few people are hitting that - it's related to Eric's recent IRQ/APIC-routing changes. I don't know why that would cause fsx to get a sigsegv though. - To unsubscribe from this list: send the line unsubscribe linux-ext4 in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Directories 2GB
David Chinner wrote: On Tue, Oct 10, 2006 at 10:19:04AM +0100, Christoph Hellwig wrote: On Mon, Oct 09, 2006 at 09:15:28PM -0500, Steve Lord wrote: Hi Dave, My recollection is that it used to default to on, it was disabled because it needs to map the buffer into a single contiguous chunk of kernel memory. This was placing a lot of pressure on the memory remapping code, so we made it not default to on as reworking the code to deal with non contig memory was looking like a major effort. Exactly. The code works but tends to go OOM pretty fast at least when the dir blocksize code is bigger than the page size. I should give the code a spin on my ppc box with 64k pages if it works better there. The pagebuf code doesn't use high-order allocations anymore; it uses scatter lists and remapping to allow physically discontiguous pages in a multi-page buffer. That is, the pages are sourced via find_or_create_page() from the address space of the backing device, and then mapped via vmap() to provide a virtually contigous mapping of the multi-page buffer. So I don't think this problem exists anymore... I was not referring to high order allocations here, but the overhead of doing address space remapping every time a directory is accessed. Steve - To unsubscribe from this list: send the line unsubscribe linux-ext4 in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC] [PATCH] Documentation/filesystems/ext4.txt
On Oct 10, 2006 15:02 -0500, Dave Kleikamp wrote: + - It's still mke2fs -j /dev/hda1 I would suggest mke2fs -j -O dir_index -I 256 /dev/XXX to be more representative of what will be used in the future. +programs:http://e2fsprogs.sourceforge.net/ + http://ext2resize.sourceforge.net You should likely remove ext2resize from this list, it hasn't got any support for extent-mapped files. Cheers, Andreas -- Andreas Dilger Principal Software Engineer Cluster File Systems, Inc. - To unsubscribe from this list: send the line unsubscribe linux-ext4 in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
- ext4-64-bit-divide-fix.patch removed from -mm tree
The patch titled ext4 64 bit divide fix has been removed from the -mm tree. Its filename is ext4-64-bit-divide-fix.patch This patch was dropped because it was merged into mainline or a subsystem tree -- Subject: ext4 64 bit divide fix From: Andrew Morton [EMAIL PROTECTED] With CONFIG_LBD=n, sector_div() expands to a plain old divide. But ext4 is _not_ passing in a sector_t as the first argument, so... fs/built-in.o: In function `ext4_get_group_no_and_offset': fs/ext4/balloc.c:39: undefined reference to `__umoddi3' fs/ext4/balloc.c:41: undefined reference to `__udivdi3' fs/built-in.o: In function `find_group_orlov': fs/ext4/ialloc.c:278: undefined reference to `__udivdi3' fs/built-in.o: In function `ext4_fill_super': fs/ext4/super.c:1488: undefined reference to `__udivdi3' fs/ext4/super.c:1488: undefined reference to `__umoddi3' fs/ext4/super.c:1594: undefined reference to `__udivdi3' fs/ext4/super.c:1601: undefined reference to `__umoddi3' Fix that up by calling do_div() directly. Also cast the arg to u64. do_div() is only defined on u64, and ext4_fsblk_t is supposed to be opaque. Note especially the changes to find_group_orlov(). It was attempting to do do_div(int, unsigned long long); which is royally screwed up. Switched it to plain old divide. Cc: linux-ext4@vger.kernel.org Signed-off-by: Andrew Morton [EMAIL PROTECTED] --- fs/ext4/balloc.c |2 +- fs/ext4/ialloc.c |6 +++--- fs/ext4/super.c |4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff -puN fs/ext4/balloc.c~ext4-64-bit-divide-fix fs/ext4/balloc.c --- a/fs/ext4/balloc.c~ext4-64-bit-divide-fix +++ a/fs/ext4/balloc.c @@ -34,7 +34,7 @@ void ext4_get_group_no_and_offset(struct ext4_grpblk_t offset; blocknr = blocknr - le32_to_cpu(es-s_first_data_block); -offset = sector_div(blocknr, EXT4_BLOCKS_PER_GROUP(sb)); + offset = do_div(blocknr, EXT4_BLOCKS_PER_GROUP(sb)); if (offsetp) *offsetp = offset; if (blockgrpp) diff -puN fs/ext4/ialloc.c~ext4-64-bit-divide-fix fs/ext4/ialloc.c --- a/fs/ext4/ialloc.c~ext4-64-bit-divide-fix +++ a/fs/ext4/ialloc.c @@ -275,7 +275,7 @@ static int find_group_orlov(struct super avefreei = freei / ngroups; freeb = percpu_counter_read_positive(sbi-s_freeblocks_counter); avefreeb = freeb; - sector_div(avefreeb, ngroups); + do_div(avefreeb, ngroups); ndirs = percpu_counter_read_positive(sbi-s_dirs_counter); if ((parent == sb-s_root-d_inode) || @@ -305,14 +305,14 @@ static int find_group_orlov(struct super } blocks_per_dir = ext4_blocks_count(es) - freeb; - sector_div(blocks_per_dir, ndirs); + do_div(blocks_per_dir, ndirs); max_dirs = ndirs / ngroups + inodes_per_group / 16; min_inodes = avefreei - inodes_per_group / 4; min_blocks = avefreeb - EXT4_BLOCKS_PER_GROUP(sb) / 4; max_debt = EXT4_BLOCKS_PER_GROUP(sb); - sector_div(max_debt, max(blocks_per_dir, (ext4_fsblk_t)BLOCK_COST)); + max_debt /= max_t(int, blocks_per_dir, BLOCK_COST); if (max_debt * INODE_COST inodes_per_group) max_debt = inodes_per_group / INODE_COST; if (max_debt 255) diff -puN fs/ext4/super.c~ext4-64-bit-divide-fix fs/ext4/super.c --- a/fs/ext4/super.c~ext4-64-bit-divide-fix +++ a/fs/ext4/super.c @@ -1485,7 +1485,7 @@ static int ext4_fill_super (struct super */ if (blocksize != EXT4_MIN_BLOCK_SIZE) { logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; - offset = sector_div(logic_sb_block, blocksize); + offset = do_div(logic_sb_block, blocksize); } else { logic_sb_block = sb_block; } @@ -1591,7 +1591,7 @@ static int ext4_fill_super (struct super brelse (bh); sb_set_blocksize(sb, blocksize); logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE; - offset = sector_div(logic_sb_block, blocksize); + offset = do_div(logic_sb_block, blocksize); bh = sb_bread(sb, logic_sb_block); if (!bh) { printk(KERN_ERR _ Patches currently in -mm which might be from [EMAIL PROTECTED] are origin.patch revert-pci-quirk-for-ibm-dock-ii-cardbus-controllers.patch git-acpi.patch i386-acpi-build-fix.patch acpi-asus-s3-resume-fix.patch sony_apci-resume.patch git-cifs-fixup.patch cifs-kconfig-dont-select-connector.patch git-dvb-build-fix.patch w1-kconfig-fix.patch git-geode-fixup.patch git-gfs2.patch git-infiniband.patch git-input-fixup.patch git-libata-all.patch mtd-maps-support-for-bios-flash-chips-on-intel-esb2-southbridge.patch git-netdev-all.patch libphy-dont-do-that.patch drivers-net-ns83820c-add-paramter-to-disable-auto.patch git-pcmcia-fixup.patch git-serial-fixup.patch git-scsi-target-fixup.patch
- ext4-whitespace-cleanups.patch removed from -mm tree
The patch titled ext4 whitespace cleanups has been removed from the -mm tree. Its filename is ext4-whitespace-cleanups.patch This patch was dropped because it was merged into mainline or a subsystem tree -- Subject: ext4 whitespace cleanups From: Andrew Morton [EMAIL PROTECTED] Someone's tab key is emitting spaces. Attempt to repair some of the damage. Cc: linux-ext4@vger.kernel.org Signed-off-by: Andrew Morton [EMAIL PROTECTED] --- fs/ext4/acl.c |4 +-- fs/ext4/dir.c |7 +++-- fs/ext4/extents.c | 14 +-- fs/ext4/namei.c | 52 +--- fs/ext4/super.c | 14 ++- 5 files changed, 46 insertions(+), 45 deletions(-) diff -puN fs/ext4/acl.c~ext4-whitespace-cleanups fs/ext4/acl.c --- a/fs/ext4/acl.c~ext4-whitespace-cleanups +++ a/fs/ext4/acl.c @@ -141,7 +141,7 @@ ext4_iget_acl(struct inode *inode, struc static inline void ext4_iset_acl(struct inode *inode, struct posix_acl **i_acl, - struct posix_acl *acl) + struct posix_acl *acl) { spin_lock(inode-i_lock); if (*i_acl != EXT4_ACL_NOT_CACHED) @@ -375,7 +375,7 @@ int ext4_acl_chmod(struct inode *inode) { struct posix_acl *acl, *clone; -int error; + int error; if (S_ISLNK(inode-i_mode)) return -EOPNOTSUPP; diff -puN fs/ext4/dir.c~ext4-whitespace-cleanups fs/ext4/dir.c --- a/fs/ext4/dir.c~ext4-whitespace-cleanups +++ a/fs/ext4/dir.c @@ -188,8 +188,9 @@ revalidate: de = (struct ext4_dir_entry_2 *) (bh-b_data + offset); if (!ext4_check_dir_entry (ext4_readdir, inode, de, bh, offset)) { - /* On error, skip the f_pos to the - next block. */ + /* +* On error, skip the f_pos to the next block +*/ filp-f_pos = (filp-f_pos | (sb-s_blocksize - 1)) + 1; brelse (bh); @@ -508,7 +509,7 @@ finished: static int ext4_release_dir (struct inode * inode, struct file * filp) { - if (filp-private_data) + if (filp-private_data) ext4_htree_free_dir_info(filp-private_data); return 0; diff -puN fs/ext4/extents.c~ext4-whitespace-cleanups fs/ext4/extents.c --- a/fs/ext4/extents.c~ext4-whitespace-cleanups +++ a/fs/ext4/extents.c @@ -1014,7 +1014,7 @@ ext4_ext_next_allocated_block(struct ext * returns first allocated block from next leaf or EXT_MAX_BLOCK */ static unsigned ext4_ext_next_leaf_block(struct inode *inode, - struct ext4_ext_path *path) + struct ext4_ext_path *path) { int depth; @@ -1097,8 +1097,8 @@ static int inline ext4_can_extents_be_merged(struct inode *inode, struct ext4_extent *ex1, struct ext4_extent *ex2) { -if (le32_to_cpu(ex1-ee_block) + le16_to_cpu(ex1-ee_len) - != le32_to_cpu(ex2-ee_block)) + if (le32_to_cpu(ex1-ee_block) + le16_to_cpu(ex1-ee_len) != + le32_to_cpu(ex2-ee_block)) return 0; /* @@ -1113,7 +1113,7 @@ ext4_can_extents_be_merged(struct inode return 0; #endif -if (ext_pblock(ex1) + le16_to_cpu(ex1-ee_len) == ext_pblock(ex2)) + if (ext_pblock(ex1) + le16_to_cpu(ex1-ee_len) == ext_pblock(ex2)) return 1; return 0; } @@ -2008,9 +2008,9 @@ int ext4_ext_get_blocks(handle_t *handle goto out2; } /* - * Okay, we need to do block allocation. Lazily initialize the block - * allocation info here if necessary. -*/ +* Okay, we need to do block allocation. Lazily initialize the block +* allocation info here if necessary. +*/ if (S_ISREG(inode-i_mode) (!EXT4_I(inode)-i_block_alloc_info)) ext4_init_block_alloc_info(inode); diff -puN fs/ext4/namei.c~ext4-whitespace-cleanups fs/ext4/namei.c --- a/fs/ext4/namei.c~ext4-whitespace-cleanups +++ a/fs/ext4/namei.c @@ -241,13 +241,13 @@ static inline unsigned dx_node_limit (st #ifdef DX_DEBUG static void dx_show_index (char * label, struct dx_entry *entries) { -int i, n = dx_get_count (entries); + int i, n = dx_get_count (entries); printk(%s index , label); -for (i = 0; i n; i++) -{ -printk(%x-%u , i? dx_get_hash(entries + i): 0, dx_get_block(entries + i)); -} -printk(\n); + for (i = 0; i n; i++) { + printk(%x-%u , i? dx_get_hash(entries + i) : + 0, dx_get_block(entries + i)); + } +
Re: Directories 2GB
On Wed, Oct 11, 2006 at 11:49:10AM -0500, Steve Lord wrote: David Chinner wrote: On Tue, Oct 10, 2006 at 10:19:04AM +0100, Christoph Hellwig wrote: On Mon, Oct 09, 2006 at 09:15:28PM -0500, Steve Lord wrote: Hi Dave, My recollection is that it used to default to on, it was disabled because it needs to map the buffer into a single contiguous chunk of kernel memory. This was placing a lot of pressure on the memory remapping code, so we made it not default to on as reworking the code to deal with non contig memory was looking like a major effort. Exactly. The code works but tends to go OOM pretty fast at least when the dir blocksize code is bigger than the page size. I should give the code a spin on my ppc box with 64k pages if it works better there. The pagebuf code doesn't use high-order allocations anymore; it uses scatter lists and remapping to allow physically discontiguous pages in a multi-page buffer. That is, the pages are sourced via find_or_create_page() from the address space of the backing device, and then mapped via vmap() to provide a virtually contigous mapping of the multi-page buffer. So I don't think this problem exists anymore... I was not referring to high order allocations here, but the overhead of doing address space remapping every time a directory is accessed. Ah - ok. contig - non-contig and OOM is usually discussed in the context of higher order allocations failing. FWIW, I've not noticed any extra overhead - the CPU usage seems to grow roughly linearly with the increase in directory operations done as a result of higher throughput for the same number of I/Os. I'll have a look at the Vm stats, though, next time I run a comparison to see how bad this is. Thanks for the clarification, Steve. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group - To unsubscribe from this list: send the line unsubscribe linux-ext4 in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html