15 Feb, 2011

3 commits


14 Feb, 2011

17 commits


13 Feb, 2011

8 commits


12 Feb, 2011

12 commits

  • On an SMP ARM system running ext4, I've received a report that the
    first J_ASSERT in jbd2_journal_commit_transaction has been triggering:

    J_ASSERT(journal->j_running_transaction != NULL);

    While investigating possible causes for this problem, I noticed that
    __jbd2_log_start_commit() is getting called with j_state_lock only
    read-locked, in spite of the fact that it's possible for it might
    j_commit_request. Fix this by grabbing the necessary information so
    we can test to see if we need to start a new transaction before
    dropping the read lock, and then calling jbd2_log_start_commit() which
    will grab the write lock.

    Signed-off-by: "Theodore Ts'o"

    Theodore Ts'o
     
  • ext4 has a data corruption case when doing non-block-aligned
    asynchronous direct IO into a sparse file, as demonstrated
    by xfstest 240.

    The root cause is that while ext4 preallocates space in the
    hole, mappings of that space still look "new" and
    dio_zero_block() will zero out the unwritten portions. When
    more than one AIO thread is going, they both find this "new"
    block and race to zero out their portion; this is uncoordinated
    and causes data corruption.

    Dave Chinner fixed this for xfs by simply serializing all
    unaligned asynchronous direct IO. I've done the same here.
    The difference is that we only wait on conversions, not all IO.
    This is a very big hammer, and I'm not very pleased with
    stuffing this into ext4_file_write(). But since ext4 is
    DIO_LOCKING, we need to serialize it at this high level.

    I tried to move this into ext4_ext_direct_IO, but by then
    we have the i_mutex already, and we will wait on the
    work queue to do conversions - which must also take the
    i_mutex. So that won't work.

    This was originally exposed by qemu-kvm installing to
    a raw disk image with a normal sector-63 alignment. I've
    tested a backport of this patch with qemu, and it does
    avoid the corruption. It is also quite a lot slower
    (14 min for package installs, vs. 8 min for well-aligned)
    but I'll take slow correctness over fast corruption any day.

    Mingming suggested that we can track outstanding
    conversions, and wait on those so that non-sparse
    files won't be affected, and I've implemented that here;
    unaligned AIO to nonsparse files won't take a perf hit.

    [tytso@mit.edu: Keep the mutex as a hashed array instead
    of bloating the ext4 inode]

    [tytso@mit.edu: Fix up namespace issues so that global
    variables are protected with an "ext4_" prefix.]

    Signed-off-by: Eric Sandeen
    Signed-off-by: "Theodore Ts'o"

    Eric Sandeen
     
  • In 2.6.37 I was running into oopses with repeated module
    loads & unloads. I tracked this down to:

    fb1813f4 ext4: use dedicated slab caches for group_info structures

    (this was in addition to the features advert unload problem)

    The kstrdup & subsequent kfree of the cache name was causing
    a double free. In slub, at least, if I read it right it allocates
    & frees the name itself, slab seems to do something different...
    so in slub I think we were leaking -our- cachep->name, and double
    freeing the one allocated by slub.

    After getting lost in slab/slub/slob a bit, I just looked at other
    sized-caches that get allocated. jbd2, biovec, sgpool all do it
    more or less the way jbd2 does. Below patch follows the jbd2
    method of dynamically allocating a cache at mount time from
    a list of static names.

    (This might also possibly fix a race creating the caches with
    parallel mounts running).

    [Folded in a fix from Dan Carpenter which fixed an off-by-one error in
    the original patch]

    Cc: stable@kernel.org
    Signed-off-by: Eric Sandeen
    Signed-off-by: "Theodore Ts'o"

    Eric Sandeen
     
  • I'll probably regret this....

    Signed-off-by: Grant Likely

    Grant Likely
     
  • * 'kvm-updates/2.6.38' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    KVM: SVM: Make sure KERNEL_GS_BASE is valid when loading gs_index

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
    amd64_edac: Fix DIMMs per DCTs output

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm:
    dlm: use single thread workqueues

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
    cifs: don't always drop malformed replies on the floor (try #3)
    cifs: clean up checks in cifs_echo_request
    [CIFS] Do not send SMBEcho requests on new sockets until SMBNegotiate

    Linus Torvalds
     
  • * 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/staging:
    hwmon: (emc1403) Fix I2C address range
    hwmon: (lm63) Consider LM64 temperature offset

    Linus Torvalds
     
  • …s/security-testing-2.6

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6:
    pci: use security_capable() when checking capablities during config space read
    security: add cred argument to security_capable()
    tpm_tis: Use timeouts returned from TPM

    Linus Torvalds
     
  • …git/kgene/linux-samsung

    * 's5p-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
    ARM: SAMSUNG: Ensure struct sys_device is declared in plat/pm.h
    ARM: S5PV310: Cleanup System MMU
    ARM: S5PV310: Add support System MMU on SMDKV310

    Linus Torvalds
     
  • * 'next' of git://git.monstr.eu/linux-2.6-microblaze:
    microblaze: Fix msr instruction detection
    microblaze: Fix pte_update function
    microblaze: Fix asm compilation warning
    microblaze: Fix IRQ flag handling for MSR=0

    Linus Torvalds