Permalink
Switch branches/tags
Commits on Dec 5, 2011
  1. sysctl: add duplicate entry and sanity ctl_table checks

    luciang committed May 4, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  2. sysctl: faster tree-based sysctl implementation

    luciang committed May 2, 2011
    The old implementation used inefficient algorithms for lookup, readdir
    and registration.
    
    This patch introduces an improved algorithm:
    - lower memory consumption,
    - better time complexity for lookup/readdir/registration.
    
    Locking is a bit heavier in this algorithm (in this patch: reader
    locks for lookup/readdir, writer locks for register/unregister; in a
    later patch in this series: RCU + spin-lock). I'll address this
    locking issue later in this commit.
    
    I will shortly describe the previous algorithm, the new one and brag
    at the end with an endless list of improvements and new limitations.
    
    = Old algorithm =
    
    == Description ==
    We created a ctl_table_header for each registered sysctl table. The
    header's role is to maintain sysctl internal data, reference counting
    and as a token to unregister the table.
    
    All headers were put in a list in the order of registration without
    regard to the position of the tables in the sysctl tree. Headers were
    also 'attached' one to another to (somewhat) speed up lookup/readdir.
    
    Attaching a header meant looking at each other already registered
    header and comparing the paths to the tables. A newly registered
    header would be attached to the first header with which it would share
    most of it's path.
    
    e.g. paths registered: /, /a/b/c, /a/b/c/d, /a/x, /a/x/y, /a/z
         tree:
      /
      + /a/b/c
         |   + /a/b/c/d
         + /a/x
         | /a/x/y
         + /a/z
    
    == Time complexity ==
    
    - register N tables would take O(N^2) steps (see above)
    
    - lookup: if the item searched for is not found in the current header,
      iterate the list of headers until you find another header that's
      attached to the current position in the header's table. Lookups for
      elements that are in a header registered under the current position
      or inexistent elements would take O(N) steps each.
    
    - readdir: after searching the current headers table in the current
      position, always do an O(N) search for a header attached to the
      current table position.
    
    == Memory ==
    
    Each header was allocated some data and a variable-length path.
    O(1) with kzalloc/kfree.
    
    = New algorithm =
    
    == Description ==
    
    Reuses the 'ctl_table_header' concept but with two distinct meanings:
    - as a wrapper of a table registered by the user
    - as a directory entry.
    
    Registering the paths from the above example gives this tree:
     paths: /, /a/b/c, /a/b/c/d, /a/x, /a/x/y, /a/z
     tree:
         /: .subdirs = a
           a: .subdirs = b x z
             b: subdirs = c
                c: subdirs = d
    	      d:
             x: subdirs = y
    	   y:
             z:
    
    Each directory gets a header. Each header has a parent (except root)
    and two lists:
     - ctl_subdirs: list of sub-directories - other headers
     - ctl_tables: list of headers that wrap a ctl_table array
    
    Because the directory structure is now maintained as ctl_table_header
    objects, we needed to remove the .child from ctl_tables (this explains
    the previous patches). A ctl_table array represents a list of files.
    
    == Time complexity ==
    
    - registration of N headers. Registration means adding new directories
      at each level or incrementing an existing directory's refcount.
    
      - O(N * lnN) - if the paths to the headers are evenly distributed
    
      - O(N^2) - if most of the headers registered are children of the
        same parent directory (searching the list of subdirs takes O(N)).
        There are cases where this happens (e.g. registering sysctl
        entries for net devices under /proc/sys/net/ipv4|6/conf/device).
    
        A few later patches will add an optimisation, to fix locations
        that might trigger the O(N^2) issue.
    
    - lookup: O(len(subdirs) + sum(len(tarr) for each tarr in ctl_tables)
      - could be made better:
         - sort ctl_subdirs (for binary search)
         - replace ctl_subdirs with a hash-table (increase memory footprint)
         - sort ctl_table entries at registration time (for binary search).
        Could be done, but I'm too lazy to do it now.
    
    - readdir: O(len(subdirs) + sum(len(tarr) for each tarr in ctl_tables)
       - can't get any better than this :)
    
    == Memory complexity ==
    
    Although we create more ctl_table_header (one for each directory, one
    for each table, and because we deleted the .child from ctl_table there
    are more tables registered than before this patch) we remove the need
    to store a full path (from too to the table) as was done in the old
    solution => a O(N) small memory gain with report to the old algo.
    
    = Limitations =
    
    == ctl_table will lose .child => some code uglyfication  ==
    
    Registering tables with multiple directories and files cannot be done
    in a single operation: there must be at least a table registered for
    each directory. This make code that registers sysctls uglier.
    
    The first patches in this series made the conversion from paths
    encoded with .child to paths specified by ctl_path. Later patches will
    convert all users of .child to ctl_path and the conversion layer will
    be deleted.
    
    == Handling of netns specific paths is weirder ==
    
    The algorithm descriptions from above are simplified. In reality the
    code needs to handle directories and files that must be visible only
    in some net namespaces. E.g. the /proc/sys/net/ipv4/conf/DEVICENAME/
    directory and it's files must be visible only in the netns of the
    'DEVICENAME' device.
    
    The old algorithm used secondary lists that indexed all netns specific
    headers (one such list per netns). The old-algorithm description is
    still valid, with the mention that besides searching the global list,
    the algorithm would also look into the current netns' list of
    headers. This scales perfectly in rapport to the number of network
    namespaces.
    
    The new algorithm does something similar, but a bit more complicated.
    We also use netns specific lists of directories/tables and store them
    in a special directory ctl_table_header (which I dubbed the
    "netns-correspondent" of another directory - I'm not very pleased with
    the name either).
    
    When registering a netns specific table, we will create a
    "netns-correspondent" to the last directory that is not netns specific
    in that path.
    
    E.g.: we're registering a netns specific table for 'lo':
          common path: /proc/sys/net/ipv4/
           netns path: /proc/sys/net/ipv4/conf/lo/
    
       We'll create an (unnamed) netns correspondent for 'ipv4' which will
       have 'conf' as it's subdir.
    
    E.g.: We're registering a netns specific file in /proc/sys/net/core/somaxconn
          common path: /proc/sys/net/core/
           netns path: /proc/sys/net/core/
    
    We'll create an (unnamed) netns correspondent for 'core' with the
    table containing 'somaxconn' in ctl_tables.
    
    All netns correspondents of one netns are held in a single list, and
    each netns gets it own list. This keeps the algorithm complexity
    indifferent of the number of network namespaces (as was the old one).
    
    However, now only a smaller part of directories are members of this
    list, improving register/lookup/readdir time complexity.
    
    There is one ugly limitation that stems from this approach.
    E.g.: register these files in this order:
     - register common         /dir1/file-common1
     - register netns specific /dir1/dir2/file-netns
     - register common         /dir1/dir2/file-common2
    
      We'll have this tree:
       'dir1' { .subdirs = ['dir2'], .tables = ['file-common1'] }
         ^                    |
         |                    -> { .subdirs = [], .tables = ['file-common2'] }
         |
         | (unnamed netns-corresp for dir1)
         -> { .subdir = ['dir2'] }
                            |
                            -> { .subdirs = [], .tables = ['file-netns'] }
    
    readdir: when we list the contents of 'dir1' we'll see it has two
             sub-directories named 'dir2' each with a file in it.
    
    lookup: lookup of /dir1/dir2/file-netns will not work because we find
            'dir2' as a subdir of 'dir1' and stick with it and never look
            into the netns correspondent of 'dir1'.
    
    This can be fixed in two ways:
    
    - A) by making sure to never register a netns specific directory and
      after that register that directory as a common one. From what I can
      tell there isn't such a problem in the kernel at the moment, but I
      did not study the source in detail.
    
    - B) by increasing the complexity of the code:
    
      - readdir: looking at both lists and comparing if we have already
                 listed a directory as common, so we don't list twice.
                 -> For imbalanced trees this can make readdir O(N^2) :(
    
      - register: the netns 'dir2' from the example above needs to be
                  connected to the common 'dir2' when 'dir2' is
                  registered. I'm not even going to thing of how time
                  complexity/ugliness is going to explode here.
    
    A later patch will implement version B): checks to make sure the
    registration order is maintained (a non-netns specific directory will
    not be added after netns specific directory with the same path was
    already added).
    
    = Change summary =
    
    * include/linux/sysctl.h
      - removed _set and _root, replaced with _group
    
      - netns correspondent directories are held in each netns's
        group->corresp_list
    
      - reused the header structure to represent directories which don't
        use ctl_table_arg, but store the directory name directly.
    
      - each directory header also gets two lists: subdirs and tables
    
    * fs/proc/proc_sysctl.c
      - a proc inode has ->sysctl_entry set only for files, not
        directories as these store the dirname directly
    
      - lookup:
         - take the dirs read-lock and iterate through subdirs and tables
         - if nothing is found, try the dir's netns-correspondent
    
      - scan: list every subdir and file that was not listed before
    
      - readdir: scan the current dir and it's netns correspondent
    
    * kernel/sysctl.c
      - inlines the code of use_table/unuse_table as it is not used
        elsewhere (used to be called from __register, but aren't any more)
    
      - adds routines to get/set the netns-correspondent
    
      - adds routines to protect the subdirs/tables lists (rwsem)
    
      - __register_sysctl_paths:
        - preallocate ctl_table_header for every dir in 'path'
        - increase the ctl_header_refs of every existing directory
        - if the group needs a netns-correspondent it is created for the
          last existing directory that is part of the non-netns specific
          path.
        - all the non-existing directories are added as children of their
          parent's subdir lists.
    
       - unregister:
         - wait until no one uses the header
         - for normal directories and table-wrapper headers take the
           parent's write lock to be able to delete something from one of
           it's lists (ctl_subdir or ctl_tables).
         - netns-correspondent headers must take the netns group list lock
           before deleting.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  3. sysctl: introduce ctl_table_group and ctl_table_group_ops

    luciang committed May 2, 2011
    ctl_table_group will replace in the future ctl_table_root and ctl_table_set.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  4. sysctl: move removal from list out of start_unregistering

    luciang committed May 3, 2011
    Later on we'll switch form a global list protected by the sysctl_lock
    spin lock to rwsem protected per-header lists.
    
    At that point we'll need to hold the parent header's rwlock to remove
    the header from the list, not the sysctl_lock spin lock.
    
    As start_unregistering is called under the sysctl_lock, we move the
    list removal out.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  5. sysctl: simplify ->permissions hook

    luciang committed May 2, 2011
    The @root parameter was not used at all.
    
    The @namespaces parameter was used to transmit current->nsproxy. We
    can access current->nsproxy directly in the ->permissions function, no
    need to send it.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  6. sysctl: rename (un)use_table to __sysctl_(un)use_header

    luciang committed May 3, 2011
    The former names were not semantically correct, as the use/unuse was
    related to the header, not the table. Also this makes it clearer that
    sysctl_use_header and __sysctl_use_header are related (one takes the
    spin lock inside and the other doesn't).
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  7. sysctl: rename sysctl_head_get/put to sysctl_proc_inode_get/put

    luciang committed May 1, 2011
    Clarify the purpose of those references. No functional changes.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  8. sysctl: split ->count into ctl_procfs_refs and ctl_header_refs

    luciang committed May 1, 2011
    This is not necessary at this point, but will be later when we replace
    the sysctl implementation with one that uses ctl_table_header objects
    as directories.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  9. sysctl: rename sysctl_head_next to sysctl_use_next_header

    luciang committed May 1, 2011
    The new names makes it clear that this increments ctl_use_refs and
    that _unuse must be used on the header. No functional change.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  10. sysctl: rename sysctl_head_grab/finish to sysctl_use_header/unuse

    luciang committed May 1, 2011
    The function names are clearer and they reflect the reference counter
    that is being inc/decremented. No functional change, just aesthetics.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  11. sysctl: rename ->used to ->ctl_use_refs

    luciang committed May 1, 2011
    In a later patch I will split the 'count' counter in two. We need to
    have a clear distinction between the counters to be able to understand
    the code.
    
    This counts the number of references to this object from places that
    can tinker with it's internals (e.g. ctl_table, ctl_entry,
    attached_to, attached_by, etc.).
    
    The removal of `header->used = 0;` from __register_sysctl_paths_impl
    does not change anything, as `header` is allocated with kzalloc.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  12. sysctl: delete useless grab_header function

    luciang committed May 1, 2011
    There are lots of header grabbing/getting functions around. We'll
    start changing them later on and this one will just make conversions
    harder. It doesn't help much, so kill it!
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  13. sysctl: sysctl_head_grab defaults to root header on NULL

    luciang committed May 1, 2011
    The code that could send NULL to sysctl_head_grab is grab_header
    because for the root sysctl directory ('/proc/sys/')
    PROC_I(inode)->sysctl is NULL.
    
    For it we used to return root_table_header indirectly through a call
    to sysctl_head_next(NULL). Now we default to the root header here.
    
    The BUG() has not been triggered until now so we can assume no one
    else is sending NULL here.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  14. sysctl: simplify find_in_table

    luciang committed May 1, 2011
    The if (!p->procname) check is useless because the loop condition
    prevents it from happening.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  15. sysctl: remove useless ctl_table->parent field

    luciang committed Feb 4, 2011
    The 'parent' field was added for selinux in:
        commit d912b0c
        [PATCH] sysctl: add a parent entry to ctl_table and set the parent entry
    
    and then was used for sysctl_check_table.
    
    Both of the users have found other implementations.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  16. sysctl: faster reimplementation of sysctl_check_table

    luciang committed Feb 4, 2011
    Determining the parent of a node at depth d
    - previous implementation: O(d)
    - current  implementation: O(1)
    
    Printing the path to a node at depth d
    - previous implementation: O(d^2)
    - current  implementation: O(d)
    
    This comes with a small cost: we use an array ('parents') holding as many
    pointers as there can be sysctl levels (currently CTL_MAXNAME=10).
    
    The 'parents' array of pointers holds the same values as the
    ctl_table->parents field because the function that updates ->parents
    (sysctl_set_parent) is called with either NULL (for root nodes) or
    with sysctl_set_parent(table, table->child).
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  17. sysctl: no-child: manually register root tables

    luciang committed Apr 14, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  18. sysctl: no-child: manually register fs/epoll

    luciang committed Apr 14, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  19. sysctl: no-child: manually register fs/inotify

    luciang committed Apr 14, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  20. sysctl: no-child: manually register kernel/keys

    luciang committed Apr 14, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  21. sysctl: no-child: manually register kernel/usermodehelper

    luciang committed Jun 2, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  22. sysctl: no-child: manually register kernel/random

    luciang committed Apr 13, 2011
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  23. sysctl: call sysctl_init before the first sysctl registration

    luciang committed May 1, 2011
    In the next patch key_init() will be changed to register a sysctl
    table. In preparation, we call sysctl_init() before it.
    
    Also, rename net/sysctl_net.c's sysctl_init so the two don't clash.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  24. sysctl: register only tables of sysctl files

    luciang committed May 13, 2011
    We're trying to move away from using ctl_tables to encode directories.
    
    The old sysctl registration function can attach a whole sub-tree of
    sysctls with directories and tables of files in one single operation.
    
    This patch splits the registration of a complex ctl_table array which
    may have arbitrary numbers of directories (->child != NULL) and tables
    of files into a series of simpler registrations that only register
    tables of files.
    
    Graphically:
    
       register('dir', { + file-a
                         + file-b
                         + subdir1
                           + file-c
                         + subdir2
                           + file-d
                           + file-e })
    
    is transformed into:
       wrapper->subheaders[0] = register('dir', {file1-a, file1-b})
       wrapper->subheaders[1] = register('dir/subdir1', {file-c})
       wrapper->subheaders[2] = register('dir/subdir2', {file-d, file-e})
       return wrapper
    
    No attempt was made to optimise this function. This hack is only
    useful until all in-kernel users that register sysctl tables get rid
    of the .child member of ctl_table and manually register arrays of
    ctl_table files themselves.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
  25. sysctl: introduce temporary sysctl wrappers

    luciang committed May 12, 2011
    These wrappers are only needed until the `child` member of
    `struct ctl_table` gets removed.
    
    No semantic changes.
    
    Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
Commits on Dec 1, 2011
  1. Linux 3.2-rc4

    torvalds committed Dec 1, 2011
  2. Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/k…

    torvalds committed Dec 1, 2011
    …ernel/git/jlbec/ocfs2
    
    * 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: (31 commits)
      ocfs2: avoid unaligned access to dqc_bitmap
      ocfs2: Use filemap_write_and_wait() instead of write_inode_now()
      ocfs2: honor O_(D)SYNC flag in fallocate
      ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2
      ocfs2: send correct UUID to cleancache initialization
      ocfs2: Commit transactions in error cases -v2
      ocfs2: make direntry invalid when deleting it
      fs/ocfs2/dlm/dlmlock.c: free kmem_cache_zalloc'd data using kmem_cache_free
      ocfs2: Avoid livelock in ocfs2_readpage()
      ocfs2: serialize unaligned aio
      ocfs2: Implement llseek()
      ocfs2: Fix ocfs2_page_mkwrite()
      ocfs2: Add comment about orphan scanning
      ocfs2: Clean up messages in the fs
      ocfs2/cluster: Cluster up now includes network connections too
      ocfs2/cluster: Add new function o2net_fill_node_map()
      ocfs2/cluster: Fix output in file elapsed_time_in_ms
      ocfs2/dlm: dlmlock_remote() needs to account for remastery
      ocfs2/dlm: Take inflight reference count for remotely mastered resources too
      ocfs2/dlm: Cleanup dlm_wait_for_node_death() and dlm_wait_for_node_recovery()
      ...
  3. ocfs2: avoid unaligned access to dqc_bitmap

    mita authored and jlbec committed Nov 15, 2011
    The dqc_bitmap field of struct ocfs2_local_disk_chunk is 32-bit aligned,
    but not 64-bit aligned.  The dqc_bitmap is accessed by ocfs2_set_bit(),
    ocfs2_clear_bit(), ocfs2_test_bit(), or ocfs2_find_next_zero_bit().  These
    are wrapper macros for ext2_*_bit() which need to take an unsigned long
    aligned address (though some architectures are able to handle unaligned
    address correctly)
    
    So some 64bit architectures may not be able to access the dqc_bitmap
    correctly.
    
    This avoids such unaligned access by using another wrapper functions for
    ext2_*_bit().  The code is taken from fs/ext4/mballoc.c which also need to
    handle unaligned bitmap access.
    
    Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
    Acked-by: Joel Becker <jlbec@evilplan.org>
    Cc: Mark Fasheh <mfasheh@suse.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Joel Becker <jlbec@evilplan.org>
  4. Merge branch 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/ker…

    torvalds committed Dec 1, 2011
    …nel/git-cur/linux-2.6-arm
    
    * 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm:
      ARM: 7182/1: ARM cpu topology: fix warning
      ARM: 7181/1: Restrict kprobes probing SWP instructions to ARMv5 and below
      ARM: 7180/1: Change kprobes testcase with unpredictable STRD instruction
      ARM: 7177/1: GIC: avoid skipping non-existent PPIs in irq_start calculation
      ARM: 7176/1: cpu_pm: register GIC PM notifier only once
      ARM: 7175/1: add subname parameter to mfp_set_groupg callers
      ARM: 7174/1: Fix build error in kprobes test code on Thumb2 kernels
      ARM: 7172/1: dma: Drop GFP_COMP for DMA memory allocations
      ARM: 7171/1: unwind: add unwind directives to bitops assembly macros
      ARM: 7170/2: fix compilation breakage in entry-armv.S
      ARM: 7168/1: use cache type functions for arch_get_unmapped_area
      ARM: perf: check that we have a platform device when reserving PMU
      ARM: 7166/1: Use PMD_SHIFT instead of PGDIR_SHIFT in dma-consistent.c
      ARM: 7165/2: PL330: Fix typo in _prepare_ccr()
      ARM: 7163/2: PL330: Only register usable channels
      ARM: 7162/1: errata: tidy up Kconfig options for PL310 errata workarounds
      ARM: 7161/1: errata: no automatic store buffer drain
      ARM: perf: initialise used_mask for fake PMU during validation
      ARM: PMU: remove pmu_init declaration
      ARM: PMU: re-export release_pmu symbol to modules
  5. Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    torvalds committed Dec 1, 2011
    …/git/mason/linux-btrfs
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
      Btrfs: fix meta data raid-repair merge problem
      Btrfs: skip allocation attempt from empty cluster
      Btrfs: skip block groups without enough space for a cluster
      Btrfs: start search for new cluster at the beginning
      Btrfs: reset cluster's max_size when creating bitmap
      Btrfs: initialize new bitmaps' list
      Btrfs: fix oops when calling statfs on readonly device
      Btrfs: Don't error on resizing FS to same size
      Btrfs: fix deadlock on metadata reservation when evicting a inode
      Fix URL of btrfs-progs git repository in docs
      btrfs scrub: handle -ENOMEM from init_ipath()
  6. Btrfs: fix meta data raid-repair merge problem

    Jan Schmidt authored and chrismason-xx committed Dec 1, 2011
    Commit 4a54c8c introduced raid-repair, killing the individual
    readpage_io_failed_hook entries from inode.c and disk-io.c. Commit
    4bb31e9 introduced new readahead code, adding a readpage_io_failed_hook to
    disk-io.c.
    
    The raid-repair commit had logic to disable raid-repair, if
    readpage_io_failed_hook is set. Thus, the readahead commit effectively
    disabled raid-repair for meta data.
    
    This commit changes the logic to always attempt raid-repair when needed and
    call the readpage_io_failed_hook in case raid-repair fails. This is much
    more straight forward and should have been like that from the beginning.
    
    Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
    Reported-by: Stefan Behrens <sbehrens@giantdisaster.de>
    Signed-off-by: Chris Mason <chris.mason@oracle.com>
  7. Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    torvalds committed Dec 1, 2011
    …/git/roland/infiniband
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
      IB: Fix RCU lockdep splats
      IB/ipoib: Prevent hung task or softlockup processing multicast response
      IB/qib: Fix over-scheduling of QSFP work
      RDMA/cxgb4: Fix retry with MPAv1 logic for MPAv2
      RDMA/cxgb4: Fix iw_cxgb4 count_rcqes() logic
      IB/qib: Don't use schedule_work()
  8. Merge branch 'dt-for-linus' of git://sources.calxeda.com/kernel/linux

    torvalds committed Dec 1, 2011
    * 'dt-for-linus' of git://sources.calxeda.com/kernel/linux:
      of: Add Silicon Image vendor prefix
      of/irq: of_irq_init: add check for parent equal to child node
  9. Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    torvalds committed Dec 1, 2011
    …/git/broonie/regulator
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
      regulator: twl: fix twl4030 support for smps regulators
      regulator: fix use after free bug
      regulator: aat2870: Fix the logic of checking if no id is matched in aat2870_get_regulator
  10. Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git…

    torvalds committed Dec 1, 2011
    …/arm/arm-soc
    
    * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (45 commits)
      ARM: ux500: update defconfig
      ARM: u300: update defconfig
      ARM: at91: enable additional boards in existing soc defconfig files
      ARM: at91: refresh soc defconfig files for 3.2
      ARM: at91: rename defconfig files appropriately
      ARM: OMAP2+: Fix Compilation error when omap_l3_noc built as module
      ARM: OMAP2+: Remove empty io.h
      ARM: OMAP2: select ARM_AMBA if OMAP3_EMU is defined
      ARM: OMAP: smartreflex: fix IRQ handling bug
      ARM: OMAP: PM: only register TWL with voltage layer when device is present
      ARM: OMAP: hwmod: Fix the addr space, irq, dma count APIs
      arm: mx28: fix bit operation in clock setting
      ARM: imx: export imx_ioremap
      ARM: imx/mm-imx3: conditionally compile i.MX31 and i.MX35 code
      ARM: mx5: Fix checkpatch warnings in cpu-imx5.c
      MAINTAINERS: Add missing directory
      ARM: imx: drop 'ARCH_MX31' and 'ARCH_MX35'
      ARM: imx6q: move clock register map to machine_desc.map_io
      ARM: pxa168/gplugd: add the correct SSP device
      ARM: Update mach-types to fix mxs build breakage
      ...