07 Oct, 2013

8 commits

  • The dbx500_cpuidle_probe is tagged as an __init section but the variable
    dbx500_cpuidle_plat_driver is not.

    The dbx500_cpuidle_probe could not be declared as __init because of macro
    module_platform_driver builds the exit function, tags as __exit and this one
    refers to the dbx500_cpuidle_plat_driver which is an __initdata.

    That leads to a section mismatch.

    Fix it by removing the __init tag for the probe function.

    Signed-off-by: Daniel Lezcano
    Acked-by: Linus Walleij

    Daniel Lezcano
     
  • As the ux500 and the kirkwood driver, make the zynq driver a platform driver

    Signed-off-by: Daniel Lezcano
    Acked-by: Michal Simek
    Tested-by: Soren Brinkmann

    Daniel Lezcano
     
  • All zynq platforms have this compatibility string and there is no any other
    clone.

    Signed-off-by: Daniel Lezcano
    Acked-by: Michal Simek

    Daniel Lezcano
     
  • Following the reorganization of CPU idle drivers configurations into an ARM
    specific Kconfig, the existing idle drivers Kconfig entries were renamed and
    moved to the Kconfig.arm file. Makefile entries were updated accordingly.

    This patch renames the entries in Kconfig.arm and makefile to make the newly
    added big.LITTLE CPUidle driver compliant with the new naming convention.

    Signed-off-by: Lorenzo Pieralisi
    Acked-by: Kevin Hilman
    Signed-off-by: Daniel Lezcano

    Lorenzo Pieralisi
     
  • Linus Torvalds
     
  • Modify the code to use current_euid(), and in_egroup_p, as in done
    in fs/proc/proc_sysctl.c:test_perm()

    Cc: stable@vger.kernel.org
    Reviewed-by: Eric Sandeen
    Reported-by: Eric Sandeen
    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     
  • Pull SCSI target fixes from Nicholas Bellinger:
    "Here are the outstanding target fixes queued up for v3.12-rc4 code.

    The highlights include:

    - Make vhost/scsi tag percpu_ida_alloc() use GFP_ATOMIC
    - Allow sess_cmd_map allocation failure fallback to use vzalloc
    - Fix COMPARE_AND_WRITE se_cmd->data_length bug with FILEIO backends
    - Fixes for COMPARE_AND_WRITE callback recursive failure OOPs + non
    zero scsi_status bug
    - Make iscsi-target do acknowledgement tag release from RX context
    - Setup iscsi-target with extra (cmdsn_depth / 2) percpu_ida tags

    Also included is a iscsi-target patch CC'ed for v3.10+ that avoids
    legacy wait_for_task=true release during fast-past StatSN
    acknowledgement, and two other SRP target related patches that address
    long-standing issues that are CC'ed for v3.3+.

    Extra thanks to Thomas Glanzmann for his testing feedback with
    COMPARE_AND_WRITE + EXTENDED_COPY VAAI logic"

    * git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
    iscsi-target; Allow an extra tag_num / 2 number of percpu_ida tags
    iscsi-target: Perform release of acknowledged tags from RX context
    iscsi-target: Only perform wait_for_tasks when performing shutdown
    target: Fail on non zero scsi_status in compare_and_write_callback
    target: Fix recursive COMPARE_AND_WRITE callback failure
    target: Reset data_length for COMPARE_AND_WRITE to NoLB * block_size
    ib_srpt: always set response for task management
    target: Fall back to vzalloc upon ->sess_cmd_map kzalloc failure
    vhost/scsi: Use GFP_ATOMIC with percpu_ida_alloc for obtaining tag
    ib_srpt: Destroy cm_id before destroying QP.
    target: Fix xop->dbl assignment in target_xcopy_parse_segdesc_02

    Linus Torvalds
     
  • Pull slave-dmaengine fixes from Vinod Koul:
    "Here is the slave dmanegine fixes. We have the fix for deadlock issue
    on imx-dma by Michael and Josh's edma config fix along with author
    change"

    * 'fixes' of git://git.infradead.org/users/vkoul/slave-dma:
    dmaengine: imx-dma: fix callback path in tasklet
    dmaengine: imx-dma: fix lockdep issue between irqhandler and tasklet
    dmaengine: imx-dma: fix slow path issue in prep_dma_cyclic
    dma/Kconfig: Make TI_EDMA select TI_PRIV_EDMA
    edma: Update author email address

    Linus Torvalds
     

06 Oct, 2013

5 commits

  • Pull btrfs fixes from Chris Mason:
    "This is a small collection of fixes, including a regression fix from
    Liu Bo that solves rare crashes with compression on.

    I've merged my for-linus up to 3.12-rc3 because the top commit is only
    meant for 3.12. The rest of the fixes are also available in my master
    branch on top of my last 3.11 based pull"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
    btrfs: Fix crash due to not allocating integrity data for a bioset
    Btrfs: fix a use-after-free bug in btrfs_dev_replace_finishing
    Btrfs: eliminate races in worker stopping code
    Btrfs: fix crash of compressed writes
    Btrfs: fix transid verify errors when recovering log tree

    Linus Torvalds
     
  • Pull GPIO fixes from Linus Walleij:
    "Two patches for the OMAP driver, dealing with setting up IRQs properly
    on the device tree boot path"

    * tag 'gpio-v3.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
    gpio/omap: auto-setup a GPIO when used as an IRQ
    gpio/omap: maintain GPIO and IRQ usage separately

    Linus Torvalds
     
  • Pull USB fixes from Greg KH:
    "Here are none fixes for various USB driver problems. The majority are
    gadget/musb fixes, but there are some new device ids in here as well"

    * tag 'usb-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
    usb: chipidea: add Intel Clovertrail pci id
    usb: gadget: s3c-hsotg: fix can_write limit for non-periodic endpoints
    usb: gadget: f_fs: fix error handling
    usb: musb: dsps: do not bind to "musb-hdrc"
    USB: serial: option: Ignore card reader interface on Huawei E1750
    usb: musb: gadget: fix otg active status flag
    usb: phy: gpio-vbus: fix deferred probe from __init
    usb: gadget: pxa25x_udc: fix deferred probe from __init
    usb: musb: fix otg default state

    Linus Torvalds
     
  • Pull tty fixes from Greg KH:
    "Here are two tty driver fixes for 3.12-rc4.

    One fixes the reported regression in the n_tty code that a number of
    people found recently, and the other one fixes an issue with xen
    consoles that broke in 3.10"

    * tag 'tty-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
    xen/hvc: allow xenboot console to be used again
    tty: Fix pty master read() after slave closes

    Linus Torvalds
     
  • Pull staging fixes from Greg KH:
    "Here are 4 tiny staging and iio driver fixes for 3.12-rc4. Nothing
    major, just some small fixes for reported issues"

    * tag 'staging-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
    staging: comedi: ni_65xx: (bug fix) confine insn_bits to one subdevice
    iio:magnetometer: Bugfix magnetometer default output registers
    iio: Remove debugfs entries in iio_device_unregister()
    iio: amplifiers: ad8366: Remove regulator_put

    Linus Torvalds
     

05 Oct, 2013

24 commits

  • When btrfs creates a bioset, we must also allocate the integrity data pool.
    Otherwise btrfs will crash when it tries to submit a bio to a checksumming
    disk:

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
    IP: [] mempool_alloc+0x4a/0x150
    PGD 2305e4067 PUD 23063d067 PMD 0
    Oops: 0000 [#1] PREEMPT SMP
    Modules linked in: btrfs scsi_debug xfs ext4 jbd2 ext3 jbd mbcache
    sch_fq_codel eeprom lpc_ich mfd_core nfsd exportfs auth_rpcgss af_packet
    raid6_pq xor zlib_deflate libcrc32c [last unloaded: scsi_debug]
    CPU: 1 PID: 4486 Comm: mount Not tainted 3.12.0-rc1-mcsum #2
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    task: ffff8802451c9720 ti: ffff880230698000 task.ti: ffff880230698000
    RIP: 0010:[] [] mempool_alloc+0x4a/0x150
    RSP: 0018:ffff880230699688 EFLAGS: 00010286
    RAX: 0000000000000001 RBX: 0000000000000000 RCX: 00000000005f8445
    RDX: 0000000000000001 RSI: 0000000000000010 RDI: 0000000000000000
    RBP: ffff8802306996f8 R08: 0000000000011200 R09: 0000000000000008
    R10: 0000000000000020 R11: ffff88009d6e8000 R12: 0000000000011210
    R13: 0000000000000030 R14: ffff8802306996b8 R15: ffff8802451c9720
    FS: 00007f25b8a16800(0000) GS:ffff88024fc80000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 0000000000000018 CR3: 0000000230576000 CR4: 00000000000007e0
    Stack:
    ffff8802451c9720 0000000000000002 ffffffff81a97100 0000000000281250
    ffffffff81a96480 ffff88024fc99150 ffff880228d18200 0000000000000000
    0000000000000000 0000000000000040 ffff880230e8c2e8 ffff8802459dc900
    Call Trace:
    [] bio_integrity_alloc+0x48/0x1b0
    [] bio_integrity_prep+0xac/0x360
    [] ? mempool_alloc+0x58/0x150
    [] ? alloc_extent_state+0x31/0x110 [btrfs]
    [] blk_queue_bio+0x1c9/0x460
    [] generic_make_request+0xca/0x100
    [] submit_bio+0x79/0x160
    [] btrfs_map_bio+0x48e/0x5b0 [btrfs]
    [] btree_submit_bio_hook+0xda/0x110 [btrfs]
    [] submit_one_bio+0x6a/0xa0 [btrfs]
    [] read_extent_buffer_pages+0x250/0x310 [btrfs]
    [] ? __radix_tree_preload+0x66/0xf0
    [] ? radix_tree_insert+0x95/0x260
    [] btree_read_extent_buffer_pages.constprop.128+0xb6/0x120
    [btrfs]
    [] read_tree_block+0x3a/0x60 [btrfs]
    [] open_ctree+0x139d/0x2030 [btrfs]
    [] btrfs_mount+0x53a/0x7d0 [btrfs]
    [] ? pcpu_alloc+0x8eb/0x9f0
    [] ? __kmalloc_track_caller+0x35/0x1e0
    [] mount_fs+0x20/0xd0
    [] vfs_kern_mount+0x76/0x120
    [] do_mount+0x200/0xa40
    [] ? strndup_user+0x5b/0x80
    [] SyS_mount+0x90/0xe0
    [] system_call_fastpath+0x1a/0x1f
    Code: 4c 8d 75 a8 4c 89 6d e8 45 89 e0 4c 8d 6f 30 48 89 5d d8 41 83 e0 af 48
    89 fb 49 83 c6 18 4c 89 7d f8 65 4c 8b 3c 25 c0 b8 00 00 8b 73 18 44 89 c7
    44 89 45 98 ff 53 20 48 85 c0 48 89 c2 74
    RIP [] mempool_alloc+0x4a/0x150
    RSP
    CR2: 0000000000000018
    ---[ end trace 7a96042017ed21e2 ]---

    Signed-off-by: Darrick J. Wong
    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Darrick J. Wong
     
  • Chris Mason
     
  • Pull CIFS fixes from Steve French:
    "Small set of cifs fixes. Most important is Jeff's fix that works
    around disconnection problems which can be caused by simultaneous use
    of user space tools (starting a long running smbclient backup then
    doing a cifs kernel mount) or multiple cifs mounts through a NAT, and
    Jim's fix to deal with reexport of cifs share.

    I expect to send two more cifs fixes next week (being tested now) -
    fixes to address an SMB2 unmount hang when server dies and a fix for
    cifs symlink handling of Windows "NFS" symlinks"

    * 'for-linus' of git://git.samba.org/sfrench/cifs-2.6:
    [CIFS] update cifs.ko version
    [CIFS] Remove ext2 flags that have been moved to fs.h
    [CIFS] Provide sane values for nlink
    cifs: stop trying to use virtual circuits
    CIFS: FS-Cache: Uncache unread pages in cifs_readpages() before freeing them

    Linus Torvalds
     
  • Pull PCI fix from Bjorn Helgaas:
    "We merged what was intended to be an MMCONFIG cleanup, but in fact,
    for systems without _CBA (which is almost everything), it broke
    extended config space for domain 0 and it broke all config space for
    other domains.

    This reverts the change"

    * tag 'pci-v3.12-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
    Revert "x86/PCI: MMCONFIG: Check earlier for MMCONFIG region at address zero"

    Linus Torvalds
     
  • This reverts commit 07f9b61c3915e8eb156cb4461b3946736356ad02.

    07f9b61c was intended to be a cleanup that didn't change anything, but in
    fact, for systems without _CBA (which is almost everything), it broke
    extended config space for domain 0 and all config space for other domains.

    Reference: http://lkml.kernel.org/r/20131004011806.GE20450@dangermouse.emea.sgi.com
    Reported-by: Hedi Berriche
    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     
  • Pull ACPI and power management fixes from Rafael Wysocki:

    - The resume part of user space driven hibernation (s2disk) is now
    broken after the change that moved the creation of memory bitmaps to
    after the freezing of tasks, because I forgot that the resume utility
    loaded the image before freezing tasks and needed the bitmaps for
    that. The fix adds special handling for that case.

    - One of recent commits changed the export of acpi_bus_get_device() to
    EXPORT_SYMBOL_GPL(), which was technically correct but broke existing
    binary modules using that function including one in particularly
    widespread use. Change it back to EXPORT_SYMBOL().

    - The intel_pstate driver sometimes fails to disable turbo if its
    no_turbo sysfs attribute is set. Fix from Srinivas Pandruvada.

    - One of recent cpufreq fixes forgot to update a check in cpufreq-cpu0
    which still (incorrectly) treats non-NULL as non-error. Fix from
    Philipp Zabel.

    - The SPEAr cpufreq driver uses a wrong variable type in one place
    preventing it from catching errors returned by one of the functions
    called by it. Fix from Sachin Kamat.

    * tag 'pm+acpi-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    ACPI: Use EXPORT_SYMBOL() for acpi_bus_get_device()
    intel_pstate: fix no_turbo
    cpufreq: cpufreq-cpu0: NULL is a valid regulator, part 2
    cpufreq: SPEAr: Fix incorrect variable type
    PM / hibernate: Fix user space driven resume regression

    Linus Torvalds
     
  • Pull xfs bugfixes from Ben Myers:
    "There are lockdep annotations for project quotas, a fix for dirent
    dtype support on v4 filesystems, a fix for a memory leak in recovery,
    and a fix for the build error that resulted from it. D'oh"

    * tag 'xfs-for-linus-v3.12-rc4' of git://oss.sgi.com/xfs/xfs:
    xfs: Use kmem_free() instead of free()
    xfs: fix memory leak in xlog_recover_add_to_trans
    xfs: dirent dtype presence is dependent on directory magic numbers
    xfs: lockdep needs to know about 3 dquot-deep nesting

    Linus Torvalds
     
  • Now avc_audit() has no more users with that parameter. Remove it.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • .. so get rid of it. The only indirect users were all the
    avc_has_perm() callers which just expanded to have a zero flags
    argument.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • free_device rcu callback, scheduled from btrfs_rm_dev_replace_srcdev,
    can be processed before btrfs_scratch_superblock is called, which would
    result in a use-after-free on btrfs_device contents. Fix this by
    zeroing the superblock before the rcu callback is registered.

    Cc: Stefan Behrens
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Josef Bacik

    Ilya Dryomov
     
  • The current implementation of worker threads in Btrfs has races in
    worker stopping code, which cause all kinds of panics and lockups when
    running btrfs/011 xfstest in a loop. The problem is that
    btrfs_stop_workers is unsynchronized with respect to check_idle_worker,
    check_busy_worker and __btrfs_start_workers.

    E.g., check_idle_worker race flow:

    btrfs_stop_workers(): check_idle_worker(aworker):
    - grabs the lock
    - splices the idle list into the
    working list
    - removes the first worker from the
    working list
    - releases the lock to wait for
    its kthread's completion
    - grabs the lock
    - if aworker is on the working list,
    moves aworker from the working list
    to the idle list
    - releases the lock
    - grabs the lock
    - puts the worker
    - removes the second worker from the
    working list
    ......
    btrfs_stop_workers returns, aworker is on the idle list
    FS is umounted, memory is freed
    ......
    aworker is waken up, fireworks ensue

    With this applied, I wasn't able to trigger the problem in 48 hours,
    whereas previously I could reliably reproduce at least one of these
    races within an hour.

    Reported-by: David Sterba
    Signed-off-by: Ilya Dryomov
    Signed-off-by: Josef Bacik

    Ilya Dryomov
     
  • The crash[1] is found by xfstests/generic/208 with "-o compress",
    it's not reproduced everytime, but it does panic.

    The bug is quite interesting, it's actually introduced by a recent commit
    (573aecafca1cf7a974231b759197a1aebcf39c2a,
    Btrfs: actually limit the size of delalloc range).

    Btrfs implements delay allocation, so during writeback, we
    (1) get a page A and lock it
    (2) search the state tree for delalloc bytes and lock all pages within the range
    (3) process the delalloc range, including find disk space and create
    ordered extent and so on.
    (4) submit the page A.

    It runs well in normal cases, but if we're in a racy case, eg.
    buffered compressed writes and aio-dio writes,
    sometimes we may fail to lock all pages in the 'delalloc' range,
    in which case, we need to fall back to search the state tree again with
    a smaller range limit(max_bytes = PAGE_CACHE_SIZE - offset).

    The mentioned commit has a side effect, that is, in the fallback case,
    we can find delalloc bytes before the index of the page we already have locked,
    so we're in the case of (delalloc_end 0).

    This ends with not locking delalloc pages but making ->writepage still
    process them, and the crash happens.

    This fixes it by just thinking that we find nothing and returning to caller
    as the caller knows how to deal with it properly.

    [1]:
    ------------[ cut here ]------------
    kernel BUG at mm/page-writeback.c:2170!
    [...]
    CPU: 2 PID: 11755 Comm: btrfs-delalloc- Tainted: G O 3.11.0+ #8
    [...]
    RIP: 0010:[] [] clear_page_dirty_for_io+0x1e/0x83
    [...]
    [ 4934.248731] Stack:
    [ 4934.248731] ffff8801477e5dc8 ffffea00049b9f00 ffff8801869f9ce8 ffffffffa02b841a
    [ 4934.248731] 0000000000000000 0000000000000000 0000000000000fff 0000000000000620
    [ 4934.248731] ffff88018db59c78 ffffea0005da8d40 ffffffffa02ff860 00000001810016c0
    [ 4934.248731] Call Trace:
    [ 4934.248731] [] extent_range_clear_dirty_for_io+0xcf/0xf5 [btrfs]
    [ 4934.248731] [] compress_file_range+0x1dc/0x4cb [btrfs]
    [ 4934.248731] [] ? detach_if_pending+0x22/0x4b
    [ 4934.248731] [] async_cow_start+0x35/0x53 [btrfs]
    [ 4934.248731] [] worker_loop+0x14b/0x48c [btrfs]
    [ 4934.248731] [] ? btrfs_queue_worker+0x25c/0x25c [btrfs]
    [ 4934.248731] [] kthread+0x8d/0x95
    [ 4934.248731] [] ? kthread_freezable_should_stop+0x43/0x43
    [ 4934.248731] [] ret_from_fork+0x7c/0xb0
    [ 4934.248731] [] ? kthread_freezable_should_stop+0x43/0x43
    [ 4934.248731] Code: ff 85 c0 0f 94 c0 0f b6 c0 59 5b 5d c3 0f 1f 44 00 00 55 48 89 e5 41 54 53 48 89 fb e8 2c de 00 00 49 89 c4 48 8b 03 a8 01 75 02 0b 4d 85 e4 74 52 49 8b 84 24 80 00 00 00 f6 40 20 01 75 44
    [ 4934.248731] RIP [] clear_page_dirty_for_io+0x1e/0x83
    [ 4934.248731] RSP
    [ 4934.280307] ---[ end trace 36f06d3f8750236a ]---

    Signed-off-by: Liu Bo
    Signed-off-by: Josef Bacik

    Liu Bo
     
  • If we crash with a log, remount and recover that log, and then crash before we
    can commit another transaction we will get transid verify errors on the next
    mount. This is because we were not zero'ing out the log when we committed the
    transaction after recovery. This is ok as long as we commit another transaction
    at some point in the future, but if you abort or something else goes wrong you
    can end up in this weird state because the recovery stuff says that the tree log
    should have a generation+1 of the super generation, which won't be the case of
    the transaction that was started for recovery. Fix this by removing the check
    and _always_ zero out the log portion of the super when we commit a transaction.
    This fixes the transid verify issues I was seeing with my force errors tests.
    Thanks,

    Signed-off-by: Josef Bacik

    Josef Bacik
     
  • Every single user passes in '0'. I think we had non-zero users back in
    some stone age when selinux_inode_permission() was implemented in terms
    of inode_has_perm(), but that complicated case got split up into a
    totally separate code-path so that we could optimize the much simpler
    special cases.

    See commit 2e33405785d3 ("SELinux: delay initialization of audit data in
    selinux_inode_permission") for example.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • This fixes a build failure caused by calling the free() function which
    does not exist in the Linux kernel.

    Signed-off-by: Thierry Reding
    Reviewed-by: Mark Tinguely
    Signed-off-by: Ben Myers

    (cherry picked from commit aaaae98022efa4f3c31042f1fdf9e7a0c5f04663)

    Thierry Reding
     
  • Free the memory in error path of xlog_recover_add_to_trans().
    Normally this memory is freed in recovery pass2, but is leaked
    in the error path.

    Signed-off-by: Mark Tinguely
    Reviewed-by: Eric Sandeen
    Signed-off-by: Ben Myers

    (cherry picked from commit 519ccb81ac1c8e3e4eed294acf93be00b43dcad6)

    tinguely@sgi.com
     
  • The determination of whether a directory entry contains a dtype
    field originally was dependent on the filesystem having CRCs
    enabled. This meant that the format for dtype beign enabled could be
    determined by checking the directory block magic number rather than
    doing a feature bit check. This was useful in that it meant that we
    didn't need to pass a struct xfs_mount around to functions that
    were already supplied with a directory block header.

    Unfortunately, the introduction of dtype fields into the v4
    structure via a feature bit meant this "use the directory block
    magic number" method of discriminating the dirent entry sizes is
    broken. Hence we need to convert the places that use magic number
    checks to use feature bit checks so that they work correctly and not
    by chance.

    The current code works on v4 filesystems only because the dirent
    size roundup covers the extra byte needed by the dtype field in the
    places where this problem occurs.

    Signed-off-by: Dave Chinner
    Reviewed-by: Ben Myers
    Signed-off-by: Ben Myers

    (cherry picked from commit 367993e7c6428cb7617ab7653d61dca54e2fdede)

    Dave Chinner
     
  • Michael Semon reported that xfs/299 generated this lockdep warning:

    =============================================
    [ INFO: possible recursive locking detected ]
    3.12.0-rc2+ #2 Not tainted
    ---------------------------------------------
    touch/21072 is trying to acquire lock:
    (&xfs_dquot_other_class){+.+...}, at: [] xfs_trans_dqlockedjoin+0x57/0x64

    but task is already holding lock:
    (&xfs_dquot_other_class){+.+...}, at: [] xfs_trans_dqlockedjoin+0x57/0x64

    other info that might help us debug this:
    Possible unsafe locking scenario:

    CPU0
    ----
    lock(&xfs_dquot_other_class);
    lock(&xfs_dquot_other_class);

    *** DEADLOCK ***

    May be due to missing lock nesting notation

    7 locks held by touch/21072:
    #0: (sb_writers#10){++++.+}, at: [] mnt_want_write+0x1e/0x3e
    #1: (&type->i_mutex_dir_key#4){+.+.+.}, at: [] do_last+0x245/0xe40
    #2: (sb_internal#2){++++.+}, at: [] xfs_trans_alloc+0x1f/0x35
    #3: (&(&ip->i_lock)->mr_lock/1){+.+...}, at: [] xfs_ilock+0x100/0x1f1
    #4: (&(&ip->i_lock)->mr_lock){++++-.}, at: [] xfs_ilock_nowait+0x105/0x22f
    #5: (&dqp->q_qlock){+.+...}, at: [] xfs_trans_dqlockedjoin+0x57/0x64
    #6: (&xfs_dquot_other_class){+.+...}, at: [] xfs_trans_dqlockedjoin+0x57/0x64

    The lockdep annotation for dquot lock nesting only understands
    locking for user and "other" dquots, not user, group and quota
    dquots. Fix the annotations to match the locking heirarchy we now
    have.

    Reported-by: Michael L. Semon
    Signed-off-by: Dave Chinner
    Reviewed-by: Ben Myers
    Signed-off-by: Ben Myers

    (cherry picked from commit f112a049712a5c07de25d511c3c6587a2b1a015e)

    Dave Chinner
     
  • Pull fuse bugfixes from Miklos Szeredi:
    "This contains two more fixes by Maxim for writeback/truncate races and
    fixes for RCU walk in fuse_dentry_revalidate()"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
    fuse: no RCU mode in fuse_access()
    fuse: readdirplus: fix RCU walk
    fuse: don't check_submounts_and_drop() in RCU walk
    fuse: fix fallocate vs. ftruncate race
    fuse: wait for writeback in fuse_file_fallocate()

    Linus Torvalds
     
  • Pull iommu fixes from Joerg Roedel:
    "A couple of fixes from the IOMMU side:

    - some small fixes for the new ARM-SMMU driver
    - a register offset correction for VT-d
    - add MAINTAINERS entry for drivers/iommu

    Overall no really big or intrusive changes"

    * tag 'iommu-fixes-v3.12-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
    x86/iommu: correct ICS register offset
    MAINTAINERS: add overall IOMMU section
    iommu/arm-smmu: don't enable SMMU device until probing has completed
    iommu/arm-smmu: fix iommu_present() test in init
    iommu/arm-smmu: fix a signedness bug

    Linus Torvalds
     
  • Pull ARM64 fixes/updates from Catalin Marinas:
    - Bug-fixes (get_user/put_user, incorrect register width for ASID,
    FPSIMD initialisation)
    - Kconfig clean-up
    - defconfig update

    * tag 'arm64-stable' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64:
    arm64: Remove duplicate DEBUG_STACK_USAGE config
    arm64: include VIRTIO_{MMIO,BLK} in defconfig
    arm64: include EXT4 in defconfig
    arm64: fix possible invalid FPSIMD initialization state
    arm64: use correct register width when retrieving ASID
    arm64: avoid multiple evaluation of ptr in get_user/put_user()

    Linus Torvalds
     
  • Pull MIPS fixes from Ralf Baechle:
    "Two small fixes for 3.12 only this week. I have a few more fixes
    pending but those are conceptually more complex so will have to wait
    for a bit longer"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
    MIPS: Fix forgotten preempt_enable() when CPU has inclusive pcaches
    MIPS: Alchemy: MTX-1: fix incorrect placement of __initdata tag

    Linus Torvalds
     
  • Pull x86 fixes from Ingo Molnar:
    "Two simplefb fixes"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/simplefb: Mark framebuffer mem-resources as IORESOURCE_BUSY to avoid bootup warning
    x86/simplefb: Fix overflow causing bogus fall-back

    Linus Torvalds
     
  • Pull irq fix from Ingo Molnar:
    "Frederic's minimal fix for hardirq/softirq nesting crashes"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    irq: Force hardirq exit's softirq processing on its own stack

    Linus Torvalds
     

04 Oct, 2013

3 commits

  • We need to free the ld_active list head before jumping into the callback
    routine. Otherwise the callback could run into issue_pending and change
    our ld_active list head we just going to free. This will run the channel
    list into an currupted and undefined state.

    Signed-off-by: Michael Grzeschik
    Signed-off-by: Vinod Koul

    Michael Grzeschik
     
  • The tasklet and irqhandler are using spin_lock while other routines are
    using spin_lock_irqsave/restore. This leads to lockdep issues as
    described bellow. This patch is changing the code to use
    spinlock_irq_save/restore in both code pathes.

    As imxdma_xfer_desc always gets called with spin_lock_irqsave lock held,
    this patch also removes the spare call inside the routine to avoid
    double locking.

    [ 403.358162] =================================
    [ 403.362549] [ INFO: inconsistent lock state ]
    [ 403.366945] 3.10.0-20130823+ #904 Not tainted
    [ 403.371331] ---------------------------------
    [ 403.375721] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
    [ 403.381769] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
    [ 403.386762] (&(&imxdma->lock)->rlock){?.-...}, at: [] imxdma_tasklet+0x20/0x134
    [ 403.395201] {IN-HARDIRQ-W} state was registered at:
    [ 403.400108] [] mark_lock+0x2a0/0x6b4
    [ 403.404798] [] __lock_acquire+0x650/0x1a64
    [ 403.410004] [] lock_acquire+0x94/0xa8
    [ 403.414773] [] _raw_spin_lock+0x54/0x8c
    [ 403.419720] [] dma_irq_handler+0x78/0x254
    [ 403.424845] [] handle_irq_event_percpu+0x38/0x1b4
    [ 403.430670] [] handle_irq_event+0x44/0x64
    [ 403.435789] [] handle_level_irq+0xd8/0xf0
    [ 403.440903] [] generic_handle_irq+0x28/0x38
    [ 403.446194] [] handle_IRQ+0x68/0x8c
    [ 403.450789] [] avic_handle_irq+0x3c/0x48
    [ 403.455811] [] __irq_svc+0x44/0x74
    [ 403.460314] [] cpu_startup_entry+0x88/0xf4
    [ 403.465525] [] rest_init+0xb8/0xe0
    [ 403.470045] [] start_kernel+0x28c/0x2d4
    [ 403.474986] [] 0xa0008040
    [ 403.478709] irq event stamp: 50854
    [ 403.482140] hardirqs last enabled at (50854): [] tasklet_action+0x38/0xdc
    [ 403.489954] hardirqs last disabled at (50853): [] tasklet_action+0x20/0xdc
    [ 403.497761] softirqs last enabled at (50850): [] _local_bh_enable+0x14/0x18
    [ 403.505741] softirqs last disabled at (50851): [] irq_exit+0x88/0xdc
    [ 403.513026]
    [ 403.513026] other info that might help us debug this:
    [ 403.519593] Possible unsafe locking scenario:
    [ 403.519593]
    [ 403.525548] CPU0
    [ 403.528020] ----
    [ 403.530491] lock(&(&imxdma->lock)->rlock);
    [ 403.534828]
    [ 403.537474] lock(&(&imxdma->lock)->rlock);
    [ 403.541983]
    [ 403.541983] *** DEADLOCK ***
    [ 403.541983]
    [ 403.547951] no locks held by swapper/0.
    [ 403.551813]
    [ 403.551813] stack backtrace:
    [ 403.556222] CPU: 0 PID: 0 Comm: swapper Not tainted 3.10.0-20130823+ #904
    [ 403.563039] Backtrace:
    [ 403.565581] [] (dump_backtrace+0x0/0x10c) from [] (show_stack+0x18/0x1c)
    [ 403.574054] r6:00000000 r5:c05c51d8 r4:c040bd58 r3:00200000
    [ 403.579872] [] (show_stack+0x0/0x1c) from [] (dump_stack+0x20/0x28)
    [ 403.587955] [] (dump_stack+0x0/0x28) from [] (print_usage_bug.part.28+0x224/0x28c)
    [ 403.597340] [] (print_usage_bug.part.28+0x0/0x28c) from [] (mark_lock+0x440/0x6b4)
    [ 403.606682] r8:c004a41c r7:00000000 r6:c040bd58 r5:c040c040 r4:00000002
    [ 403.613566] [] (mark_lock+0x0/0x6b4) from [] (__lock_acquire+0x6cc/0x1a64)
    [ 403.622244] [] (__lock_acquire+0x0/0x1a64) from [] (lock_acquire+0x94/0xa8)
    [ 403.631010] [] (lock_acquire+0x0/0xa8) from [] (_raw_spin_lock+0x54/0x8c)
    [ 403.639614] [] (_raw_spin_lock+0x0/0x8c) from [] (imxdma_tasklet+0x20/0x134)
    [ 403.648434] r6:c3847010 r5:c040e890 r4:c38470d4
    [ 403.653194] [] (imxdma_tasklet+0x0/0x134) from [] (tasklet_action+0x8c/0xdc)
    [ 403.662013] r8:c0599160 r7:00000000 r6:00000000 r5:c040e890 r4:c3847114 r3:c019d75c
    [ 403.670042] [] (tasklet_action+0x0/0xdc) from [] (__do_softirq+0xe4/0x1f0)
    [ 403.678687] r7:00000101 r6:c0402000 r5:c059919c r4:00000001
    [ 403.684498] [] (__do_softirq+0x0/0x1f0) from [] (irq_exit+0x88/0xdc)
    [ 403.692652] [] (irq_exit+0x0/0xdc) from [] (handle_IRQ+0x6c/0x8c)
    [ 403.700514] r4:00000030 r3:00000110
    [ 403.704192] [] (handle_IRQ+0x0/0x8c) from [] (avic_handle_irq+0x3c/0x48)
    [ 403.712664] r5:c0403f28 r4:c0593ebc
    [ 403.716343] [] (avic_handle_irq+0x0/0x48) from [] (__irq_svc+0x44/0x74)
    [ 403.724733] Exception stack(0xc0403f28 to 0xc0403f70)
    [ 403.729841] 3f20: 00000001 00000004 00000000 20000013 c0402000 c04104a8
    [ 403.738078] 3f40: 00000002 c0b69620 a0004000 41069264 a03fb5f4 c0403f7c c0403f40 c0403f70
    [ 403.746301] 3f60: c004b92c c0009e74 20000013 ffffffff
    [ 403.751383] r6:ffffffff r5:20000013 r4:c0009e74 r3:c004b92c
    [ 403.757210] [] (arch_cpu_idle+0x0/0x4c) from [] (cpu_startup_entry+0x88/0xf4)
    [ 403.766161] [] (cpu_startup_entry+0x0/0xf4) from [] (rest_init+0xb8/0xe0)
    [ 403.774753] [] (rest_init+0x0/0xe0) from [] (start_kernel+0x28c/0x2d4)
    [ 403.783051] r6:c03fc484 r5:ffffffff r4:c040a0e0
    [ 403.787797] [] (start_kernel+0x0/0x2d4) from [] (0xa0008040)

    Signed-off-by: Michael Grzeschik
    Signed-off-by: Vinod Koul

    Michael Grzeschik
     
  • When perparing cyclic_dma buffers by the sound layer, it will dump the
    following lockdep trace. The leading snd_pcm_action_single get called
    with read_lock_irq called. To fix this, we change the kcalloc call from
    GFP_KERNEL to GFP_ATOMIC.

    WARNING: at kernel/lockdep.c:2740 lockdep_trace_alloc+0xcc/0x114()
    DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags))
    Modules linked in:
    CPU: 0 PID: 832 Comm: aplay Not tainted 3.11.0-20130823+ #903
    Backtrace:
    [] (dump_backtrace+0x0/0x10c) from [] (show_stack+0x18/0x1c)
    r6:c004c090 r5:00000009 r4:c2e0bd18 r3:00404000
    [] (show_stack+0x0/0x1c) from [] (dump_stack+0x20/0x28)
    [] (dump_stack+0x0/0x28) from [] (warn_slowpath_common+0x54/0x70)
    [] (warn_slowpath_common+0x0/0x70) from [] (warn_slowpath_fmt+0x38/0x40)
    r8:00004000 r7:a3b90000 r6:000080d0 r5:60000093 r4:c2e0a000 r3:00000009
    [] (warn_slowpath_fmt+0x0/0x40) from [] (lockdep_trace_alloc+0xcc/0x114)
    r3:c03955d8 r2:c03907db
    [] (lockdep_trace_alloc+0x0/0x114) from [] (__kmalloc+0x34/0x118)
    r6:000080d0 r5:c3800120 r4:000080d0 r3:c040a0f8
    [] (__kmalloc+0x0/0x118) from [] (imxdma_prep_dma_cyclic+0x64/0x168)
    r7:a3b90000 r6:00000004 r5:c39d8420 r4:c3847150
    [] (imxdma_prep_dma_cyclic+0x0/0x168) from [] (snd_dmaengine_pcm_trigger+0xa8/0x160)
    [] (snd_dmaengine_pcm_trigger+0x0/0x160) from [] (soc_pcm_trigger+0x90/0xb4)
    r8:c058c7b0 r7:c3b8140c r6:c39da560 r5:00000001 r4:c3b81000
    [] (soc_pcm_trigger+0x0/0xb4) from [] (snd_pcm_do_start+0x2c/0x38)
    r7:00000000 r6:00000003 r5:c058c7b0 r4:c3b81000
    [] (snd_pcm_do_start+0x0/0x38) from [] (snd_pcm_action_single+0x40/0x6c)
    [] (snd_pcm_action_single+0x0/0x6c) from [] (snd_pcm_action_lock_irq+0x7c/0x9c)
    r7:00000003 r6:c3b810f0 r5:c3b810f0 r4:c3b81000
    [] (snd_pcm_action_lock_irq+0x0/0x9c) from [] (snd_pcm_common_ioctl1+0x7f8/0xfd0)
    r8:c3b7f888 r7:005407b8 r6:c2c991c0 r5:c3b81000 r4:c3b81000 r3:00004142
    [] (snd_pcm_common_ioctl1+0x0/0xfd0) from [] (snd_pcm_playback_ioctl1+0x464/0x488)
    [] (snd_pcm_playback_ioctl1+0x0/0x488) from [] (snd_pcm_playback_ioctl+0x34/0x40)
    r8:c3b7f888 r7:00004142 r6:00000004 r5:c2c991c0 r4:005407b8
    [] (snd_pcm_playback_ioctl+0x0/0x40) from [] (vfs_ioctl+0x30/0x44)
    [] (vfs_ioctl+0x0/0x44) from [] (do_vfs_ioctl+0x55c/0x5c0)
    [] (do_vfs_ioctl+0x0/0x5c0) from [] (SyS_ioctl+0x40/0x68)
    [] (SyS_ioctl+0x0/0x68) from [] (ret_fast_syscall+0x0/0x44)
    r8:c0009544 r7:00000036 r6:bedeaa58 r5:00000000 r4:000000c0

    Signed-off-by: Michael Grzeschik
    Signed-off-by: Vinod Koul

    Michael Grzeschik