1. 08 Sep, 2006 32 commits
    • Stephen Hemminger's avatar
      sky2: clear status IRQ after empty · 15d658cb
      Stephen Hemminger authored
      Don't clear status IRQ until list has been read to avoid causing
      status list wraparound. Clearing IRQ forces a Transmit Status update
      if it is pending.
      Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      15d658cb
    • Stephen Hemminger's avatar
      sky2: accept flow control · 66976367
      Stephen Hemminger authored
      Don't program the GMAC to reject flow control packets.
      This maybe the cause of some of the transmit hangs.
      Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      66976367
    • Daniel Kobras's avatar
      dm: Fix deadlock under high i/o load in raid1 setup. · e2b53b19
      Daniel Kobras authored
      On an nForce4-equipped machine with two SATA disk in raid1 setup using dmraid,
      we experienced frequent deadlock of the system under high i/o load.  'cat
      /dev/zero > ~/zero' was the most reliable way to reproduce them: Randomly
      after a few GB, 'cp' would be left in 'D' state along with kjournald and
      kmirrord.  The functions cp and kjournald were blocked in did vary, but
      kmirrord's wchan always pointed to 'mempool_alloc()'.  We've seen this pattern
      on 2.6.15 and 2.6.17 kernels.  http://lkml.org/lkml/2005/4/20/142 indicates
      that this problem has been around even before.
      
      So much for the facts, here's my interpretation: mempool_alloc() first tries
      to atomically allocate the requested memory, or falls back to hand out
      preallocated chunks from the mempool.  If both fail, it puts the calling
      process (kmirrord in this case) on a private waitqueue until somebody refills
      the pool.  Where the only 'somebody' is kmirrord itself, so we have a
      deadlock.
      
      I worked around this problem by falling back to a (blocking) kmalloc when
      before kmirrord would have ended up on the waitqueue.  This defeats part of
      the benefits of using the mempool, but at least keeps the system running.  And
      it could be done with a two-line change.  Note that mempool_alloc() clears the
      GFP_NOIO flag internally, and only uses it to decide whether to wait or return
      an error if immediate allocation fails, so the attached patch doesn't change
      behaviour in the non-deadlocking case.  Path is against current git
      (2.6.18-rc4), but should apply to earlier versions as well.  I've tested on
      2.6.15, where this patch makes the difference between random lockup and a
      stable system.
      Signed-off-by: default avatarDaniel Kobras <kobras@linux.de>
      Acked-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      e2b53b19
    • Yingchao Zhou's avatar
      Remove redundant up() in stop_machine() · eeae03f8
      Yingchao Zhou authored
      An up() is called in kernel/stop_machine.c on failure, and also in the
      caller (unconditionally).
      Signed-off-by: default avatarZhou Yingchao <yingchao.zhou@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      eeae03f8
    • Alan Cox's avatar
      Missing PCI id update for VIA IDE · 1a9546a5
      Alan Cox authored
      The following change from -mm is important to 2.6.18 (actually to 2.6.17
      but its too late for that). This was contributed over three months ago
      by VIA to Bartlomiej and nothing happened. As a result the new chipset
      is now out and Linux won't run on it. By the time 2.6.18 is finalised
      this will be the defacto standard VIA chipset so support would be a good
      plan.
      
      Tested in -mm for a while, its essentially a PCI ident update but for
      the bridge chip because VIA do things in weird ways.
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      
      1a9546a5
    • Chen-Li Tien's avatar
      f3658cfa
    • David S. Miller's avatar
      PKTGEN: Make sure skb->{nh,h} are initialized in fill_packet_ipv6() too. · ee2abb10
      David S. Miller authored
      [PKTGEN]: Make sure skb->{nh,h} are initialized in fill_packet_ipv6() too.
      
      Mirror the bug fix from fill_packet_ipv4()
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      ee2abb10
    • Robin Holt's avatar
      Silent data corruption caused by XPC · d6b7fe9e
      Robin Holt authored
      Jack Steiner identified a problem where XPC can cause a silent
      data corruption.  On module load, the placement may cause the
      xpc_remote_copy_buffer to span two physical pages.  DMA transfers are
      done to the start virtual address translated to physical.
      
      This patch changes the buffer from a statically allocated buffer to a
      kmalloc'd buffer.  Dean Nelson reviewed this before posting.  I have
      tested it in the configuration that was showing the memory corruption
      and verified it works.  I also added a BUG_ON statement to help catch
      this if a similar situation is encountered.
      Signed-off-by: default avatarRobin Holt <holt@sgi.com>
      Signed-off-by: default avatarDean Nelson <dcn@sgi.com>
      Signed-off-by: default avatarJack Steiner <steiner@sgi.com>
      Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      d6b7fe9e
    • Alan Stern's avatar
      uhci-hcd: fix list access bug · 4ccc9a4b
      Alan Stern authored
      When skipping to the last TD of an URB, go to the _last_ entry in the
      list instead of the _first_ entry (as780).  This fixes Bugzilla #6747 and
      possibly others.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      4ccc9a4b
    • Ernie Petrides's avatar
      binfmt_elf: fix checks for bad address · 4be6107d
      Ernie Petrides authored
      Fix check for bad address; use macro instead of open-coding two checks.
      
      Taken from RHEL4 kernel update.
      
        For background, the BAD_ADDR() macro should return TRUE if the address is
        TASK_SIZE, because that's the lowest address that is *not* valid for
        user-space mappings.  The macro was correct in binfmt_aout.c but was wrong
        for the "equal to" case in binfmt_elf.c.  There were two in-line validations
        of user-space addresses in binfmt_elf.c, which have been appropriately
        converted to use the corrected BAD_ADDR() macro in the patch you posted
        yesterday.  Note that the size checks against TASK_SIZE are okay as coded.
      
        The additional changes that I propose are below.  These are in the error
        paths for bad ELF entry addresses once load_elf_binary() has already
        committed to exec'ing the new image (following the tearing down of the
        task's original address space).
      
        The 1st hunk deals with the interp-side of the outer "if".  There were two
        problems here.  The printk() should be removed because this path can be
        triggered at will by a bogus interpreter image created and used by a
        malicious user.  Further, the error code should not be ENOEXEC, because that
        causes the loop in search_binary_handler() to continue trying other exec
        handlers (twice, in fact).  But it's too late for this to work correctly,
        because the user address space has already been torn down, and an exec()
        failure cannot be returned to the user code because the code no longer
        exists.  The only recovery is to force a SIGSEGV, but it's best to terminate
        the search loop immediately.  I somewhat arbitrarily chose EINVAL as a
        fallback error code, but any error returned by load_elf_interp() will
        override that (but this value will never be seen by user-space).
      
        The 2nd hunk deals with the non-interp-side of the outer "if".  There were
        two problems here as well.  The SIGSEGV needs to be forced, because a prior
        sigaction() syscall might have set the associated disposition to SIG_IGN.
        And the ENOEXEC should be changed to EINVAL as described above.
      Signed-off-by: default avatarChuck Ebbert <76306.1226@compuserve.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      4be6107d
    • Christian Borntraeger's avatar
      bug in futex unqueue_me · 2cd6b01a
      Christian Borntraeger authored
      This patch adds a barrier() in futex unqueue_me to avoid aliasing of two
      pointers.
      
      On my s390x system I saw the following oops:
      
      Unable to handle kernel pointer dereference at virtual kernel address
      0000000000000000
      Oops: 0004 [#1]
      CPU:    0    Not tainted
      Process mytool (pid: 13613, task: 000000003ecb6ac0, ksp: 00000000366bdbd8)
      Krnl PSW : 0704d00180000000 00000000003c9ac2 (_spin_lock+0xe/0x30)
      Krnl GPRS: 00000000ffffffff 000000003ecb6ac0 0000000000000000 0700000000000000
                 0000000000000000 0000000000000000 000001fe00002028 00000000000c091f
                 000001fe00002054 000001fe00002054 0000000000000000 00000000366bddc0
                 00000000005ef8c0 00000000003d00e8 0000000000144f91 00000000366bdcb8
      Krnl Code: ba 4e 20 00 12 44 b9 16 00 3e a7 84 00 08 e3 e0 f0 88 00 04
      Call Trace:
      ([<0000000000144f90>] unqueue_me+0x40/0xe4)
       [<0000000000145a0c>] do_futex+0x33c/0xc40
       [<000000000014643e>] sys_futex+0x12e/0x144
       [<000000000010bb00>] sysc_noemu+0x10/0x16
       [<000002000003741c>] 0x2000003741c
      
      The code in question is:
      
      static int unqueue_me(struct futex_q *q)
      {
              int ret = 0;
              spinlock_t *lock_ptr;
      
              /* In the common case we don't take the spinlock, which is nice. */
       retry:
              lock_ptr = q->lock_ptr;
              if (lock_ptr != 0) {
                      spin_lock(lock_ptr);
      		/*
                       * q->lock_ptr can change between reading it and
                       * spin_lock(), causing us to take the wrong lock.  This
                       * corrects the race condition.
      [...]
      
      and my compiler (gcc 4.1.0) makes the following out of it:
      
      00000000000003c8 <unqueue_me>:
           3c8:       eb bf f0 70 00 24       stmg    %r11,%r15,112(%r15)
           3ce:       c0 d0 00 00 00 00       larl    %r13,3ce <unqueue_me+0x6>
                              3d0: R_390_PC32DBL      .rodata+0x2a
           3d4:       a7 f1 1e 00             tml     %r15,7680
           3d8:       a7 84 00 01             je      3da <unqueue_me+0x12>
           3dc:       b9 04 00 ef             lgr     %r14,%r15
           3e0:       a7 fb ff d0             aghi    %r15,-48
           3e4:       b9 04 00 b2             lgr     %r11,%r2
           3e8:       e3 e0 f0 98 00 24       stg     %r14,152(%r15)
           3ee:       e3 c0 b0 28 00 04       lg      %r12,40(%r11)
      		/* write q->lock_ptr in r12 */
           3f4:       b9 02 00 cc             ltgr    %r12,%r12
           3f8:       a7 84 00 4b             je      48e <unqueue_me+0xc6>
      		/* if r12 is zero then jump over the code.... */
           3fc:       e3 20 b0 28 00 04       lg      %r2,40(%r11)
      		/* write q->lock_ptr in r2 */
           402:       c0 e5 00 00 00 00       brasl   %r14,402 <unqueue_me+0x3a>
                              404: R_390_PC32DBL      _spin_lock+0x2
      		/* use r2 as parameter for spin_lock */
      
      So the code becomes more or less:
      if (q->lock_ptr != 0) spin_lock(q->lock_ptr)
      instead of
      if (lock_ptr != 0) spin_lock(lock_ptr)
      
      Which caused the oops from above.
      After adding a barrier gcc creates code without this problem:
      [...] (the same)
           3ee:       e3 c0 b0 28 00 04       lg      %r12,40(%r11)
           3f4:       b9 02 00 cc             ltgr    %r12,%r12
           3f8:       b9 04 00 2c             lgr     %r2,%r12
           3fc:       a7 84 00 48             je      48c <unqueue_me+0xc4>
           400:       c0 e5 00 00 00 00       brasl   %r14,400 <unqueue_me+0x38>
                              402: R_390_PC32DBL      _spin_lock+0x2
      
      As a general note, this code of unqueue_me seems a bit fishy. The retry logic
      of unqueue_me only works if we can guarantee, that the original value of
      q->lock_ptr is always a spinlock (Otherwise we overwrite kernel memory). We
      know that q->lock_ptr can change. I dont know what happens with the original
      spinlock, as I am not an expert with the futex code.
      
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Acked-by: default avatarIngo Molnar <mingo@redhat.com>
      Cc: Thomas Gleixner <tglx@timesys.com>
      Signed-off-by: default avatarChristian Borntraeger <borntrae@de.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      2cd6b01a
    • Trond Myklebust's avatar
      fcntl(F_SETSIG) fix · f4eb9f37
      Trond Myklebust authored
      fcntl(F_SETSIG) no longer works on leases because
      lease_release_private_callback() gets called as the lease is copied in
      order to initialise it.
      
      The problem is that lease_alloc() performs an unnecessary initialisation,
      which sets the lease_manager_ops.  Avoid the problem by allocating the
      target lease structure using locks_alloc_lock().
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      f4eb9f37
    • YOSHIFUJI Hideaki's avatar
      IPV6 OOPS'er triggerable by any user · a13aeb6e
      YOSHIFUJI Hideaki authored
      [IPV6]: Fix kernel OOPs when setting sticky socket options.
      
      Bug noticed by Remi Denis-Courmont <rdenis@simphalempin.com>.
      Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      a13aeb6e
    • Sridhar Samudrala's avatar
      SCTP: Fix sctp_primitive_ABORT() call in sctp_close(). · e564f8a9
      Sridhar Samudrala authored
      With the recent fix, the callers of sctp_primitive_ABORT()
      need to create an ABORT chunk and pass it as an argument rather
      than msghdr that was passed earlier.
      Signed-off-by: default avatarSridhar Samudrala <sri@us.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e564f8a9
    • David S. Miller's avatar
      SPARC64: Fix X server crashes on sparc64 · 24e2c32c
      David S. Miller authored
      [SPARC64]: Fix X server hangs due to large pages.
      
      This problem was introduced by changeset
      14778d90
      
      Unlike the hugetlb code paths, the normal fault code is not setup to
      propagate PTE changes for large page sizes correctly like the ones we
      make for I/O mappings in io_remap_pfn_range().
      
      It is absolutely necessary to update all sub-ptes of a largepage
      mapping on a fault.  Adding special handling for this would add
      considerably complexity to tlb_batch_add().  So let's just side-step
      the issue and forcefully dirty any writable PTEs created by
      io_remap_pfn_range().
      
      The only other real option would be to disable to large PTE code of
      io_remap_pfn_range() and we really don't want to do that.
      
      Much thanks to Mikael Pettersson for tracking down this problem and
      testing debug patches.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      24e2c32c
    • Michael Chan's avatar
      TG3: Disable TSO by default · 88704f0b
      Michael Chan authored
      Disable TSO by default on some chips due to hardware errata.
      
      Enabling TSO can lead to tx timeouts in some cases when the TSO
      header size exceeds 80 bytes on the affected chips.  This limit
      can be exceeded when the TCP header contains the timestamp option
      plus 2 SACK blocks, for example.  A more complete workaround is
      available in the next 2.6.18 kernel.
      Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      
      88704f0b
    • Neil Brown's avatar
      dm: mirror sector offset fix · 8135c5c1
      Neil Brown authored
      The device-mapper core does not perform any remapping of bios before passing
      them to the targets.  If a particular mapping begins part-way into a device,
      targets obtain the sector relative to the start of the mapping by subtracting
      ti->begin.
      
      The dm-raid1 target didn't do this everywhere: this patch fixes it, taking
      care to subtract ti->begin exactly once for each bio.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarNeil Brown <neilb@suse.de>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      8135c5c1
    • Jeff Mahoney's avatar
      dm: fix block device initialisation · 16470822
      Jeff Mahoney authored
      In alloc_dev(), we register the device with the block layer and then continue
      to initialize the device.  But register_disk() makes the device available to
      be opened before we have completed initialising it.
      
      This patch moves the final bits of the initialization above the disk
      registration.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      16470822
    • Jeff Mahoney's avatar
      dm: add module ref counting · 659a8ced
      Jeff Mahoney authored
      The reference counting on dm-mod is zero if no mapped devices are open.  This
      is incorrect, and can lead to an oops if the module is unloaded while mapped
      devices exist.
      
      This patch claims a reference to the module whenever a device is created, and
      drops it again when the device is freed.
      
      Devices must be removed before dm-mod is unloaded.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      659a8ced
    • Jeff Mahoney's avatar
      dm: fix mapped device ref counting · 67316370
      Jeff Mahoney authored
      To avoid races, _minor_lock must be held while changing mapped device
      reference counts.
      
      There are a few paths where a mapped_device pointer is returned before a
      reference is taken.  This patch fixes them.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      67316370
    • Jeff Mahoney's avatar
      dm: add DMF_FREEING · 1d62e5eb
      Jeff Mahoney authored
      There is a chicken and egg problem between the block layer and dm in which the
      gendisk associated with a mapping keeps a reference-less pointer to the
      mapped_device.
      
      This patch uses a new flag DMF_FREEING to indicate when the mapped_device is
      no longer valid.  This is checked to prevent any attempt to open the device
      from succeeding while the device is being destroyed.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      1d62e5eb
    • Jeff Mahoney's avatar
      dm: change minor_lock to spinlock · 5fcee2b3
      Jeff Mahoney authored
      While removing a device, another another thread might attempt to resurrect it.
      
      This patch replaces the _minor_lock mutex with a spinlock and uses
      atomic_dec_and_lock() to serialize reference counting in dm_put().
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      5fcee2b3
    • Jeff Mahoney's avatar
      dm: move idr_pre_get · cb352363
      Jeff Mahoney authored
      idr_pre_get() can sleep while allocating memory.
      
      The next patch will change _minor_lock into a spinlock, so this patch moves
      idr_pre_get() outside the lock in preparation.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      cb352363
    • Jeff Mahoney's avatar
      dm: fix idr minor allocation · 84d73ab6
      Jeff Mahoney authored
      One part of the system can attempt to use a mapped device before another has
      finished initialising it or while it is being freed.
      
      This patch introduces a place holder value, MINOR_ALLOCED, to mark the minor
      as allocated but in a state where it can't be used, such as mid-allocation or
      mid-free.  At the end of the initialization, it replaces the place holder with
      the pointer to the mapped_device, making it available to the rest of the dm
      subsystem.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      84d73ab6
    • Alasdair G Kergon's avatar
      dm snapshot: unify chunk_size · 208b2761
      Alasdair G Kergon authored
      Persistent snapshots currently store a private copy of the chunk size. 
      Userspace also supplies the chunk size when loading a snapshot.  Ensure
      consistency by only storing the chunk_size in one place instead of two.
      
      
      Currently the two sizes will differ if the chunk size supplied by userspace
      does not match the chunk size an existing snapshot actually uses.  Amongst
      other problems, this causes an incorrect 'percentage full' to be reported.
      
      The patch ensures consistency by only storing the chunk_size in one place,
      removing it from struct pstore.  Some initialisation is delayed until the
      correct chunk_size is known.  If read_header() discovers that the wrong chunk
      size was supplied, the 'area' buffer (which the header already got read into)
      is reinitialised to the correct size.
      
      [akpm: too late for 2.6.17 - suitable for 2.6.17.x after it has settled]
      Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      208b2761
    • Neil Brown's avatar
      Have ext2 reject file handles with bad inode numbers early. · 2336231e
      Neil Brown authored
      This prevents bad inode numbers from triggering errors in
      ext2_get_inode.
      Signed-off-by: default avatarNeil Brown <neilb@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      2336231e
    • Stephen Hemminger's avatar
      Allow per-route window scale limiting · 31e8b3a3
      Stephen Hemminger authored
      There are black box devices out there, routers and firewalls and
      whatnot, that simply cannot grok the TCP window scaling option
      correctly.
      
      People should and do bark at the site running the device causing
      the problems, but in the mean time folks do want a way to deal
      with the problem.  We don't want them to turn off window scaling
      completely as that hurts performance of connections that would run
      just fine with window scaling enabled.
      
      So give a way to do this on a per-route basis by limiting the
      window scaling by the per-connection window clamp.  Stephen's
      changelog message explains how to do this using a route metric.
      
      [TCP]: Limit window scaling if window is clamped.
      
      This small change allows for easy per-route workarounds for broken hosts or
      middleboxes that are not compliant with TCP standards for window scaling.
      Rather than having to turn off window scaling globally. This patch allows
      reducing or disabling window scaling if window clamp is present.
      
      Example: Mark Lord reported a problem with 2.6.17 kernel being unable to
      access http://www.everymac.com
      
      # ip route add 216.145.246.23/32 via 10.8.0.1 window 65535
      Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      31e8b3a3
    • Stephen Hemminger's avatar
      bridge-netfilter: don't overwrite memory outside of skb · 9d3925d7
      Stephen Hemminger authored
      The bridge netfilter code needs to check for space at the
      front of the skb before overwriting; otherwise if skb from
      device doesn't have headroom, then it will cause random
      memory corruption.
      Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      9d3925d7
    • Fernando Vazquez's avatar
      fix compilation error on IA64 · 7cadd43d
      Fernando Vazquez authored
      The commit 8833ebaa introduced a change that broke 
      IA64 compilation as shown below:
      
        gcc -Wp,-MD,arch/ia64/kernel/.entry.o.d  -nostdinc -isystem /usr/lib/gcc/ia64-linux-gnu/4.1.2/include -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h -DHAVE_WORKING_TEXT_ALIGN -DHAVE_MODEL_SMALL_ATTRIBUTE -DHAVE_SERIALIZE_DIRECTIVE -D__ASSEMBLY__   -mconstant-gp -c -o arch/ia64/kernel/entry.o arch/ia64/kernel/entry.S
      include/asm/mman.h: Assembler messages:
      include/asm/mman.h:13: Error: Unknown opcode `int ia64_map_check_rgn(unsigned long addr,unsigned long len,'
      include/asm/mman.h:14: Error: Unknown opcode `unsigned long flags)'
      make[1]: *** [arch/ia64/kernel/entry.o] Error 1
      make: *** [arch/ia64/kernel] Error 2
      
      The reason is that "asm/mman.h" is being included from entry.S indirectly through
      "asm/pgtable.h" (see code snips below).
      
      * arch/ia64/kernel/entry.S:
      ...
      #include <asm/pgtable.h>
      ...
      
      * include/asm-ia64/pgtable.h:
      ...
      #include <asm/mman.h>
      ...
      
      * include/asm-ia64/mman.h
      ...
      #ifdef __KERNEL__
      #define arch_mmap_check ia64_map_check_rgn
      int ia64_map_check_rgn(unsigned long addr, unsigned long len,
                      unsigned long flags);
      #endif
      ...
      Signed-off-by: default avatarFernando Vazquez <fernando@intellilink.co.jp>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      7cadd43d
    • Herbert Xu's avatar
      Fix output framentation of paged-skbs · ea624f5a
      Herbert Xu authored
      [INET]: Use pskb_trim_unique when trimming paged unique skbs
      
      The IPv4/IPv6 datagram output path was using skb_trim to trim paged
      packets because they know that the packet has not been cloned yet
      (since the packet hasn't been given to anything else in the system).
      
      This broke because skb_trim no longer allows paged packets to be
      trimmed.  Paged packets must be given to one of the pskb_trim functions
      instead.
      
      This patch adds a new pskb_trim_unique function to cover the IPv4/IPv6
      datagram output path scenario and replaces the corresponding skb_trim
      calls with it.
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      ea624f5a
    • Richard Purdie's avatar
      spectrum_cs: Fix firmware uploading errors · 35d2f110
      Richard Purdie authored
      This fixes firmware upload failures which prevent the driver from working.
      Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
      Cc: Dominik Brodowski <linux@dominikbrodowski.net>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      35d2f110
    • Michael Rash's avatar
      TEXTSEARCH: Fix Boyer Moore initialization bug · 940d7bce
      Michael Rash authored
      [TEXTSEARCH]: Fix Boyer Moore initialization bug
      
      The pattern is set after trying to compute the prefix table, which tries
      to use it. Initialize it before calling compute_prefix_tbl, make
      compute_prefix_tbl consistently use only the data from struct ts_bm
      and remove the now unnecessary arguments.
      Signed-off-by: default avatarMichael Rash <mbr@cipherdyne.org>
      Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
      Acked-by: default avatarDavid Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      940d7bce
  2. 23 Aug, 2006 8 commits