1. 09 Aug, 2012 40 commits
    • Mikael Pettersson's avatar
      m68k: Correct the Atari ALLOWINT definition · ef2e080c
      Mikael Pettersson authored
      commit c6636005 upstream.
      
      Booting a 3.2, 3.3, or 3.4-rc4 kernel on an Atari using the
      `nfeth' ethernet device triggers a WARN_ONCE() in generic irq
      handling code on the first irq for that device:
      
      WARNING: at kernel/irq/handle.c:146 handle_irq_event_percpu+0x134/0x142()
      irq 3 handler nfeth_interrupt+0x0/0x194 enabled interrupts
      Modules linked in:
      Call Trace: [<000299b2>] warn_slowpath_common+0x48/0x6a
       [<000299c0>] warn_slowpath_common+0x56/0x6a
       [<00029a4c>] warn_slowpath_fmt+0x2a/0x32
       [<0005b34c>] handle_irq_event_percpu+0x134/0x142
       [<0005b34c>] handle_irq_event_percpu+0x134/0x142
       [<0000a584>] nfeth_interrupt+0x0/0x194
       [<001ba0a8>] schedule_preempt_disabled+0x0/0xc
       [<0005b37a>] handle_irq_event+0x20/0x2c
       [<0005add4>] generic_handle_irq+0x2c/0x3a
       [<00002ab6>] do_IRQ+0x20/0x32
       [<0000289e>] auto_irqhandler_fixup+0x4/0x6
       [<00003144>] cpu_idle+0x22/0x2e
       [<001b8a78>] printk+0x0/0x18
       [<0024d112>] start_kernel+0x37a/0x386
       [<0003021d>] __do_proc_dointvec+0xb1/0x366
       [<0003021d>] __do_proc_dointvec+0xb1/0x366
       [<0024c31e>] _sinittext+0x31e/0x9c0
      
      After invoking the irq's handler the kernel sees !irqs_disabled()
      and concludes that the handler erroneously enabled interrupts.
      
      However, debugging shows that !irqs_disabled() is true even before
      the handler is invoked, which indicates a problem in the platform
      code rather than the specific driver.
      
      The warning does not occur in 3.1 or older kernels.
      
      It turns out that the ALLOWINT definition for Atari is incorrect.
      
      The Atari definition of ALLOWINT is ~0x400, the stated purpose of
      that is to avoid taking HSYNC interrupts.  irqs_disabled() returns
      true if the 3-bit ipl & 4 is non-zero.  The nfeth interrupt runs at
      ipl 3 (it's autovector 3), but 3 & 4 is zero so irqs_disabled() is
      false, and the warning above is generated.
      
      When interrupts are explicitly disabled, ipl is set to 7.  When they
      are enabled, ipl is masked with ALLOWINT.  On Atari this will result
      in ipl = 3, which blocks interrupts at ipl 3 and below.  So how come
      nfeth interrupts at ipl 3 are received at all?  That's because ipl
      is reset to 2 by Atari-specific code in default_idle(), again with
      the stated purpose of blocking HSYNC interrupts.  This discrepancy
      means that ipl 3 can remain blocked for longer than intended.
      
      Both default_idle() and falcon_hblhandler() identify HSYNC with
      ipl 2, and the "Atari ST/.../F030 Hardware Register Listing" agrees,
      but ALLOWINT is defined as if HSYNC was ipl 3.
      
      [As an experiment I modified default_idle() to reset ipl to 3, and
      as expected that resulted in all nfeth interrupts being blocked.]
      
      The fix is simple: define ALLOWINT as ~0x500 instead.  This makes
      arch_local_irq_enable() consistent with default_idle(), and prevents
      the !irqs_disabled() problems for ipl 3 interrupts.
      
      Tested on Atari running in an Aranym VM.
      Signed-off-by: default avatarMikael Pettersson <mikpe@it.uu.se>
      Tested-by: default avatarMichael Schmitz <schmitzmic@googlemail.com>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      ef2e080c
    • Andreas Schwab's avatar
      m68k: Make sys_atomic_cmpxchg_32 work on classic m68k · 727cda36
      Andreas Schwab authored
      commit 9e2760d1 upstream.
      
      User space access must always go through uaccess accessors, since on
      classic m68k user space and kernel space are completely separate.
      Signed-off-by: default avatarAndreas Schwab <schwab@linux-m68k.org>
      Tested-by: default avatarThorsten Glaser <tg@debian.org>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      727cda36
    • Mark Brown's avatar
      ASoC: wm8994: Ensure there are enough BCLKs for four channels · 8f32469c
      Mark Brown authored
      commit b8edf3e5 upstream.
      
      Otherwise if someone tries to use all four channels on AIF1 with the
      device in master mode we won't be able to clock out all the data.
      Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8f32469c
    • Mark Brown's avatar
      ASoC: wm8962: Allow VMID time to fully ramp · 9966af8a
      Mark Brown authored
      commit 9d40e558 upstream.
      
      Required for reliable power up from cold.
      Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9966af8a
    • Takashi Iwai's avatar
      ALSA: hda - Support dock on Lenovo Thinkpad T530 with ALC269VC · 7dcb3c5d
      Takashi Iwai authored
      commit 707fba3f upstream.
      
      Lenovo Thinkpad T530 with ALC269VC codec has a dock port but BIOS
      doesn't set up the pins properly.  Enable the pins as well as on
      Thinkpad X230 Tablet.
      Reported-and-tested-by: default avatarMario <anyc@hadiko.de>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7dcb3c5d
    • Takashi Iwai's avatar
      ALSA: hda - Fix mute-LED GPIO initialization for IDT codecs · 2a69bac3
      Takashi Iwai authored
      commit 1f43f6c1 upstream.
      
      The IDT codecs initializes the GPIO setup for mute LEDs via
      snd_hda_sync_vmaster_hook().  This works in most cases except for the
      very first call, which is called before PCM and control creations.
      Thus before Master switch is set manually via alsactl, the mute LED
      may show the wrong state, depending on the polarity.
      
      Now it's fixed by calling the LED-status update function manually when
      no vmaster is set yet.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2a69bac3
    • Takashi Iwai's avatar
      ALSA: hda - Fix polarity of mute LED on HP Mini 210 · 22e04228
      Takashi Iwai authored
      commit ff8a1e27 upstream.
      
      The commit a3e19973 made the LED working again on HP Mini 210 but
      with a wrong polarity.  This patch fixes the polarity for this
      machine, and also introduce a new model string "hp-inv-led".
      
      Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=772923Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      22e04228
    • Takashi Iwai's avatar
      ALSA: hda - Fix mute-LED GPIO setup for HP Mini 210 · 09f7d3b6
      Takashi Iwai authored
      commit a3e19973 upstream.
      
      BIOS on HP Mini 210 doesn't provide the proper "HP_Mute_LED" DMI
      string, thus the driver doesn't initialize the GPIO, too.  In the
      earlier kernel, the driver falls back to GPIO1, but since 3.3 we've
      stopped this due to other wrongly advertised machines.
      
      For fixing this particular case, add a new model type to specify the
      default polarity explicitly so that the fallback to GPIO1 is handled.
      
      Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=772923Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      09f7d3b6
    • Takashi Iwai's avatar
      ALSA: hda - Fix invalid D3 of headphone DAC on VT202x codecs · ac1d1b44
      Takashi Iwai authored
      commit 6162552b upstream.
      
      We've got a bug report about the silent output from the headphone on a
      mobo with VT2021, and spotted out that this was because of the wrong
      D3 state on the DAC for the headphone output.  The bug is triggered by
      the incomplete check for this DAC in set_widgets_power_state_vt1718S().
      It checks only the connectivity of the primary output (0x27) but
      doesn't consider the path from the headphone pin (0x28).
      
      Now this patch fixes the problem by checking both pins for DAC 0x0b.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ac1d1b44
    • Takashi Iwai's avatar
      ALSA: mpu401: Fix missing initialization of irq field · e25824fa
      Takashi Iwai authored
      commit bc733d49 upstream.
      
      The irq field of struct snd_mpu401 is supposed to be initialized to -1.
      Since it's set to zero as of now, a probing error before the irq
      installation results in a kernel warning "Trying to free already-free
      IRQ 0".
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=44821Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e25824fa
    • Daniel Mack's avatar
      ALSA: snd-usb: fix clock source validity index · 6fc6d9ae
      Daniel Mack authored
      commit aff252a8 upstream.
      
      uac_clock_source_is_valid() uses the control selector value to access
      the bmControls bitmap of the clock source unit. This is wrong, as
      control selector values start from 1, while the bitmap uses all
      available bits.
      
      In other words, "Clock Validity Control" is stored in D3..2, not D5..4
      of the clock selector unit's bmControls.
      Signed-off-by: default avatarDaniel Mack <zonque@gmail.com>
      Reported-by: default avatarAndreas Koch <andreas@akdesigninc.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6fc6d9ae
    • Colin Ian King's avatar
      USB: echi-dbgp: increase the controller wait time to come out of halt. · 6091e5bc
      Colin Ian King authored
      commit f96a4216 upstream.
      
      The default 10 microsecond delay for the controller to come out of
      halt in dbgp_ehci_startup is too short, so increase it to 1 millisecond.
      
      This is based on emperical testing on various USB debug ports on
      modern machines such as a Lenovo X220i and an Ivybridge development
      platform that needed to wait ~450-950 microseconds.
      Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
      Signed-off-by: default avatarJason Wessel <jason.wessel@windriver.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6091e5bc
    • Mathias Krause's avatar
      net/tun: fix ioctl() based info leaks · 143d9963
      Mathias Krause authored
      [ Upstream commits a117dacd
        and 8bbb1813 ]
      
      The tun module leaks up to 36 bytes of memory by not fully initializing
      a structure located on the stack that gets copied to user memory by the
      TUNGETIFF and SIOCGIFHWADDR ioctl()s.
      Signed-off-by: default avatarMathias Krause <minipli@googlemail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      143d9963
    • Jiri Kosina's avatar
      tcp: perform DMA to userspace only if there is a task waiting for it · 2ce42ec4
      Jiri Kosina authored
      [ Upstream commit 59ea33a6 ]
      
      Back in 2006, commit 1a2449a8 ("[I/OAT]: TCP recv offload to I/OAT")
      added support for receive offloading to IOAT dma engine if available.
      
      The code in tcp_rcv_established() tries to perform early DMA copy if
      applicable. It however does so without checking whether the userspace
      task is actually expecting the data in the buffer.
      
      This is not a problem under normal circumstances, but there is a corner
      case where this doesn't work -- and that's when MSG_TRUNC flag to
      recvmsg() is used.
      
      If the IOAT dma engine is not used, the code properly checks whether
      there is a valid ucopy.task and the socket is owned by userspace, but
      misses the check in the dmaengine case.
      
      This problem can be observed in real trivially -- for example 'tbench' is a
      good reproducer, as it makes a heavy use of MSG_TRUNC. On systems utilizing
      IOAT, you will soon find tbench waiting indefinitely in sk_wait_data(), as they
      have been already early-copied in tcp_rcv_established() using dma engine.
      
      This patch introduces the same check we are performing in the simple
      iovec copy case to the IOAT case as well. It fixes the indefinite
      recvmsg(MSG_TRUNC) hangs.
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2ce42ec4
    • Jiri Benc's avatar
      net: fix rtnetlink IFF_PROMISC and IFF_ALLMULTI handling · 202a3667
      Jiri Benc authored
      [ Upstream commit b1beb681 ]
      
      When device flags are set using rtnetlink, IFF_PROMISC and IFF_ALLMULTI
      flags are handled specially. Function dev_change_flags sets IFF_PROMISC and
      IFF_ALLMULTI bits in dev->gflags according to the passed value but
      do_setlink passes a result of rtnl_dev_combine_flags which takes those bits
      from dev->flags.
      
      This can be easily trigerred by doing:
      
      tcpdump -i eth0 &
      ip l s up eth0
      
      ip sets IFF_UP flag in ifi_flags and ifi_change, which is combined with
      IFF_PROMISC by rtnl_dev_combine_flags, causing __dev_change_flags to set
      IFF_PROMISC in gflags.
      Reported-by: default avatarMax Matveev <makc@redhat.com>
      Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      202a3667
    • Dan Carpenter's avatar
      USB: kaweth.c: use GFP_ATOMIC under spin_lock · e5481652
      Dan Carpenter authored
      [ Upstream commit e4c7f259 ]
      
      The problem is that we call this with a spin lock held.  The call tree
      is:
      	kaweth_start_xmit() holds kaweth->device_lock.
      	-> kaweth_async_set_rx_mode()
      	   -> kaweth_control()
      	      -> kaweth_internal_control_msg()
      
      The kaweth_internal_control_msg() function is only called from
      kaweth_control() which used GFP_ATOMIC for its allocations.
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e5481652
    • Hangbin Liu's avatar
      tcp: Add TCP_USER_TIMEOUT negative value check · ac6b310c
      Hangbin Liu authored
      [ Upstream commit 42493570 ]
      
      TCP_USER_TIMEOUT is a TCP level socket option that takes an unsigned int. But
      patch "tcp: Add TCP_USER_TIMEOUT socket option"(dca43c75) didn't check the negative
      values. If a user assign -1 to it, the socket will set successfully and wait
      for 4294967295 miliseconds. This patch add a negative value check to avoid
      this issue.
      Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ac6b310c
    • Alan Cox's avatar
      wanmain: comparing array with NULL · 1a863418
      Alan Cox authored
      [ Upstream commit 8b72ff64 ]
      
      gcc really should warn about these !
      Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1a863418
    • Alan Cox's avatar
      caif: fix NULL pointer check · 2138dede
      Alan Cox authored
      [ Upstream commit c66b9b7d ]
      
      Reported-by: <rucsoftsec@gmail.com>
      Resolves-bug: http://bugzilla.kernel.org/show_bug?44441Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2138dede
    • Francois Romieu's avatar
      r8169: revert "add byte queue limit support". · f63b1d92
      Francois Romieu authored
      [ Upstream commit 17bcb684 ]
      
      This reverts commit 036dafa2.
      
      First it appears in bisection, then reverting it solves the usual
      netdev watchdog problem for different people. I don't have a proper
      fix yet so get rid of it.
      Bisected-and-reported-by: default avatarAlex Villacís Lasso <a_villacis@palosanto.com>
      Signed-off-by: default avatarFrancois Romieu <romieu@fr.zoreil.com>
      Cc: Josh Boyer <jwboyer@redhat.com>
      Cc: Hayes Wang <hayeswang@realtek.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f63b1d92
    • Jesper Juhl's avatar
      net: Fix references to out-of-scope variables in put_cmsg_compat() · 4deb65e7
      Jesper Juhl authored
      [ Upstream commit 81881047 ]
      
      In net/compat.c::put_cmsg_compat() we may assign 'data' the address of
      either the 'ctv' or 'cts' local variables inside the 'if
      (!COMPAT_USE_64BIT_TIME)' branch.
      
      Those variables go out of scope at the end of the 'if' statement, so
      when we use 'data' further down in 'copy_to_user(CMSG_COMPAT_DATA(cm),
      data, cmlen - sizeof(struct compat_cmsghdr))' there's no telling what
      it may be refering to - not good.
      
      Fix the problem by simply giving 'ctv' and 'cts' function scope.
      Signed-off-by: default avatarJesper Juhl <jj@chaosbits.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4deb65e7
    • Paul Moore's avatar
      cipso: don't follow a NULL pointer when setsockopt() is called · a080e651
      Paul Moore authored
      [ Upstream commit 89d7ae34 ]
      
      As reported by Alan Cox, and verified by Lin Ming, when a user
      attempts to add a CIPSO option to a socket using the CIPSO_V4_TAG_LOCAL
      tag the kernel dies a terrible death when it attempts to follow a NULL
      pointer (the skb argument to cipso_v4_validate() is NULL when called via
      the setsockopt() syscall).
      
      This patch fixes this by first checking to ensure that the skb is
      non-NULL before using it to find the incoming network interface.  In
      the unlikely case where the skb is NULL and the user attempts to add
      a CIPSO option with the _TAG_LOCAL tag we return an error as this is
      not something we want to allow.
      
      A simple reproducer, kindly supplied by Lin Ming, although you must
      have the CIPSO DOI #3 configure on the system first or you will be
      caught early in cipso_v4_validate():
      
      	#include <sys/types.h>
      	#include <sys/socket.h>
      	#include <linux/ip.h>
      	#include <linux/in.h>
      	#include <string.h>
      
      	struct local_tag {
      		char type;
      		char length;
      		char info[4];
      	};
      
      	struct cipso {
      		char type;
      		char length;
      		char doi[4];
      		struct local_tag local;
      	};
      
      	int main(int argc, char **argv)
      	{
      		int sockfd;
      		struct cipso cipso = {
      			.type = IPOPT_CIPSO,
      			.length = sizeof(struct cipso),
      			.local = {
      				.type = 128,
      				.length = sizeof(struct local_tag),
      			},
      		};
      
      		memset(cipso.doi, 0, 4);
      		cipso.doi[3] = 3;
      
      		sockfd = socket(AF_INET, SOCK_DGRAM, 0);
      		#define SOL_IP 0
      		setsockopt(sockfd, SOL_IP, IP_OPTIONS,
      			&cipso, sizeof(struct cipso));
      
      		return 0;
      	}
      
      CC: Lin Ming <mlin@ss.pku.edu.cn>
      Reported-by: default avatarAlan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a080e651
    • Sjur Brændeland's avatar
      caif: Fix access to freed pernet memory · 60d2aa55
      Sjur Brændeland authored
      [ Upstream commit 96f80d12 ]
      
      unregister_netdevice_notifier() must be called before
      unregister_pernet_subsys() to avoid accessing already freed
      pernet memory. This fixes the following oops when doing rmmod:
      
      Call Trace:
       [<ffffffffa0f802bd>] caif_device_notify+0x4d/0x5a0 [caif]
       [<ffffffff81552ba9>] unregister_netdevice_notifier+0xb9/0x100
       [<ffffffffa0f86dcc>] caif_device_exit+0x1c/0x250 [caif]
       [<ffffffff810e7734>] sys_delete_module+0x1a4/0x300
       [<ffffffff810da82d>] ? trace_hardirqs_on_caller+0x15d/0x1e0
       [<ffffffff813517de>] ? trace_hardirqs_on_thunk+0x3a/0x3
       [<ffffffff81696bad>] system_call_fastpath+0x1a/0x1f
      
      RIP
       [<ffffffffa0f7f561>] caif_get+0x51/0xb0 [caif]
      Signed-off-by: default avatarSjur Brændeland <sjur.brandeland@stericsson.com>
      Acked-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      60d2aa55
    • Neil Horman's avatar
      sctp: Fix list corruption resulting from freeing an association on a list · 2936d35d
      Neil Horman authored
      [ Upstream commit 2eebc1e1 ]
      
      A few days ago Dave Jones reported this oops:
      
      [22766.294255] general protection fault: 0000 [#1] PREEMPT SMP
      [22766.295376] CPU 0
      [22766.295384] Modules linked in:
      [22766.387137]  ffffffffa169f292 6b6b6b6b6b6b6b6b ffff880147c03a90
      ffff880147c03a74
      [22766.387135] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000
      [22766.387136] Process trinity-watchdo (pid: 10896, threadinfo ffff88013e7d2000,
      [22766.387137] Stack:
      [22766.387140]  ffff880147c03a10
      [22766.387140]  ffffffffa169f2b6
      [22766.387140]  ffff88013ed95728
      [22766.387143]  0000000000000002
      [22766.387143]  0000000000000000
      [22766.387143]  ffff880003fad062
      [22766.387144]  ffff88013c120000
      [22766.387144]
      [22766.387145] Call Trace:
      [22766.387145]  <IRQ>
      [22766.387150]  [<ffffffffa169f292>] ? __sctp_lookup_association+0x62/0xd0
      [sctp]
      [22766.387154]  [<ffffffffa169f2b6>] __sctp_lookup_association+0x86/0xd0 [sctp]
      [22766.387157]  [<ffffffffa169f597>] sctp_rcv+0x207/0xbb0 [sctp]
      [22766.387161]  [<ffffffff810d4da8>] ? trace_hardirqs_off_caller+0x28/0xd0
      [22766.387163]  [<ffffffff815827e3>] ? nf_hook_slow+0x133/0x210
      [22766.387166]  [<ffffffff815902fc>] ? ip_local_deliver_finish+0x4c/0x4c0
      [22766.387168]  [<ffffffff8159043d>] ip_local_deliver_finish+0x18d/0x4c0
      [22766.387169]  [<ffffffff815902fc>] ? ip_local_deliver_finish+0x4c/0x4c0
      [22766.387171]  [<ffffffff81590a07>] ip_local_deliver+0x47/0x80
      [22766.387172]  [<ffffffff8158fd80>] ip_rcv_finish+0x150/0x680
      [22766.387174]  [<ffffffff81590c54>] ip_rcv+0x214/0x320
      [22766.387176]  [<ffffffff81558c07>] __netif_receive_skb+0x7b7/0x910
      [22766.387178]  [<ffffffff8155856c>] ? __netif_receive_skb+0x11c/0x910
      [22766.387180]  [<ffffffff810d423e>] ? put_lock_stats.isra.25+0xe/0x40
      [22766.387182]  [<ffffffff81558f83>] netif_receive_skb+0x23/0x1f0
      [22766.387183]  [<ffffffff815596a9>] ? dev_gro_receive+0x139/0x440
      [22766.387185]  [<ffffffff81559280>] napi_skb_finish+0x70/0xa0
      [22766.387187]  [<ffffffff81559cb5>] napi_gro_receive+0xf5/0x130
      [22766.387218]  [<ffffffffa01c4679>] e1000_receive_skb+0x59/0x70 [e1000e]
      [22766.387242]  [<ffffffffa01c5aab>] e1000_clean_rx_irq+0x28b/0x460 [e1000e]
      [22766.387266]  [<ffffffffa01c9c18>] e1000e_poll+0x78/0x430 [e1000e]
      [22766.387268]  [<ffffffff81559fea>] net_rx_action+0x1aa/0x3d0
      [22766.387270]  [<ffffffff810a495f>] ? account_system_vtime+0x10f/0x130
      [22766.387273]  [<ffffffff810734d0>] __do_softirq+0xe0/0x420
      [22766.387275]  [<ffffffff8169826c>] call_softirq+0x1c/0x30
      [22766.387278]  [<ffffffff8101db15>] do_softirq+0xd5/0x110
      [22766.387279]  [<ffffffff81073bc5>] irq_exit+0xd5/0xe0
      [22766.387281]  [<ffffffff81698b03>] do_IRQ+0x63/0xd0
      [22766.387283]  [<ffffffff8168ee2f>] common_interrupt+0x6f/0x6f
      [22766.387283]  <EOI>
      [22766.387284]
      [22766.387285]  [<ffffffff8168eed9>] ? retint_swapgs+0x13/0x1b
      [22766.387285] Code: c0 90 5d c3 66 0f 1f 44 00 00 4c 89 c8 5d c3 0f 1f 00 55 48
      89 e5 48 83
      ec 20 48 89 5d e8 4c 89 65 f0 4c 89 6d f8 66 66 66 66 90 <0f> b7 87 98 00 00 00
      48 89 fb
      49 89 f5 66 c1 c0 08 66 39 46 02
      [22766.387307]
      [22766.387307] RIP
      [22766.387311]  [<ffffffffa168a2c9>] sctp_assoc_is_match+0x19/0x90 [sctp]
      [22766.387311]  RSP <ffff880147c039b0>
      [22766.387142]  ffffffffa16ab120
      [22766.599537] ---[ end trace 3f6dae82e37b17f5 ]---
      [22766.601221] Kernel panic - not syncing: Fatal exception in interrupt
      
      It appears from his analysis and some staring at the code that this is likely
      occuring because an association is getting freed while still on the
      sctp_assoc_hashtable.  As a result, we get a gpf when traversing the hashtable
      while a freed node corrupts part of the list.
      
      Nominally I would think that an mibalanced refcount was responsible for this,
      but I can't seem to find any obvious imbalance.  What I did note however was
      that the two places where we create an association using
      sctp_primitive_ASSOCIATE (__sctp_connect and sctp_sendmsg), have failure paths
      which free a newly created association after calling sctp_primitive_ASSOCIATE.
      sctp_primitive_ASSOCIATE brings us into the sctp_sf_do_prm_asoc path, which
      issues a SCTP_CMD_NEW_ASOC side effect, which in turn adds a new association to
      the aforementioned hash table.  the sctp command interpreter that process side
      effects has not way to unwind previously processed commands, so freeing the
      association from the __sctp_connect or sctp_sendmsg error path would lead to a
      freed association remaining on this hash table.
      
      I've fixed this but modifying sctp_[un]hash_established to use hlist_del_init,
      which allows us to proerly use hlist_unhashed to check if the node is on a
      hashlist safely during a delete.  That in turn alows us to safely call
      sctp_unhash_established in the __sctp_connect and sctp_sendmsg error paths
      before freeing them, regardles of what the associations state is on the hash
      list.
      
      I noted, while I was doing this, that the __sctp_unhash_endpoint was using
      hlist_unhsashed in a simmilar fashion, but never nullified any removed nodes
      pointers to make that function work properly, so I fixed that up in a simmilar
      fashion.
      
      I attempted to test this using a virtual guest running the SCTP_RR test from
      netperf in a loop while running the trinity fuzzer, both in a loop.  I wasn't
      able to recreate the problem prior to this fix, nor was I able to trigger the
      failure after (neither of which I suppose is suprising).  Given the trace above
      however, I think its likely that this is what we hit.
      Signed-off-by: default avatarNeil Horman <nhorman@tuxdriver.com>
      Reported-by: davej@redhat.com
      CC: davej@redhat.com
      CC: "David S. Miller" <davem@davemloft.net>
      CC: Vlad Yasevich <vyasevich@gmail.com>
      CC: Sridhar Samudrala <sri@us.ibm.com>
      CC: linux-sctp@vger.kernel.org
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2936d35d
    • Alan Cox's avatar
    • Michael Chan's avatar
      bnx2: Fix bug in bnx2_free_tx_skbs(). · af8ca6dd
      Michael Chan authored
      [ Upstream commit c1f5163d ]
      
      In rare cases, bnx2x_free_tx_skbs() can unmap the wrong DMA address
      when it gets to the last entry of the tx ring.  We were not using
      the proper macro to skip the last entry when advancing the tx index.
      Reported-by: default avatarZongyun Lai <zlai@vmware.com>
      Reviewed-by: default avatarJeffrey Huang <huangjw@broadcom.com>
      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@linuxfoundation.org>
      af8ca6dd
    • Amir Hanania's avatar
      net: Fix memory leak - vlan_info struct · a5b4b62d
      Amir Hanania authored
      [ Upstream commit efc73f4b ]
      
      In driver reload test there is a memory leak.
      The structure vlan_info was not freed when the driver was removed.
      It was not released since the nr_vids var is one after last vlan was removed.
      The nr_vids is one, since vlan zero is added to the interface when the interface
      is being set, but the vlan zero is not deleted at unregister.
      Fix - delete vlan zero when we unregister the device.
      Signed-off-by: default avatarAmir Hanania <amir.hanania@intel.com>
      Acked-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a5b4b62d
    • Eric Dumazet's avatar
      gianfar: fix potential sk_wmem_alloc imbalance · d680c046
      Eric Dumazet authored
      [ Upstream commit 313b037c ]
      
      commit db83d136 (gianfar: Fix missing sock reference when
      processing TX time stamps) added a potential sk_wmem_alloc imbalance
      
      If the new skb has a different truesize than old one, we can get a
      negative sk_wmem_alloc once new skb is orphaned at TX completion.
      
      Now we no longer early orphan skbs in dev_hard_start_xmit(), this
      probably can lead to fatal bugs.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Tested-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
      Cc: Manfred Rudigier <manfred.rudigier@omicron.at>
      Cc: Claudiu Manoil <claudiu.manoil@freescale.com>
      Cc: Jiajun Wu <b06378@freescale.com>
      Cc: Andy Fleming <afleming@freescale.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d680c046
    • Eric Dumazet's avatar
      netem: add limitation to reordered packets · f7a47ee3
      Eric Dumazet authored
      [ Upstream commit 960fb66e ]
      
      Fix two netem bugs :
      
      1) When a frame was dropped by tfifo_enqueue(), drop counter
         was incremented twice.
      
      2) When reordering is triggered, we enqueue a packet without
         checking queue limit. This can OOM pretty fast when this
         is repeated enough, since skbs are orphaned, no socket limit
         can help in this situation.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Mark Gordon <msg@google.com>
      Cc: Andreas Terzis <aterzis@google.com>
      Cc: Yuchung Cheng <ycheng@google.com>
      Cc: Hagen Paul Pfeifer <hagen@jauu.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f7a47ee3
    • Cloud Ren's avatar
      atl1c: fix issue of transmit queue 0 timed out · aa505bba
      Cloud Ren authored
      [ Upstream commit b94e52f6 ]
      
      some people report atl1c could cause system hang with following
      kernel trace info:
      ---------------------------------------
      WARNING: at.../net/sched/sch_generic.c:258 dev_watchdog+0x1db/0x1d0()
      ...
      NETDEV WATCHDOG: eth0 (atl1c): transmit queue 0 timed out
      ...
      ---------------------------------------
      This is caused by netif_stop_queue calling when cable Link is down.
      So remove netif_stop_queue, because link_watch will take it over.
      Signed-off-by: default avatarxiong <xiong@qca.qualcomm.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarCloud Ren <cjren@qca.qualcomm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aa505bba
    • Theodore Ts'o's avatar
      ext4: undo ext4_calc_metadata_amount if we fail to claim space · c0ce1fd5
      Theodore Ts'o authored
      commit 03179fe9 upstream.
      
      The function ext4_calc_metadata_amount() has side effects, although
      it's not obvious from its function name.  So if we fail to claim
      space, regardless of whether we retry to claim the space again, or
      return an error, we need to undo these side effects.
      
      Otherwise we can end up incorrectly calculating the number of metadata
      blocks needed for the operation, which was responsible for an xfstests
      failure for test #271 when using an ext2 file system with delalloc
      enabled.
      Reported-by: default avatarBrian Foster <bfoster@redhat.com>
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c0ce1fd5
    • Brian Foster's avatar
      ext4: don't let i_reserved_meta_blocks go negative · 2dd71727
      Brian Foster authored
      commit 97795d2a upstream.
      
      If we hit a condition where we have allocated metadata blocks that
      were not appropriately reserved, we risk underflow of
      ei->i_reserved_meta_blocks.  In turn, this can throw
      sbi->s_dirtyclusters_counter significantly out of whack and undermine
      the nondelalloc fallback logic in ext4_nonda_switch().  Warn if this
      occurs and set i_allocated_meta_blocks to avoid this problem.
      
      This condition is reproduced by xfstests 270 against ext2 with
      delalloc enabled:
      
      Mar 28 08:58:02 localhost kernel: [  171.526344] EXT4-fs (loop1): delayed block allocation failed for inode 14 at logical offset 64486 with max blocks 64 with error -28
      Mar 28 08:58:02 localhost kernel: [  171.526346] EXT4-fs (loop1): This should not happen!! Data will be lost
      
      270 ultimately fails with an inconsistent filesystem and requires an
      fsck to repair.  The cause of the error is an underflow in
      ext4_da_update_reserve_space() due to an unreserved meta block
      allocation.
      Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2dd71727
    • Ashish Sangwan's avatar
      ext4: fix hole punch failure when depth is greater than 0 · 6918ff0b
      Ashish Sangwan authored
      commit 968dee77 upstream.
      
      Whether to continue removing extents or not is decided by the return
      value of function ext4_ext_more_to_rm() which checks 2 conditions:
      a) if there are no more indexes to process.
      b) if the number of entries are decreased in the header of "depth -1".
      
      In case of hole punch, if the last block to be removed is not part of
      the last extent index than this index will not be deleted, hence the
      number of valid entries in the extent header of "depth - 1" will
      remain as it is and ext4_ext_more_to_rm will return 0 although the
      required blocks are not yet removed.
      
      This patch fixes the above mentioned problem as instead of removing
      the extents from the end of file, it starts removing the blocks from
      the particular extent from which removing blocks is actually required
      and continue backward until done.
      Signed-off-by: default avatarAshish Sangwan <ashish.sangwan2@gmail.com>
      Signed-off-by: default avatarNamjae Jeon <linkinjeon@gmail.com>
      Reviewed-by: default avatarLukas Czerner <lczerner@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6918ff0b
    • Theodore Ts'o's avatar
      ext4: fix overhead calculation used by ext4_statfs() · 25471391
      Theodore Ts'o authored
      commit 952fc18e upstream.
      
      Commit f975d6bc introduced bug which caused ext4_statfs() to
      miscalculate the number of file system overhead blocks.  This causes
      the f_blocks field in the statfs structure to be larger than it should
      be.  This would in turn cause the "df" output to show the number of
      data blocks in the file system and the number of data blocks used to
      be larger than they should be.
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      25471391
    • Theodore Ts'o's avatar
      ext4: pass a char * to ext4_count_free() instead of a buffer_head ptr · 2a271d6a
      Theodore Ts'o authored
      commit f6fb99ca upstream.
      
      Make it possible for ext4_count_free to operate on buffers and not
      just data in buffer_heads.
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2a271d6a
    • Maarten Lankhorst's avatar
      nouveau: Fix alignment requirements on src and dst addresses · 66b68d23
      Maarten Lankhorst authored
      commit ce806a30 upstream.
      
      Linear copy works by adding the offset to the buffer address,
      which may end up not being 16-byte aligned.
      
      Some tests I've written for prime_pcopy show that the engine
      allows this correctly, so the restriction on lowest 4 bits of
      address can be lifted safely.
      
      The comments added were by envyas, I think because I used
      a newer version.
      Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      66b68d23
    • David Howells's avatar
      NFS: Fix a number of bugs in the idmapper · 4d71d5a6
      David Howells authored
      commit a427b9ec upstream.
      
      Fix a number of bugs in the NFS idmapper code:
      
       (1) Only registered key types can be passed to the core keys code, so
           register the legacy idmapper key type.
      
           This is a requirement because the unregister function cleans up keys
           belonging to that key type so that there aren't dangling pointers to the
           module left behind - including the key->type pointer.
      
       (2) Rename the legacy key type.  You can't have two key types with the same
           name, and (1) would otherwise require that.
      
       (3) complete_request_key() must be called in the error path of
           nfs_idmap_legacy_upcall().
      
       (4) There is one idmap struct for each nfs_client struct.  This means that
           idmap->idmap_key_cons is shared without the use of a lock.  This is a
           problem because key_instantiate_and_link() - as called indirectly by
           idmap_pipe_downcall() - releases anyone waiting for the key to be
           instantiated.
      
           What happens is that idmap_pipe_downcall() running in the rpc.idmapd
           thread, releases the NFS filesystem in whatever thread that is running in
           to continue.  This may then make another idmapper call, overwriting
           idmap_key_cons before idmap_pipe_downcall() gets the chance to call
           complete_request_key().
      
           I *think* that reading idmap_key_cons only once, before
           key_instantiate_and_link() is called, and then caching the result in a
           variable is sufficient.
      
      Bug (4) is the cause of:
      
      BUG: unable to handle kernel NULL pointer dereference at           (null)
      IP: [<          (null)>]           (null)
      PGD 0
      Oops: 0010 [#1] SMP
      CPU 1
      Modules linked in: ppdev parport_pc lp parport ip6table_filter ip6_tables ebtable_nat ebtables ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack nfs fscache xt_CHECKSUM auth_rpcgss iptable_mangle nfs_acl bridge stp llc lockd be2iscsi iscsi_boot_sysfs bnx2i cnic uio cxgb4i cxgb4 cxgb3i libcxgbi cxgb3 mdio ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi snd_hda_codec_realtek snd_usb_audio snd_hda_intel snd_hda_codec snd_seq snd_pcm snd_hwdep snd_usbmidi_lib snd_rawmidi snd_timer uvcvideo videobuf2_core videodev media videobuf2_vmalloc snd_seq_device videobuf2_memops e1000e vhost_net iTCO_wdt joydev coretemp snd soundcore macvtap macvlan i2c_i801 snd_page_alloc tun iTCO_vendor_support microcode kvm_intel kvm sunrpc hid_logitech_dj usb_storage i915 drm_kms_helper drm i2c_algo_bit i2c_core video [last unloaded: scsi_wait_scan]
      Pid: 1229, comm: rpc.idmapd Not tainted 3.4.2-1.fc16.x86_64 #1 Gateway DX4710-UB801A/G33M05G1
      RIP: 0010:[<0000000000000000>]  [<          (null)>]           (null)
      RSP: 0018:ffff8801a3645d40  EFLAGS: 00010246
      RAX: ffff880077707e30 RBX: ffff880077707f50 RCX: ffff8801a18ccd80
      RDX: 0000000000000006 RSI: ffff8801a3645e75 RDI: ffff880077707f50
      RBP: ffff8801a3645d88 R08: ffff8801a430f9c0 R09: ffff8801a3645db0
      R10: 000000000000000a R11: 0000000000000246 R12: ffff8801a18ccd80
      R13: ffff8801a3645e75 R14: ffff8801a430f9c0 R15: 0000000000000006
      FS:  00007fb6fb51a700(0000) GS:ffff8801afc80000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000000 CR3: 00000001a49b0000 CR4: 00000000000027e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process rpc.idmapd (pid: 1229, threadinfo ffff8801a3644000, task ffff8801a3bf9710)
      Stack:
       ffffffff81260878 ffff8801a3645db0 ffff8801a3645db0 ffff880077707a90
       ffff880077707f50 ffff8801a18ccd80 0000000000000006 ffff8801a3645e75
       ffff8801a430f9c0 ffff8801a3645dd8 ffffffff81260983 ffff8801a3645de8
      Call Trace:
       [<ffffffff81260878>] ? __key_instantiate_and_link+0x58/0x100
       [<ffffffff81260983>] key_instantiate_and_link+0x63/0xa0
       [<ffffffffa057062b>] idmap_pipe_downcall+0x1cb/0x1e0 [nfs]
       [<ffffffffa0107f57>] rpc_pipe_write+0x67/0x90 [sunrpc]
       [<ffffffff8117f833>] vfs_write+0xb3/0x180
       [<ffffffff8117fb5a>] sys_write+0x4a/0x90
       [<ffffffff81600329>] system_call_fastpath+0x16/0x1b
      Code:  Bad RIP value.
      RIP  [<          (null)>]           (null)
       RSP <ffff8801a3645d40>
      CR2: 0000000000000000
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Reviewed-by: default avatarSteve Dickson <steved@redhat.com>
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4d71d5a6
    • Jeff Layton's avatar
      nfs: skip commit in releasepage if we're freeing memory for fs-related reasons · 032da6ab
      Jeff Layton authored
      commit 5cf02d09 upstream.
      
      We've had some reports of a deadlock where rpciod ends up with a stack
      trace like this:
      
          PID: 2507   TASK: ffff88103691ab40  CPU: 14  COMMAND: "rpciod/14"
           #0 [ffff8810343bf2f0] schedule at ffffffff814dabd9
           #1 [ffff8810343bf3b8] nfs_wait_bit_killable at ffffffffa038fc04 [nfs]
           #2 [ffff8810343bf3c8] __wait_on_bit at ffffffff814dbc2f
           #3 [ffff8810343bf418] out_of_line_wait_on_bit at ffffffff814dbcd8
           #4 [ffff8810343bf488] nfs_commit_inode at ffffffffa039e0c1 [nfs]
           #5 [ffff8810343bf4f8] nfs_release_page at ffffffffa038bef6 [nfs]
           #6 [ffff8810343bf528] try_to_release_page at ffffffff8110c670
           #7 [ffff8810343bf538] shrink_page_list.clone.0 at ffffffff81126271
           #8 [ffff8810343bf668] shrink_inactive_list at ffffffff81126638
           #9 [ffff8810343bf818] shrink_zone at ffffffff8112788f
          #10 [ffff8810343bf8c8] do_try_to_free_pages at ffffffff81127b1e
          #11 [ffff8810343bf958] try_to_free_pages at ffffffff8112812f
          #12 [ffff8810343bfa08] __alloc_pages_nodemask at ffffffff8111fdad
          #13 [ffff8810343bfb28] kmem_getpages at ffffffff81159942
          #14 [ffff8810343bfb58] fallback_alloc at ffffffff8115a55a
          #15 [ffff8810343bfbd8] ____cache_alloc_node at ffffffff8115a2d9
          #16 [ffff8810343bfc38] kmem_cache_alloc at ffffffff8115b09b
          #17 [ffff8810343bfc78] sk_prot_alloc at ffffffff81411808
          #18 [ffff8810343bfcb8] sk_alloc at ffffffff8141197c
          #19 [ffff8810343bfce8] inet_create at ffffffff81483ba6
          #20 [ffff8810343bfd38] __sock_create at ffffffff8140b4a7
          #21 [ffff8810343bfd98] xs_create_sock at ffffffffa01f649b [sunrpc]
          #22 [ffff8810343bfdd8] xs_tcp_setup_socket at ffffffffa01f6965 [sunrpc]
          #23 [ffff8810343bfe38] worker_thread at ffffffff810887d0
          #24 [ffff8810343bfee8] kthread at ffffffff8108dd96
          #25 [ffff8810343bff48] kernel_thread at ffffffff8100c1ca
      
      rpciod is trying to allocate memory for a new socket to talk to the
      server. The VM ends up calling ->releasepage to get more memory, and it
      tries to do a blocking commit. That commit can't succeed however without
      a connected socket, so we deadlock.
      
      Fix this by setting PF_FSTRANS on the workqueue task prior to doing the
      socket allocation, and having nfs_release_page check for that flag when
      deciding whether to do a commit call. Also, set PF_FSTRANS
      unconditionally in rpc_async_schedule since that function can also do
      allocations sometimes.
      Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      032da6ab
    • J. Bruce Fields's avatar
      nfsd4: our filesystems are normally case sensitive · f0f5dcc0
      J. Bruce Fields authored
      commit 2930d381 upstream.
      
      Actually, xfs and jfs can optionally be case insensitive; we'll handle
      that case in later patches.
      Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f0f5dcc0
    • Boaz Harrosh's avatar
      pnfs-obj: Fix __r4w_get_page when offset is beyond i_size · a647f0df
      Boaz Harrosh authored
      commit c999ff68 upstream.
      
      It is very common for the end of the file to be unaligned on
      stripe size. But since we know it's beyond file's end then
      the XOR should be preformed with all zeros.
      
      Old code used to just read zeros out of the OSD devices, which is a great
      waist. But what scares me more about this situation is that, we now have
      pages attached to the file's mapping that are beyond i_size. I don't
      like the kind of bugs this calls for.
      
      Fix both birds, by returning a global zero_page, if offset is beyond
      i_size.
      
      TODO:
      	Change the API to ->__r4w_get_page() so a NULL can be
      	returned without being considered as error, since XOR API
      	treats NULL entries as zero_pages.
      
      [Bug since 3.2. Should apply the same way to all Kernels since]
      Signed-off-by: default avatarBoaz Harrosh <bharrosh@panasas.com>
      [bwh: Backported to 3.2: adjust for lack of wdata->header]
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a647f0df