10 Jun, 2009

17 commits


09 Jun, 2009

5 commits

  • Our async work synchronization was broken by "async: make sure
    independent async domains can't accidentally entangle" (commit
    d5a877e8dd409d8c702986d06485c374b705d340), because it would report
    the wrong lowest active async ID when there was both running and
    pending async work.

    This caused things like no being able to read the root filesystem,
    resulting in missing console devices and inability to run 'init',
    causing a boot-time panic.

    This fixes it by properly returning the lowest pending async ID: if
    there is any running async work, that will have a lower ID than any
    pending work, and we should _not_ look at the pending work list.

    There were alternative patches from Jaswinder and James, but this one
    also cleans up the code by removing the pointless 'ret' variable and
    the unnecesary testing for an empty list around 'for_each_entry()' (if
    the list is empty, the for_each_entry() thing just won't execute).

    Fixes-bug: http://bugzilla.kernel.org/show_bug.cgi?id=13474
    Reported-and-tested-by: Chris Clayton
    Cc: Jaswinder Singh Rajput
    Cc: James Bottomley
    Cc: Arjan van de Ven
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • * 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
    MIPS: Outline udelay and fix a few issues.
    MIPS: ioctl.h: Fix headers_check warnings
    MIPS: Cobalt: PCI bus is always required to obtain the board ID
    MIPS: Kconfig: Remove "Support for" from Cavium system type
    MIPS: Sibyte: Honor CONFIG_CMDLINE
    SSB: BCM47xx: Export ssb_watchdog_timer_set

    Linus Torvalds
     
  • The previous patch submission had a I typo I didn't catch but Bartlomiej
    noted. Guess this proves the point about any patch being risky late in an rc

    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Alan Cox
     
  • * 'kvm-updates/2.6.30' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    KVM: Explicity initialize cpus_hardware_enabled

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
    pdc202xx_old: fix resetproc() method
    pdc202xx_old: fix 'pdc20246_dma_ops'

    Linus Torvalds
     

08 Jun, 2009

9 commits


07 Jun, 2009

7 commits


06 Jun, 2009

2 commits

  • OK, that's probably the easiest way to do that, as much as I don't like it...
    Since iget() et.al. will not accept I_FREEING (will wait to go away
    and restart), and since we'd better have serialization between new/free
    on fs data structures anyway, we can afford simply skipping I_FREEING
    et.al. in insert_inode_locked().

    We do that from new_inode, so it won't race with free_inode in any interesting
    ways and it won't race with iget (of any origin; nfsd or in case of fs
    corruption a lookup) since both still will wait for I_LOCK.

    Reviewed-by: "Theodore Ts'o"
    Acked-by: Jan Kara
    Tested-by: David Watson
    Signed-off-by: Al Viro

    Al Viro
     
  • The nobh_truncate_page() function is used by ext2, exofs, and jfs. Of
    these three, only ext2 and jfs's get_block() function pays attention
    to bh->b_size --- which is normally always the filesystem blocksize
    except when the get_block() function is called by either
    mpage_readpage(), mpage_readpages(), or the direct I/O routines in
    fs/direct_io.c.

    Unfortunately, nobh_truncate_page() does not initialize map_bh before
    calling the filesystem-supplied get_block() function. So ext2 and jfs
    will try to calculate the number of blocks to map by taking stack
    garbage and shifting it left by inode->i_blkbits. This should be
    *mostly* harmless (except the filesystem will do some unnneeded work)
    unless the stack garbage is less than filesystem's blocksize, in which
    case maxblocks will be zero, and the attempt to find out whether or
    not the filesystem has a hole at a given logical block will fail, and
    the page cache entry might not get zero'ed out.

    Also if the stack garbage in in map_bh->state happens to have the
    BH_Mapped bit set, there could be an attempt to call readpage() on a
    non-existent page, which could cause nobh_truncate_page() to return an
    error when it should not.

    Fix this by initializing map_bh->state and map_bh->size.

    Fortunately, it's probably fairly unlikely that ext2 and jfs users
    mount with nobh these days.

    Signed-off-by: "Theodore Ts'o"
    Cc: Dave Kleikamp
    Cc: linux-fsdevel@vger.kernel.org
    Signed-off-by: Al Viro

    Theodore Ts'o