1. 13 Mar, 2011 4 commits
  2. 11 Mar, 2011 2 commits
    • Lukas Czerner's avatar
      block: fix mis-synchronisation in blkdev_issue_zeroout() · 0aeea189
      Lukas Czerner authored
      BZ29402
      https://bugzilla.kernel.org/show_bug.cgi?id=29402
      
      We can hit serious mis-synchronization in bio completion path of
      blkdev_issue_zeroout() leading to a panic.
      
      The problem is that when we are going to wait_for_completion() in
      blkdev_issue_zeroout() we check if the bb.done equals issued (number of
      submitted bios). If it does, we can skip the wait_for_completition()
      and just out of the function since there is nothing to wait for.
      However, there is a ordering problem because bio_batch_end_io() is
      calling atomic_inc(&bb->done) before complete(), hence it might seem to
      blkdev_issue_zeroout() that all bios has been completed and exit. At
      this point when bio_batch_end_io() is going to call complete(bb->wait),
      bb and wait does not longer exist since it was allocated on stack in
      blkdev_issue_zeroout() ==> panic!
      
      (thread 1)                      (thread 2)
      bio_batch_end_io()              blkdev_issue_zeroout()
        if(bb) {                      ...
          if (bb->end_io)             ...
            bb->end_io(bio, err);     ...
          atomic_inc(&bb->done);      ...
          ...                         while (issued != atomic_read(&bb.done))
          ...                         (let issued == bb.done)
          ...                         (do the rest of the function)
          ...                         return ret;
          complete(bb->wait);
          ^^^^^^^^
          panic
      
      We can fix this easily by simplifying bio_batch and completion counting.
      
      Also remove bio_end_io_t *end_io since it is not used.
      Signed-off-by: default avatarLukas Czerner <lczerner@redhat.com>
      Reported-by: default avatarEric Whitney <eric.whitney@hp.com>
      Tested-by: default avatarEric Whitney <eric.whitney@hp.com>
      Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
      CC: Dmitry Monakhov <dmonakhov@openvz.org>
      Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
      0aeea189
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 · 78f9bbb5
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
        ariadne: remove redundant NULL check
        ip6ip6: autoload ip6 tunnel
        net: bridge builtin vs. ipv6 modular
        ipv6: Don't create clones of host routes.
        pktgen: fix errata in show results
        ipv4: Fix erroneous uses of ifa_address.
        vxge: update MAINTAINERS
        r6040: bump to version 0.27 and date 23Feb2011
        r6040: fix multicast operations
        rds: prevent BUG_ON triggering on congestion map updates
        bonding 802.3ad: Rename rx_machine_lock to state_machine_lock
        bonding 802.3ad: Fix the state machine locking v2
        drivers/net/macvtap: fix error check
        net: fix multithreaded signal handling in unix recv routines
        net: Enter net/ipv6/ even if CONFIG_IPV6=n
        net/smsc911x.c: Set the VLAN1 register to fix VLAN MTU problem
        bnx2x: fix MaxBW configuration
        bnx2x: (NPAR) prevent HW access in D3 state
        bnx2x: fix link notification
        bnx2x: fix non-pmf device load flow
      
      Doing my first --no-ff merge here, to get the explicit merge commit.
      
      David did a back-merge in order to get commit 8909c9ad ("net: don't
      allow CAP_NET_ADMIN to load non-netdev kernel modules") so that we can
      add Stephen Hemminger's fix to handle ip6 tunnels as well, which uses
      the MODULE_ALIAS_NETDEV() macro created by that change.
      78f9bbb5
  3. 10 Mar, 2011 27 commits
  4. 09 Mar, 2011 7 commits