20 Sep, 2006

1 commit


19 Sep, 2006

5 commits

  • Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • * git://git.infradead.org/mtd-2.6:
    [MTD] Use SEEK_{SET,CUR,END} instead of hardcoded values in mtdchar lseek()
    MTD: Fix bug in fixup_convert_atmel_pri
    [JFFS2][SUMMARY] Fix a summary collecting bug.
    [PATCH] [MTD] DEVICES: Fill more device IDs in the structure of m25p80
    MTD: Add lock/unlock operations for Atmel AT49BV6416
    MTD: Convert Atmel PRI information to AMD format
    fs/jffs2/xattr.c: remove dead code
    [PATCH] [MTD] Maps: Add dependency on alternate probe methods to physmap
    [PATCH] MTD: Add Macronix MX29F040 to JEDEC
    [MTD] Fixes of performance and stability issues in CFI driver.
    block2mtd.c: Make kernel boot command line arguments work (try 4)
    [MTD NAND] Fix lookup error in nand_get_flash_type()
    remove #error on !PCI from pmc551.c
    MTD: [NAND] Fix the sharpsl driver after breakage from a core conversion
    [MTD] NAND: OOB buffer offset fixups
    make fs/jffs2/nodelist.c:jffs2_obsolete_node_frag() static
    [PATCH] [MTD] NAND: fix dead URL in Kconfig

    Linus Torvalds
     
  • Fix a performance degradation introduced in 2.6.17. (30% degradation
    running dbench with 16 threads)

    Commit 21730eed11de42f22afcbd43f450a1872a0b5ea1, which claims to make
    EXT2_DEBUG work again, moves the taking of the kernel lock out of
    debug-only code in ext2_count_free_inodes and ext2_count_free_blocks and
    into ext2_statfs.

    The same problem was fixed in ext3 by removing the lock completely (commit
    5b11687924e40790deb0d5f959247ade82196665)

    Signed-off-by: Dave Kleikamp
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Kleikamp
     

17 Sep, 2006

4 commits

  • In some special case (padding because of sync or umount) it can be possible
    that summary information is not fit to the end of the erase block. In
    these cases the collecting of summary is disabled for this erase block.

    The problem was that this was not respected by jffs2_sum_add_kvec(). This
    patch fix this bug.

    Signed-off-by: Ferenc Havasi
    Signed-off-by: David Woodhouse
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Zoltan Sogor
     
  • ext3-get-blocks support caused ~20% degrade in Sequential read
    performance (tiobench). Problem is with marking the buffer boundary
    so IO can be submitted right away. Here is the patch to fix it.

    2.6.18-rc6:
    -----------
    # ./iotest
    1048576+0 records in
    1048576+0 records out
    4294967296 bytes (4.3 GB) copied, 75.2726 seconds, 57.1 MB/s

    real 1m15.285s
    user 0m0.276s
    sys 0m3.884s

    2.6.18-rc6 + fix:
    -----------------
    [root@elm3a241 ~]# ./iotest
    1048576+0 records in
    1048576+0 records out
    4294967296 bytes (4.3 GB) copied, 62.9356 seconds, 68.2 MB/s

    The boundary block check in ext3_get_blocks_handle needs to be adjusted
    against the count of blocks mapped in this call, now that it can map
    more than one block.

    Signed-off-by: Suparna Bhattacharya
    Tested-by: Badari Pulavarty
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Suparna Bhattacharya
     
  • Inodes earlier than the 'first' inode (e.g. journal, resize) should be
    rejected early - except the root inode. Also inode numbers that are too
    big should be rejected early.

    [akpm@osdl.org: cleanup]
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • This prevents bad inode numbers from triggering errors in ext2_get_inode.

    [akpm@osdl.org: speedup, cleanup]
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     

16 Sep, 2006

1 commit

  • In some special case (padding because of sync
    or umount) it can be possible that summary
    information is not fit to the end of the erase
    block. In these cases the collecting of summary
    is disabled for this erase block.

    The problem was that this was not respected
    by jffs2_sum_add_kvec(). This patch fix this
    bug.

    From: Zoltan Sogor
    Signed-off-by: Ferenc Havasi
    Signed-off-by: David Woodhouse

    Havasi Ferenc
     

13 Sep, 2006

2 commits


09 Sep, 2006

2 commits

  • The logic in nfs_direct_read_schedule and nfs_direct_write_schedule can
    allow data->npages to be one larger than rpages. This causes a page
    pointer to be written beyond the end of the pagevec in nfs_read_data (or
    nfs_write_data).

    Fix this by making nfs_(read|write)_alloc() calculate the size of the
    pagevec array, and initialise data->npages.

    Also get rid of the redundant argument to nfs_commit_alloc().

    Signed-off-by: Trond Myklebust
    Cc: Chuck Lever
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Trond Myklebust
     
  • It has been reported that ext3_getblk() is not doing the right thing and
    triggering following WARN():

    BUG: warning at fs/ext3/inode.c:1016/ext3_getblk()
    ext3_getblk+0x98/0x2a6 md_wakeup_thread+0x26/0x2a
    ext3_bread+0x1f/0x88 ext3_quota_read+0x136/0x1ae
    v1_read_dqblk+0x61/0xac dquot_acquire+0xf6/0x107
    ext3_acquire_dquot+0x46/0x68 dqget+0x155/0x1e7
    dquot_transfer+0x3e0/0x3e9 dput+0x23/0x13e
    ext3_setattr+0xc3/0x240 current_fs_time+0x52/0x6a
    notify_change+0x2bd/0x30d chown_common+0x9c/0xc5
    strncpy_from_user+0x3b/0x68 do_path_lookup+0xdf/0x266
    __user_walk_fd+0x44/0x5a sys_chown+0x4a/0x55
    vfs_write+0xe7/0x13c sys_mkdir+0x1f/0x23
    syscall_call+0x7/0xb

    Looking at the code, it looks like it's not handle HOLE correctly. It ends
    up returning -EIO. Here is the patch to fix it.

    If we really want to be paranoid, we can allow return values 0 (HOLE), 1
    (we asked for one block) and return -EIO for more than 1 block. But I
    really don't see a reason for doing it - all we need is the block# here.
    (doesn't matter how many blocks are mapped).

    ext3_get_blocks_handle() returns number of blocks it mapped. It returns 0
    in case of HOLE. ext3_getblk() should handle HOLE properly (currently its
    dumping warning stack and returning -EIO).

    Signed-off-by: Badari Pulavarty
    Acked-by: Mingming Cao
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Badari Pulavarty
     

07 Sep, 2006

6 commits

  • SGI-PV: 955993
    SGI-Modid: xfs-linux-melb:xfs-kern:26934a

    Signed-off-by: Nathan Scott
    Signed-off-by: David Chatterton

    Nathan Scott
     
  • xfs_splice_write() failed to update the on disk inode size when extending
    the so when the file was closed the range extended by splice was truncated
    off. Hence any region of a file written to by splice would end up as a
    hole full of zeros.

    SGI-PV: 955939
    SGI-Modid: xfs-linux-melb:xfs-kern:26920a

    Signed-off-by: David Chinner
    Signed-off-by: David Chatterton

    David Chinner
     
  • __blockdev_direct_IO for the DIO_OWN_LOCKING case for direct I/O reads
    since it drops and reacquires the i_mutex while holding the iolock and
    this violates the locking order.

    SGI-PV: 955696
    SGI-Modid: xfs-linux-melb:xfs-kern:26898a

    Signed-off-by: Lachlan McIlroy
    Signed-off-by: David Chatterton

    Lachlan McIlroy
     
  • The fix for recent ENOSPC deadlocks introduced certain limitations on
    allocations. The fix could cause xfssyncd to loop endlessly if we did not
    leave some space free for the allocator to work correctly. Basically, we
    needed to ensure that we had at least 4 blocks free for an AG free list
    and a block for the inode bmap btree at all times.

    However, this did not take into account the fact that each AG has a free
    list that needs 4 blocks. Hence any filesystem with more than one AG could
    cause oversubscription of free space and make xfssyncd spin forever trying
    to allocate space needed for AG freelists that was not available in the
    AG.

    The following patch reserves space for the free lists in all AGs plus the
    inode bmap btree which prevents oversubscription. It also prevents those
    blocks from being reported as free space (as they can never be used) and
    makes the SMP in-core superblock accounting code and the reserved block
    ioctl respect this requirement.

    SGI-PV: 955674
    SGI-Modid: xfs-linux-melb:xfs-kern:26894a

    Signed-off-by: David Chinner
    Signed-off-by: David Chatterton

    David Chinner
     
  • CIFS had one path in which dentry was instantiated before the corresponding
    inode metadata was filled in.

    Fixes Redhat bugzilla bug #163493

    Signed-off-by: Steve French
    Acked-by: Eric Paris
    Acked-by: Dave Kleikamp

    Steve French
     
  • Adds kernel-doc for alloc_super() type in fs/super.c.

    Signed-off-by: Henrik Kretzschmar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Henrik Kretzschmar
     

02 Sep, 2006

1 commit


31 Aug, 2006

1 commit


30 Aug, 2006

2 commits

  • conversion.

    Since bma.conv is a char and XFS_BMAPI_CONVERT is 0x1000, bma.conv was
    always assigned zero. Spotted by the GNU C compiler (SVN version).

    SGI-PV: 947312
    SGI-Modid: xfs-linux-melb:xfs-kern:26887a

    Signed-off-by: Adrian Bunk
    Signed-off-by: Nathan Scott

    Adrian Bunk
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
    [CIFS] Do not send Query All EAs SMB when mount option nouser_xattr
    [CIFS] endian errors in lanman protocol support
    [CIFS] Fix oops in cifs_close due to unitialized lock sem and list in
    [CIFS] Fix oops when negotiating lanman and no password specified
    [CIFS]
    [CIFS] Allow cifsd to suspend if connection is lost
    [CIFS] Make midState usage more consistent
    [CIFS] spinlock protect read of last srv response time in timeout path
    [CIFS] Do not time out posix brl requests when using new posix setfileinfo

    Linus Torvalds
     

28 Aug, 2006

11 commits

  • None of the other /proc/meminfo lines have a space in the identifier. This
    post-2.6.17 addition has the potential to break existing parsers, so use an
    underscore instead (like Committed_AS).

    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • This fixes the locking error noticed by lockdep:

    =============================================
    [ INFO: possible recursive locking detected ]
    ---------------------------------------------
    init/1 is trying to acquire lock:
    (&sighand->siglock){....}, at: [] flush_old_exec+0x3ae/0x859

    but task is already holding lock:
    (&sighand->siglock){....}, at: [] flush_old_exec+0x39e/0x859

    other info that might help us debug this:
    2 locks held by init/1:
    #0: (tasklist_lock){..--}, at: [] flush_old_exec+0x38e/0x859
    #1: (&sighand->siglock){....}, at: [] flush_old_exec+0x39e/0x859

    stack backtrace:
    [] show_trace_log_lvl+0x54/0xfd
    [] show_trace+0xd/0x10
    [] dump_stack+0x19/0x1b
    [] __lock_acquire+0x773/0x997
    [] lock_acquire+0x4b/0x6c
    [] _spin_lock+0x19/0x28
    [] flush_old_exec+0x3ae/0x859
    [] load_elf_binary+0x4aa/0x1628
    [] search_binary_handler+0xa7/0x24e
    [] do_execve+0x15b/0x1f9
    [] sys_execve+0x29/0x4d
    [] syscall_call+0x7/0xb

    Signed-off-by: Arjan van de Ven
    Signed-off-by: Dave Jones
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Jones
     
  • reiserfs seems to have another locking level layer for the i_mutex due to the
    xattrs-are-a-directory thing.

    Signed-off-by: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     
  • JBD currently allocates commit and frozen buffers from slabs. With
    CONFIG_SLAB_DEBUG, its possible for an allocation to cross the page
    boundary causing IO problems.

    https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=200127

    So, instead of allocating these from regular slabs - manage allocation from
    its own slabs and disable slab debug for these slabs.

    [akpm@osdl.org: cleanups]
    Signed-off-by: Badari Pulavarty
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Badari Pulavarty
     
  • Fix two compile failures in eventpoll.c code which would happen if
    DEBUG_EPOLL is bigger than zero.

    Signed-off-by: Masoud Sharbiani
    Cc: Davide Libenzi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masoud Asgharifard Sharbiani
     
  • 1) When we allocated last fragment in ufs_truncate, we read page, check
    if block mapped to address, and if not trying to allocate it. This is
    wrong behaviour, fragment may be NOT allocated, but mapped, this
    happened because of "block map" function not checked allocated fragment
    or not, it just take address of the first fragment in the block, add
    offset of fragment and return result, this is correct behaviour in
    almost all situation except call from ufs_truncate.

    2) Almost all implementation of UFS, which I can investigate have such
    "defect": if you have full disk, and try truncate file, for example 3GB
    to 2MB, and have hole in this region, truncate return -ENOSPC. I tried
    evade from this problem, but "block allocation" algorithm is tied to
    right value of i_lastfrag, and fix of this corner case may slow down of
    ordinaries scenarios, so this patch makes behavior of "truncate"
    operations similar to what other UFS implementations do.

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     
  • On UFS, this scenario:
    open(O_TRUNC)
    lseek(1024 * 1024 * 80)
    write("A")
    lseek(1024 * 2)
    write("A")

    may cause access to invalid address.

    This happened because of "goal" is calculated in wrong way in block
    allocation path, as I see this problem exists also in 2.4.

    We use construction like this i_data[lastfrag], i_data array of pointers to
    direct blocks, indirect and so on, it has ceratain size ~20 elements, and
    lastfrag may have value for example 40000.

    Also this patch fixes related to handling such scenario issues, wrong
    zeroing metadata, in case of block(not fragment) allocation, and wrong goal
    calculation, when we allocate block

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     
  • To handle the earlier bogus ENOSPC error caused by filesystem full of block
    reservation, current code falls back to non block reservation, starts to
    allocate block(s) from the goal allocation block group as if there is no
    block reservation.

    Current code needs to re-load the corresponding block group descriptor for
    the initial goal block group in this case. The patch fixes this.

    Signed-off-by: Mingming Cao
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mingming Cao
     
  • Mounting an ext2 filesystem with zero s_inodes_per_group will cause a
    divide error.

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andries Brouwer
     
  • Mounting a (corrupt) minix filesystem with zero s_zmap_blocks
    gives a spectacular crash on my 2.6.17.8 system, no doubt
    because minix/inode.c does an unconditional
    minix_set_bit(0,sbi->s_zmap[0]->b_data);

    [akpm@osdl.org: make labels conistent while we're there]

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andries Brouwer
     
  • On Wed, 2006-08-09 at 07:57 +0200, Rolf Eike Beer wrote:
    > =============================================
    > [ INFO: possible recursive locking detected ]
    > ---------------------------------------------
    > parted/7929 is trying to acquire lock:
    > (&bdev->bd_mutex){--..}, at: [] __blkdev_put+0x1e/0x13c
    >
    > but task is already holding lock:
    > (&bdev->bd_mutex){--..}, at: [] do_open+0x72/0x3a8
    >
    > other info that might help us debug this:
    > 1 lock held by parted/7929:
    > #0: (&bdev->bd_mutex){--..}, at: [] do_open+0x72/0x3a8
    > stack backtrace:
    > [] show_trace_log_lvl+0x58/0x15b
    > [] show_trace+0xd/0x10
    > [] dump_stack+0x17/0x1a
    > [] __lock_acquire+0x753/0x99c
    > [] lock_acquire+0x4a/0x6a
    > [] mutex_lock_nested+0xc8/0x20c
    > [] __blkdev_put+0x1e/0x13c
    > [] blkdev_put+0xa/0xc
    > [] do_open+0x336/0x3a8
    > [] blkdev_open+0x1f/0x4c
    > [] __dentry_open+0xc7/0x1aa
    > [] nameidata_to_filp+0x1c/0x2e
    > [] do_filp_open+0x2e/0x35
    > [] do_sys_open+0x38/0x68
    > [] sys_open+0x16/0x18
    > [] sysenter_past_esp+0x56/0x8d

    OK, I'm having a look here; its all new to me so bear with me.

    blkdev_open() calls
    do_open(bdev, ...,BD_MUTEX_NORMAL) and takes
    mutex_lock_nested(&bdev->bd_mutex, BD_MUTEX_NORMAL)

    then something fails, and we're thrown to:

    out_first: where
    if (bdev != bdev->bd_contains)
    blkdev_put(bdev->bd_contains) which is
    __blkdev_put(bdev->bd_contains, BD_MUTEX_NORMAL) which does
    mutex_lock_nested(&bdev->bd_contains->bd_mutex, BD_MUTEX_NORMAL) bd_contains is either bdev or whole, and
    since we take the branch it must be whole. So it seems to me the
    following patch would be the right one:

    [akpm@osdl.org: compile fix]
    Signed-off-by: Peter Zijlstra
    Cc: Arjan van de Ven
    Acked-by: NeilBrown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     

27 Aug, 2006

1 commit

  • The current sun disklabel code uses a signed int for the sector count.
    When partitions larger than 1 TB are used, the cast to a sector_t causes
    the partition sizes to be invalid:

    # cat /proc/paritions | grep sdan
    66 112 2146435072 sdan
    66 115 9223372036853660736 sdan3
    66 120 9223372036853660736 sdan8

    This patch switches the sector count to an unsigned int to fix this.

    Signed-off-by: Jeff Mahoney
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Jeff Mahoney
     

25 Aug, 2006

3 commits