18 May, 2009

7 commits

  • If bridge is configured with no STP and forwarding delay of 0 (which
    is typical for virtualization) then when link starts it will flood all
    packets for the first 20 seconds.

    This bug was introduced by a combination of earlier changes:
    * forwarding database uses hold time of zero to indicate
    user wants to always flood packets
    * optimzation of the case of forwarding delay of 0 avoids the initial
    timer tick

    The fix is to just skip all the topology change detection code if
    kernel STP is not being used.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • Currently the bridge catches all STP packets; even if STP is turned
    off. This prevents other systems (which do have STP turned on)
    from being able to detect loops in the network.

    With this patch, if STP is off, then any packet sent to the STP
    multicast group address is forwarded to all ports.

    Based on earlier patch by Joakim Tjernlund with changes
    to go through forwarding (not local chain), and optimization
    that only last octet needs to be checked.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • Mixing of normal and irq spinlocks results in the following lockdep messages
    on bootup on IP32:

    [...]
    Sending DHCP requests .
    ======================================================
    [ INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected ]
    2.6.30-rc5-00164-g41baeef #30
    ------------------------------------------------------
    swapper/1 [HC0[0]:SC0[1]:HE0:SE0] is trying to acquire:
    (&priv->meth_lock){+.+...}, at: [] meth_tx+0x48/0x43c

    and this task is already holding:
    (_xmit_ETHER#2){+.-...}, at: [] __qdisc_run+0x118/0x30c
    which would create a new lock dependency:
    (_xmit_ETHER#2){+.-...} -> (&priv->meth_lock){+.+...}

    but this new dependency connects a SOFTIRQ-irq-safe lock:
    (_xmit_ETHER#2){+.-...}
    ... which became SOFTIRQ-irq-safe at:
    [] __lock_acquire+0x784/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] dev_watchdog+0x70/0x398
    [] run_timer_softirq+0x1a8/0x248
    [] __do_softirq+0xec/0x208
    [] do_softirq+0x60/0xe4
    [] irq_exit+0x54/0x9c
    [] ret_from_irq+0x0/0x4
    [] r4k_wait+0x20/0x40
    [] cpu_idle+0x30/0x60
    [] start_kernel+0x3ec/0x404

    to a SOFTIRQ-irq-unsafe lock:
    (&priv->meth_lock){+.+...}
    ... which became SOFTIRQ-irq-unsafe at:
    ... [] __lock_acquire+0x824/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] meth_reset+0x118/0x2d8
    [] meth_open+0x28/0x140
    [] dev_open+0xe0/0x18c
    [] dev_change_flags+0xd8/0x1d4
    [] ip_auto_config+0x1d4/0xf28
    [] do_one_initcall+0x58/0x170
    [] kernel_init+0x98/0x104
    [] kernel_thread_helper+0x10/0x18

    other info that might help us debug this:

    2 locks held by swapper/1:
    #0: (rcu_read_lock){.+.+..}, at: [] dev_queue_xmit+0x1e0/0x4b0
    #1: (_xmit_ETHER#2){+.-...}, at: [] __qdisc_run+0x118/0x30c

    the SOFTIRQ-irq-safe lock's dependencies:
    -> (_xmit_ETHER#2){+.-...} ops: 0 {
    HARDIRQ-ON-W at:
    [] __lock_acquire+0x7fc/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] dev_watchdog+0x70/0x398
    [] run_timer_softirq+0x1a8/0x248
    [] __do_softirq+0xec/0x208
    [] do_softirq+0x60/0xe4
    [] irq_exit+0x54/0x9c
    [] ret_from_irq+0x0/0x4
    [] r4k_wait+0x20/0x40
    [] cpu_idle+0x30/0x60
    [] start_kernel+0x3ec/0x404
    IN-SOFTIRQ-W at:
    [] __lock_acquire+0x784/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] dev_watchdog+0x70/0x398
    [] run_timer_softirq+0x1a8/0x248
    [] __do_softirq+0xec/0x208
    [] do_softirq+0x60/0xe4
    [] irq_exit+0x54/0x9c
    [] ret_from_irq+0x0/0x4
    [] r4k_wait+0x20/0x40
    [] cpu_idle+0x30/0x60
    [] start_kernel+0x3ec/0x404
    INITIAL USE at:
    [] __lock_acquire+0x89c/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] dev_watchdog+0x70/0x398
    [] run_timer_softirq+0x1a8/0x248
    [] __do_softirq+0xec/0x208
    [] do_softirq+0x60/0xe4
    [] irq_exit+0x54/0x9c
    [] ret_from_irq+0x0/0x4
    [] r4k_wait+0x20/0x40
    [] cpu_idle+0x30/0x60
    [] start_kernel+0x3ec/0x404
    }
    ... key at: [] netdev_xmit_lock_key+0x8/0x1c8

    the SOFTIRQ-irq-unsafe lock's dependencies:
    -> (&priv->meth_lock){+.+...} ops: 0 {
    HARDIRQ-ON-W at:
    [] __lock_acquire+0x7fc/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] meth_reset+0x118/0x2d8
    [] meth_open+0x28/0x140
    [] dev_open+0xe0/0x18c
    [] dev_change_flags+0xd8/0x1d4
    [] ip_auto_config+0x1d4/0xf28
    [] do_one_initcall+0x58/0x170
    [] kernel_init+0x98/0x104
    [] kernel_thread_helper+0x10/0x18
    SOFTIRQ-ON-W at:
    [] __lock_acquire+0x824/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] meth_reset+0x118/0x2d8
    [] meth_open+0x28/0x140
    [] dev_open+0xe0/0x18c
    [] dev_change_flags+0xd8/0x1d4
    [] ip_auto_config+0x1d4/0xf28
    [] do_one_initcall+0x58/0x170
    [] kernel_init+0x98/0x104
    [] kernel_thread_helper+0x10/0x18
    INITIAL USE at:
    [] __lock_acquire+0x89c/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock+0x30/0x44
    [] meth_reset+0x118/0x2d8
    [] meth_open+0x28/0x140
    [] dev_open+0xe0/0x18c
    [] dev_change_flags+0xd8/0x1d4
    [] ip_auto_config+0x1d4/0xf28
    [] do_one_initcall+0x58/0x170
    [] kernel_init+0x98/0x104
    [] kernel_thread_helper+0x10/0x18
    }
    ... key at: [] __key.32424+0x0/0x8

    stack backtrace:
    Call Trace:
    [] dump_stack+0x8/0x34
    [] check_usage+0x470/0x4a0
    [] check_irq_usage+0x90/0x130
    [] __lock_acquire+0x12a4/0x1a14
    [] lock_acquire+0xf8/0x150
    [] _spin_lock_irqsave+0x60/0x84
    [] meth_tx+0x48/0x43c
    [] __qdisc_run+0x150/0x30c
    [] dev_queue_xmit+0x334/0x4b0
    [] ip_auto_config+0x8d0/0xf28
    [] do_one_initcall+0x58/0x170
    [] kernel_init+0x98/0x104
    [] kernel_thread_helper+0x10/0x18

    ..... timed out!
    IP-Config: Retrying forever (NFS root)...
    Sending DHCP requests ., OK
    [...]

    Fixed by converting all locks to irq locks.

    Signed-off-by: Ralf Baechle
    Tested-by: Andrew Randrianasulu
    Signed-off-by: David S. Miller

    Ralf Baechle
     
  • Napi structures are being created each time we open a port, but when
    the port is closed the napi structure is only disabled but not removed.
    This bug caused hang while removing the driver.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • If a DHCP server is delayed, it's possible for the client to receive the
    DHCPOFFER after it has already sent out a new DHCPDISCOVER message from
    a second interface. The client then sends out a DHCPREQUEST from the
    second interface, but the server doesn't recognize the device and
    rejects the request.

    This patch simply tracks the current device being configured and throws
    away the OFFER if it is not intended for the current device. A more
    sophisticated approach would be to put the OFFER information into the
    struct ic_device rather than storing it globally.

    Signed-off-by: Chris Friesen
    Signed-off-by: David S. Miller

    Chris Friesen
     
  • It looks like the dev in netpoll_poll can be NULL - at lease it's
    checked at the function beginning. Thus the dev->netde_ops dereference
    looks dangerous.

    Signed-off-by: Pavel Emelyanov
    Signed-off-by: David S. Miller

    Pavel Emelyanov
     
  • David S. Miller
     

17 May, 2009

7 commits

  • David S. Miller
     
  • Ian Campbell noticed that since "Eliminate thousands of warnings with
    gcc 3.2 build" (commit 57adc4d2dbf968fdbe516359688094eef4d46581) all
    WARN_ON()'s currently appear to come from warn_slowpath_null(), eg:

    WARNING: at kernel/softirq.c:143 warn_slowpath_null+0x1c/0x20()

    because now that warn_slowpath_null() is in the call path, the
    __builtin_return_address(0) returns that, rather than the place that
    caused the warning.

    Fix this by splitting up the warn_slowpath_null/fmt cases differently,
    using a common helper function, and getting the return address in the
    right place. This also happens to avoid the unnecessary stack usage for
    the non-stdargs case, and just generally cleans things up.

    Make the function name printout use %pS while at it.

    Cc: Ian Campbell
    Cc: Jesper Nilsson
    Cc: Johannes Weiner
    Cc: Arjan van de Ven
    Cc: Andi Kleen
    Cc: Hugh Dickins
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
    piix: The Sony TZ90 needs the cable type hardcoding
    icside: register second channel of version 6 PCB
    ide-tape: remove back-to-back REQUEST_SENSE detection

    Linus Torvalds
     
  • * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
    ACPI: Idle C-states disabled by max_cstate should not disable the TSC
    ACPI: idle: fix init-time TSC check regression
    ACPI processor: reset the throttling state once it's invalid
    ACPI processor: introduce module parameter processor.ignore_tpc
    ACPI, i915: build fix
    ACPI: suspend: restore BM_RLD on resume
    ACPI: resume: re-enable SCI-enable workaround
    thermal: fix off-by-1 error in trip point trigger condition
    eeepc-laptop: unregister_rfkill_notifier on failure
    asus-laptop: fix input keycode
    eeepc-laptop: support for super hybrid engine (SHE)
    eeepc-laptop: Work around rfkill firmware bug
    eeepc-laptop: report brightness control events via the input layer
    eeepc-laptop: fix wlan rfkill state change during init
    ACPI: suspend: don't let device _PS3 failure prevent suspend
    ACPI: power: update error message
    ACPI: video: DMI workaround another broken Acer BIOS enabling display brightness
    ACPICA: use acpi.* modparam namespace
    ACPI video: dmi check for broken _BQC on Acer Aspire 5720

    Linus Torvalds
     
  • The Sony TZ90 needs the cable type hardcoding. See bug #12734

    Signed-off-by: Alan Cox
    Reported-by: Jonathan E. Snow
    [bart: port it from ata_piix to piix and give reporter the proper credit]
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Alan Cox
     
  • The second IDE channel of version 6 PCB is not being registered anymore since
    the commit 48c3c1072651922ed153bcf0a33ea82cf20df390 (ide: add struct ide_host
    (take 3)).

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     
  • Impact: fix an oops which always triggers

    ide_tape_issue_pc() assumed drive->pc isn't NULL on invocation when
    checking for back-to-back request sense issues but drive->pc can be
    NULL and even when it's not NULL, it's not safe to dereference it once
    the previous command is complete because pc could have been freed or
    was on stack. Kill back-to-back REQUEST_SENSE detection.

    Signed-off-by: Tejun Heo
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Tejun Heo
     

16 May, 2009

20 commits

  • … 'bugzilla-13165', 'bugzilla-13243', 'bugzilla-13259', 'resume-sci-en-regression', 'thermal-regression', 'tsc-regression' and 'asus-2.6.30' into release

    Len Brown
     
  • Processor idle power states C2 and C3 stop the TSC on many machines.
    Linux recognizes this situation and marks the TSC as unstable:

    Marking TSC unstable due to TSC halts in idle

    But if those same machines are booted with "processor.max_cstate=1",
    then there is no need to validate C2 and C3, and no need to
    disable the TSC, which can be reliably used as a clocksource.

    Signed-off-by: Len Brown
    Acked-by: Thomas Gleixner

    Len Brown
     
  • A previous 2.6.30 patch, a71e4917dc0ebbcb5a0ecb7ca3486643c1c9a6e2,
    (ACPI: idle: mark_tsc_unstable() at init-time, not run-time)
    erroneously disabled the TSC on systems that did not actually
    have valid deep C-states.

    Move the check after the deep-C-states are validated,
    via new helper, tsc_check_state(), hich replaces tsc_halts_in_c().

    Signed-off-by: Len Brown
    Acked-by: Venkatesh Pallipadi
    Acked-by: Thomas Gleixner
    Tested-by: Frans Pop

    Len Brown
     
  • Linus Torvalds
     
  • If the BIOS hands us an invalid throttling state,
    write a valid state.

    http://bugzilla.kernel.org/show_bug.cgi?id=13259

    Signed-off-by: Zhang Rui
    Tested-by: James Ettle
    Signed-off-by: Len Brown

    Zhang Rui
     
  • Introduce module parameter processor.ignore_tpc.

    Some laptops are shipped with buggy _TPC,
    this module parameter is used to to disable the buggy support.

    http://bugzilla.kernel.org/show_bug.cgi?id=13259

    Signed-off-by: Zhang Rui
    Tested-by: James Ettle
    Signed-off-by: Len Brown

    Zhang Rui
     
  • drivers/built-in.o: In function `intel_opregion_init':
    (.text+0x9d540): undefined reference to `acpi_video_register'

    http://bugzilla.kernel.org/show_bug.cgi?id=13165

    Signed-off-by: Len Brown

    Len Brown
     
  • In 2.6.29,
    31878dd86b7df9a147f5e6cc6e07092b4308782b
    "ACPI: remove BM_RLD access from idle entry path"
    moved BM_RLD initialization to init-time from run time.

    But we discovered that some BIOS do not restore BM_RLD
    after suspend, causing device errors on C3 and C4
    after resume. So now the kernel restores BM_RLD.

    http://bugzilla.kernel.org/show_bug.cgi?id=13032

    Signed-off-by: Len Brown

    Len Brown
     
  • The BIOS bug workaround mistakenly got disabled
    when we followed the ACPI specification more closely
    by ignoring OS updates to that bit.

    (The BIOS is supposed to update SCI_EN, not the OS)

    http://bugzilla.kernel.org/show_bug.cgi?id=13289

    Signed-off-by: Lin Ming
    Signed-off-by: Len Brown

    Lin Ming
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:
    PCI MSI: Fix MSI-X with NIU cards
    PCI: Fix pci-e port driver slot_reset bad default return value

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6:
    Bluetooth: Don't trigger disconnect timeout for security mode 3 pairing
    Bluetooth: Don't use hci_acl_connect_cancel() for incoming connections
    Bluetooth: Fix wrong module refcount when connection setup fails

    Another case of me handling the fallout from Davem's unfortunate
    addiction to shuffleboard.

    Won't anybody think of the children? Join the anti-shuffleboard league
    today!

    Linus Torvalds
     
  • * 'drm-intel-next' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel:
    drm/i915: Add new GET_PIPE_FROM_CRTC_ID ioctl.
    drm/i915: Set HDMI hot plug interrupt enable for only the output in question.
    drm/i915: Include 965GME pci ID in IS_I965GM(dev) to match UMS.
    drm/i915: Use the GM45 VGA hotplug workaround on G45 as well.
    drm/i915: ignore LVDS on intel graphics systems that lie about having it
    drm/i915: sanity check IER at wait_request time
    drm/i915: workaround IGD i2c bus issue in kernel side (v2)
    drm/i915: Don't allow binding objects into the last page of the aperture.
    drm/i915: save/restore fence registers across suspend/resume
    drm/i915: x86 always has writeq. Add I915_READ64 for symmetry.

    Linus Torvalds
     
  • * 'upstream-linus' of ssh://master.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
    libata: Media rotation rate and form factor heuristics
    libata: Report disk alignment and physical block size
    sata_fsl: Fix the command description of FSL SATA controller
    sata_fsl: Fix compile warnings
    [libata] sata_sx4: fixup interrupt handling
    [libata] sata_sx4: convert to new exception handling methods

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6:
    iwlwifi: fix device id registration for 6000 series 2x2 devices
    ath5k: update channel in sw state after stopping RX and TX
    rtl8187: use DMA-aware buffers with usb_control_msg
    mac80211: avoid NULL ptr deref when finding max_rates in PID and minstrel
    airo: airo_get_encode{,ext} potential buffer overflow

    Pulled directly by Linus because Davem is off playing shuffle-board at
    some Alaskan cruise, and the NULL ptr deref issue hits people and should
    get merged sooner rather than later.

    David - make us proud on the shuffle-board tournament!

    Linus Torvalds
     
  • This patch provides new heuristics for parsing both the form factor and
    media rotation rate ATA IDENFITY words.

    The reported ATA version must be 7 or greater and the device must return
    values defined as valid in the standard. Only then are the
    characteristics reported to SCSI via the VPD B1 page.

    This seems like a reasonable compromise to me considering that we have
    been shipping several kernel releases that key off the rotation rate bit
    without any version checking whatsoever. With no complaints so far.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jeff Garzik

    Martin K. Petersen
     
  • For disks with 4KB sectors, report the correct block size and alignment
    when filling out the READ CAPACITY(16) response.

    This patch is based upon code from Matthew Wilcox' 4KB ATA tree. I
    fixed the bug I reported a while back caused by ATA and SCSI using
    different approaches to describing the alignment.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jeff Garzik

    Martin K. Petersen
     
  • The bit 11 of command description is reserved bit in Freescale
    SATA controller and needs to be set to '1'. This is needed to
    make sure the last write from the controller to the buffer
    descriptor is seen before an interrupt is raised.

    Signed-off-by: Dave Liu
    Signed-off-by: Kumar Gala
    Signed-off-by: Jeff Garzik

    Dave Liu
     
  • We we build with dma_addr_t as a 64-bit quantity we get:

    drivers/ata/sata_fsl.c: In function 'sata_fsl_fill_sg':
    drivers/ata/sata_fsl.c:340: warning: format '%x' expects type 'unsigned int', but argument 4 has type 'dma_addr_t'

    Signed-off-by: Kumar Gala
    Signed-off-by: Jeff Garzik

    Kumar Gala
     
  • Issuing ATA_CMD_SET_FEATURES (0xef) times out because
    pdc20621_interrupt ignores command completion since
    ATA_TFLAG_POLLING flag is set.

    This has already been fixed for sata_promise:

    commit 51b94d2a5a90d4800e74d7348bcde098a28f4fb3
    Author: Tejun Heo
    Date: Fri Jun 8 13:46:55 2007 -0700

    sata_promise: use TF interface for polling NODATA commands

    Also, this patch includes Mikael's original patches:

    http://marc.info/?l=linux-ide&m=121135828227724&w=2
    http://marc.info/?l=linux-ide&m=121144512109826&w=2

    Signed-off-by: Mikael Pettersson
    Signed-off-by: David Milburn
    Signed-off-by: Jeff Garzik

    David Milburn
     
  • Signed-off-by: Jeff Garzik

    Jeff Garzik
     

15 May, 2009

6 commits

  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
    ext4: Fix race in ext4_inode_info.i_cached_extent
    ext4: Clear the unwritten buffer_head flag after the extent is initialized
    ext4: Use a fake block number for delayed new buffer_head
    ext4: Fix sub-block zeroing for writes into preallocated extents

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
    ASoC: DaVinci EVM board support buildfixes
    ASoC: DaVinci I2S updates
    ASoC: davinci-pcm buildfixes
    ALSA: pcsp: fix printk format warning
    ALSA: riptide: postfix increment and off by one
    pxa2xx-ac97: fix reset gpio mode setting
    ASoC: soc-core: fix crash when removing not instantiated card

    Linus Torvalds
     
  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb:
    kgdb: gdb documentation fix
    kgdb,i386: use address that SP register points to in the exception frame
    sysrq, intel_fb: fix sysrq g collision

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.dk/linux-2.6-block:
    Revert "mm: add /proc controls for pdflush threads"
    viocd: needs to depend on BLOCK
    block: fix the bio_vec array index out-of-bounds test

    Linus Torvalds
     
  • * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
    powerpc: Fix PCI ROM access
    powerpc/pseries: Really fix the oprofile CPU type on pseries
    serial/nwpserial: Fix wrong register read address and add interrupt acknowledge.
    powerpc/cell: Make ptcal more reliable
    powerpc: Allow mem=x cmdline to work with 4G+
    powerpc/mpic: Fix incorrect allocation of interrupt rev-map
    powerpc: Fix oprofile sampling of marked events on POWER7
    powerpc/iseries: Fix pci breakage due to bad dma_data initialization
    powerpc: Fix mktree build error on Mac OS X host
    powerpc/virtex: Fix duplicate level irq events.
    powerpc/virtex: Add uImage to the default images list
    powerpc/boot: add simpleImage.* to clean-files list
    powerpc/8xx: Update defconfigs
    powerpc/embedded6xx: Update defconfigs
    powerpc/86xx: Update defconfigs
    powerpc/85xx: Update defconfigs
    powerpc/83xx: Update defconfigs
    powerpc/fsl_soc: Remove mpc83xx_wdt_init, again

    Linus Torvalds
     
  • devpts_get_sb() calls memset(0) to clear mount options and calls
    parse_mount_options() if user specified any mount options.

    The memset(0) is bogus since the 'mode' and 'ptmxmode' options are
    non-zero by default. parse_mount_options() restores options to default
    anyway and can properly deal with NULL mount options.

    So in devpts_get_sb() remove memset(0) and call parse_mount_options() even
    for NULL mount options.

    Bug reported by Eric Paris: http://lkml.org/lkml/2009/5/7/448.

    Signed-off-by: Sukadev Bhattiprolu
    Tested-by: Marc Dionne
    Reported-by: Eric Paris
    Cc: Christoph Hellwig
    Cc: Alan Cox
    Acked-by: Serge Hallyn
    Cc: Al Viro
    Cc: "Rafael J. Wysocki"
    Reviewed-by: "H. Peter Anvin"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sukadev Bhattiprolu