17 Dec, 2009

6 commits

  • As predicted during code review, the sysctl(2) changes made systems with
    old glibc nearly unusable. About every command gives a:

    warning: process `ls' used the deprecated sysctl system call with 1.4

    warning in the log.

    I see this on a SUSE 10.0 system with glibc 2.3.5.

    Don't warn for this common case.

    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • …/git/tip/linux-2.6-tip

    * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (52 commits)
    perf record: Use per-task-per-cpu events for inherited events
    perf record: Properly synchronize child creation
    perf events: Allow per-task-per-cpu counters
    perf diff: Percent calcs should use double values
    perf diff: Change the default sort order to "dso,symbol"
    perf diff: Use perf_session__fprintf_hists just like 'perf record'
    perf report: Fix cut'n'paste error recently introduced
    perf session: Move perf report specific hits out of perf_session__fprintf_hists
    perf tools: Move hist entries printing routines from perf report
    perf report: Generalize perf_session__fprintf_hists()
    perf symbols: Move symbol filtering to event__preprocess_sample()
    perf symbols: Adopt the strlists for dso, comm
    perf symbols: Make symbol_conf global
    perf probe: Fix to show which probe point is not found
    perf probe: Check symbols in symtab/kallsyms
    perf probe: Check build-id of vmlinux
    perf probe: Reject second attempt of adding same-name event
    perf probe: Support event name for --add option
    perf probe: Add glob matching support on --del
    perf probe: Use strlist__for_each macros in probe-event.c
    ...

    Linus Torvalds
     
  • …nel/git/tip/linux-2.6-tip

    * 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    tracing: Fix return of trace_dump_stack()
    ksym_tracer: Fix bad cast
    tracing/power: Remove two exports
    tracing: Change event->profile_count to be int type
    tracing: Simplify trace_option_write()
    tracing: Remove useless trace option
    tracing: Use seq file for trace_clock
    tracing: Use seq file for trace_options
    function-graph: Allow writing the same val to set_graph_function
    ftrace: Call trace_parser_clear() properly
    ftrace: Return EINVAL when writing invalid val to set_ftrace_filter
    tracing: Move a printk out of ftrace_raw_reg_event_foo()
    tracing: Pull up calls to trace_define_common_fields()
    tracing: Extract duplicate ftrace_raw_init_event_foo()
    ftrace.h: Use common pr_info fmt string
    tracing: Add stack trace to irqsoff tracer
    tracing: Add trace_dump_stack()
    ring-buffer: Move resize integrity check under reader lock
    ring-buffer: Use sync sched protection on ring buffer resizing
    tracing: Fix wrong usage of strstrip in trace_ksyms

    Linus Torvalds
     
  • * 'module' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
    modpost: fix segfault with short symbol names
    module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y
    Kbuild: clear marker out of modpost
    module: make MODULE_SYMBOL_PREFIX into a CONFIG option
    ARM: unexport symbols used to implement floating point emulation
    ARM: use unified discard definition in linker script
    x86: don't export inline function
    sparc64: don't export static inline pci_ functions

    Linus Torvalds
     
  • * git://git.infradead.org/mtd-2.6: (90 commits)
    jffs2: Fix long-standing bug with symlink garbage collection.
    mtd: OneNAND: Fix test of unsigned in onenand_otp_walk()
    mtd: cfi_cmdset_0002, fix lock imbalance
    Revert "mtd: move mxcnd_remove to .exit.text"
    mtd: m25p80: add support for Macronix MX25L4005A
    kmsg_dump: fix build for CONFIG_PRINTK=n
    mtd: nandsim: add support for 4KiB pages
    mtd: mtdoops: refactor as a kmsg_dumper
    mtd: mtdoops: make record size configurable
    mtd: mtdoops: limit the maximum mtd partition size
    mtd: mtdoops: keep track of used/unused pages in an array
    mtd: mtdoops: several minor cleanups
    core: Add kernel message dumper to call on oopses and panics
    mtd: add ARM pismo support
    mtd: pxa3xx_nand: Fix PIO data transfer
    mtd: nand: fix multi-chip suspend problem
    mtd: add support for switching old SST chips into QRY mode
    mtd: fix M29W800D dev_id and uaddr
    mtd: don't use PF_MEMALLOC
    mtd: Add bad block table overrides to Davinci NAND driver
    ...

    Fixed up conflicts (mostly trivial) in
    drivers/mtd/devices/m25p80.c
    drivers/mtd/maps/pcmciamtd.c
    drivers/mtd/nand/pxa3xx_nand.c
    kernel/printk.c

    Linus Torvalds
     
  • In order to allow for per-task-per-cpu counters, useful for
    scalability when profiling task hierarchies, we allow installing
    events with event->cpu != -1 in task contexts.

    __perf_event_sched_in() already skips events where ->cpu
    mis-matches the current cpu, fix up __perf_install_in_context()
    and __perf_event_enable() to also respect this filter.

    This does lead to vary hard to interpret enabled/running times
    for such counters, but I don't see a simple solution for that.

    Signed-off-by: Peter Zijlstra
    Cc: Arnaldo Carvalho de Melo
    Cc: fweisbec@gmail.com
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

16 Dec, 2009

21 commits

  • Implement shrinking the reserved memory for crash kernel, if it is more
    than enough.

    For example, if you have already reserved 128M, now you just want 100M,
    you can do:

    # echo $((100*1024*1024)) > /sys/kernel/kexec_crash_size

    Note, you can only do this before loading the crash kernel.

    Signed-off-by: WANG Cong
    Cc: Neil Horman
    Acked-by: Eric W. Biederman
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Amerigo Wang
     
  • It decreases code size by 16 bytes on my gcc 4.4.1 on Core 2:
    text data bss dec hex filename
    4314 2216 8 6538 198a kernel/pid.o-BEFORE
    4298 2216 8 6522 197a kernel/pid.o-AFTER

    Signed-off-by: André Goddard Rosa
    Cc: Pekka Enberg
    Cc: Oleg Nesterov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    André Goddard Rosa
     
  • Avoid calling kfree() under pidmap spinlock, calling it afterwards.

    Normally kfree() is fast, but sometimes it can be slow, so avoid
    calling it under the spinlock if we can do it.

    Signed-off-by: André Goddard Rosa
    Cc: Pekka Enberg
    Cc: Oleg Nesterov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    André Goddard Rosa
     
  • Move the call to do_signal_stop() down, after tracehook call. This makes
    ->group_stop_count condition visible to tracers before do_signal_stop()
    will participate in this group-stop.

    Currently the patch has no effect, tracehook_get_signal() always returns 0.

    Signed-off-by: Oleg Nesterov
    Acked-by: Roland McGrath
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • Kill force_sig_specific(), this trivial wrapper has no callers.

    Signed-off-by: Oleg Nesterov
    Cc: Roland McGrath
    Cc: Sukadev Bhattiprolu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • Trivial, s/0/SI_USER/ in collect_signal() for grep.

    This is a bit confusing, we don't know the source of this signal.
    But we don't care, and "info->si_code = 0" is imho worse.

    Signed-off-by: Oleg Nesterov
    Cc: Roland McGrath
    Cc: Sukadev Bhattiprolu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • Change send_signal() to use si_fromuser(). From now SEND_SIG_NOINFO
    triggers the "from_ancestor_ns" check.

    This fixes reparent_thread()->group_send_sig_info(pdeath_signal)
    behaviour, before this patch send_signal() does not detect the
    cross-namespace case when the child of the dying parent belongs to the
    sub-namespace.

    This patch can affect the behaviour of send_sig(), kill_pgrp() and
    kill_pid() when the caller sends the signal to the sub-namespace with
    "priv == 0" but surprisingly all callers seem to use them correctly,
    including disassociate_ctty(on_exit).

    Except: drivers/staging/comedi/drivers/addi-data/*.c incorrectly use
    send_sig(priv => 0). But his is minor and should be fixed anyway.

    Reported-by: Daniel Lezcano
    Signed-off-by: Oleg Nesterov
    Cc: Roland McGrath
    Reviewed-by: Sukadev Bhattiprolu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • No changes in compiled code. The patch adds the new helper, si_fromuser()
    and changes check_kill_permission() to use this helper.

    The real effect of this patch is that from now we "officially" consider
    SEND_SIG_NOINFO signal as "from user-space" signals. This is already true
    if we look at the code which uses SEND_SIG_NOINFO, except __send_signal()
    has another opinion - see the next patch.

    The naming of these special SEND_SIG_XXX siginfo's is really bad
    imho. From __send_signal()'s pov they mean

    SEND_SIG_NOINFO from user
    SEND_SIG_PRIV from kernel
    SEND_SIG_FORCED no info

    Signed-off-by: Oleg Nesterov
    Cc: Roland McGrath
    Reviewed-by: Sukadev Bhattiprolu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • If the tracee calls fork() after PTRACE_SINGLESTEP, the forked child
    starts with TIF_SINGLESTEP/X86_EFLAGS_TF bits copied from ptraced parent.
    This is not right, especially when the new child is not auto-attaced: in
    this case it is killed by SIGTRAP.

    Change copy_process() to call user_disable_single_step(). Tested on x86.

    Test-case:

    #include
    #include
    #include
    #include
    #include
    #include

    int main(void)
    {
    int pid, status;

    if (!(pid = fork())) {
    assert(ptrace(PTRACE_TRACEME) == 0);
    kill(getpid(), SIGSTOP);

    if (!fork()) {
    /* kernel bug: this child will be killed by SIGTRAP */
    printf("Hello world\n");
    return 43;
    }

    wait(&status);
    return WEXITSTATUS(status);
    }

    for (;;) {
    assert(pid == wait(&status));
    if (WIFEXITED(status))
    break;
    assert(ptrace(PTRACE_SINGLESTEP, pid, 0,0) == 0);
    }

    assert(WEXITSTATUS(status) == 43);
    return 0;
    }

    Signed-off-by: Oleg Nesterov
    Acked-by: Roland McGrath
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • In massive parallel enviroment, res_counter can be a performance
    bottleneck. One strong techinque to reduce lock contention is reducing
    calls by coalescing some amount of calls into one.

    Considering charge/uncharge chatacteristic,
    - charge is done one by one via demand-paging.
    - uncharge is done by
    - in chunk at munmap, truncate, exit, execve...
    - one by one via vmscan/paging.

    It seems we have a chance to coalesce uncharges for improving scalability
    at unmap/truncation.

    This patch is a for coalescing uncharge. For avoiding scattering memcg's
    structure to functions under /mm, this patch adds memcg batch uncharge
    information to the task. A reason for per-task batching is for making use
    of caller's context information. We do batched uncharge (deleyed
    uncharge) when truncation/unmap occurs but do direct uncharge when
    uncharge is called by memory reclaim (vmscan.c).

    The degree of coalescing depends on callers
    - at invalidate/trucate... pagevec size
    - at unmap ....ZAP_BLOCK_SIZE
    (memory itself will be freed in this degree.)
    Then, we'll not coalescing too much.

    On x86-64 8cpu server, I tested overheads of memcg at page fault by
    running a program which does map/fault/unmap in a loop. Running
    a task per a cpu by taskset and see sum of the number of page faults
    in 60secs.

    [without memcg config]
    40156968 page-faults # 0.085 M/sec ( +- 0.046% )
    27.67 cache-miss/faults
    [root cgroup]
    36659599 page-faults # 0.077 M/sec ( +- 0.247% )
    31.58 miss/faults
    [in a child cgroup]
    18444157 page-faults # 0.039 M/sec ( +- 0.133% )
    69.96 miss/faults
    [child with this patch]
    27133719 page-faults # 0.057 M/sec ( +- 0.155% )
    47.16 miss/faults

    We can see some amounts of improvement.
    (root cgroup doesn't affected by this patch)
    Another patch for "charge" will follow this and above will be improved more.

    Changelog(since 2009/10/02):
    - renamed filed of memcg_batch (as pages to bytes, memsw to memsw_bytes)
    - some clean up and commentary/description updates.
    - added initialize code to copy_process(). (possible bug fix)

    Changelog(old):
    - fixed !CONFIG_MEM_CGROUP case.
    - rebased onto the latest mmotm + softlimit fix patches.
    - unified patch for callers
    - added commetns.
    - make ->do_batch as bool.
    - removed css_get() at el. We don't need it.

    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Balbir Singh
    Cc: Daisuke Nishimura
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • Signed-off-by: Alexey Dobriyan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • ktime will overflow from 03:14:07 UTC on Tuesday, 19 January 2038,
    ktime_add() in timecompare_update() will overflow a half earlier. As a
    result, wrong offset will be gotten, then cause some strange problems.

    Signed-off-by: Barry Song
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Patrick Ohly
    Cc: David S. Miller
    Cc: John Stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Barry Song
     
  • The miss-alignment of bp_addr created a 32bit hole, causing
    different structure packings on 32 and 64 bit machines.

    Fix that by moving __reserve_2 into that hole.

    Further, remove the useless struct and redundant __bp_reserve
    muck.

    Signed-off-by: Peter Zijlstra
    Cc: Frederic Weisbecker
    Cc: Arnaldo Carvalho de Melo
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • …el/git/tip/linux-2.6-tip

    * 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (26 commits)
    clockevents: Convert to raw_spinlock
    clockevents: Make tick_device_lock static
    debugobjects: Convert to raw_spinlocks
    perf_event: Convert to raw_spinlock
    hrtimers: Convert to raw_spinlocks
    genirq: Convert irq_desc.lock to raw_spinlock
    smp: Convert smplocks to raw_spinlocks
    rtmutes: Convert rtmutex.lock to raw_spinlock
    sched: Convert pi_lock to raw_spinlock
    sched: Convert cpupri lock to raw_spinlock
    sched: Convert rt_runtime_lock to raw_spinlock
    sched: Convert rq->lock to raw_spinlock
    plist: Make plist debugging raw_spinlock aware
    bkl: Fixup core_lock fallout
    locking: Cleanup the name space completely
    locking: Further name space cleanups
    alpha: Fix fallout from locking changes
    locking: Implement new raw_spinlock
    locking: Convert raw_rwlock functions to arch_rwlock
    locking: Convert raw_rwlock to arch_rwlock
    ...

    Linus Torvalds
     
  • Makes use of skip_spaces() defined in lib/string.c for removing leading
    spaces from strings all over the tree.

    It decreases lib.a code size by 47 bytes and reuses the function tree-wide:
    text data bss dec hex filename
    64688 584 592 65864 10148 (TOTALS-BEFORE)
    64641 584 592 65817 10119 (TOTALS-AFTER)

    Also, while at it, if we see (*str && isspace(*str)), we can be sure to
    remove the first condition (*str) as the second one (isspace(*str)) also
    evaluates to 0 whenever *str == 0, making it redundant. In other words,
    "a char equals zero is never a space".

    Julia Lawall tried the semantic patch (http://coccinelle.lip6.fr) below,
    and found occurrences of this pattern on 3 more files:
    drivers/leds/led-class.c
    drivers/leds/ledtrig-timer.c
    drivers/video/output.c

    @@
    expression str;
    @@

    ( // ignore skip_spaces cases
    while (*str && isspace(*str)) { \(str++;\|++str;\) }
    |
    - *str &&
    isspace(*str)
    )

    Signed-off-by: André Goddard Rosa
    Cc: Julia Lawall
    Cc: Martin Schwidefsky
    Cc: Jeff Dike
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Richard Purdie
    Cc: Neil Brown
    Cc: Kyle McMartin
    Cc: Henrique de Moraes Holschuh
    Cc: David Howells
    Cc:
    Cc: Samuel Ortiz
    Cc: Patrick McHardy
    Cc: Takashi Iwai
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    André Goddard Rosa
     
  • The kernel offers with TIOCL_GETKMSGREDIRECT ioctl() the possibility to
    redirect the kernel messages to a specific console.

    However, since it's not possible to switch to the kernel message console
    after a panic(), it would be nice if the kernel would print the panic
    message on the current console.

    This patch series adds a new interface to access the global kmsg_redirect
    variable by a function to be able to use it in code where
    CONFIG_VT_CONSOLE is not set (kernel/panic.c).

    This patch:

    Instead of using and exporting a global value kmsg_redirect, introduce a
    function vt_kmsg_redirect() that both can set and return the console where
    messages are printed.

    Change all users of kmsg_redirect (the VT code itself and kernel/power.c)
    to the new interface.

    The main advantage is that vt_kmsg_redirect() can also be used when
    CONFIG_VT_CONSOLE is not set.

    Signed-off-by: Bernhard Walle
    Cc: Alan Cox
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bernhard Walle
     
  • do_each_thread/while_each_thread wrap a block of code that is in this format:

    for (...)
    do
    ...
    while

    If curly braces do not surround the inner loop the following warning is
    generated by sparse:

    warning: do-while statement is not a compound statement

    Fix the warning by adding the braces.

    Signed-off-by: H Hartley Sweeten
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    H Hartley Sweeten
     
  • Use smp_processor_id() instead of get_cpu() and put_cpu() in
    generic_smp_call_function_interrupt(), It's no need to disable preempt,
    because we must call generic_smp_call_function_interrupt() with interrupts
    disabled.

    Signed-off-by: Xiao Guangrong
    Acked-by: Ingo Molnar
    Cc: Jens Axboe
    Cc: Nick Piggin
    Cc: Peter Zijlstra
    Cc: Rusty Russell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Xiao Guangrong
     
  • Jan Engelhardt reported we have this problem:

    setting max_map_count to a value large enough results in programs dying at
    first try. This is on 2.6.31.6:

    15:59 borg:/proc/sys/vm # echo $[1<max_map_count
    15:59 borg:/proc/sys/vm # cat max_map_count
    1073741824
    15:59 borg:/proc/sys/vm # echo $[1<max_map_count
    15:59 borg:/proc/sys/vm # cat max_map_count
    Killed

    This is because we have a chance to make 'max_map_count' negative. but
    it's meaningless. Make it only accept non-negative values.

    Reported-by: Jan Engelhardt
    Signed-off-by: WANG Cong
    Cc: Ingo Molnar
    Cc: Peter Zijlstra
    Cc: James Morris
    Cc: Alexey Dobriyan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Amerigo Wang
     
  • This patch derives a "nodes_allowed" node mask from the numa mempolicy of
    the task modifying the number of persistent huge pages to control the
    allocation, freeing and adjusting of surplus huge pages when the pool page
    count is modified via the new sysctl or sysfs attribute
    "nr_hugepages_mempolicy". The nodes_allowed mask is derived as follows:

    * For "default" [NULL] task mempolicy, a NULL nodemask_t pointer
    is produced. This will cause the hugetlb subsystem to use
    node_online_map as the "nodes_allowed". This preserves the
    behavior before this patch.
    * For "preferred" mempolicy, including explicit local allocation,
    a nodemask with the single preferred node will be produced.
    "local" policy will NOT track any internode migrations of the
    task adjusting nr_hugepages.
    * For "bind" and "interleave" policy, the mempolicy's nodemask
    will be used.
    * Other than to inform the construction of the nodes_allowed node
    mask, the actual mempolicy mode is ignored. That is, all modes
    behave like interleave over the resulting nodes_allowed mask
    with no "fallback".

    See the updated documentation [next patch] for more information
    about the implications of this patch.

    Examples:

    Starting with:

    Node 0 HugePages_Total: 0
    Node 1 HugePages_Total: 0
    Node 2 HugePages_Total: 0
    Node 3 HugePages_Total: 0

    Default behavior [with or without this patch] balances persistent
    hugepage allocation across nodes [with sufficient contiguous memory]:

    sysctl vm.nr_hugepages[_mempolicy]=32

    yields:

    Node 0 HugePages_Total: 8
    Node 1 HugePages_Total: 8
    Node 2 HugePages_Total: 8
    Node 3 HugePages_Total: 8

    Of course, we only have nr_hugepages_mempolicy with the patch,
    but with default mempolicy, nr_hugepages_mempolicy behaves the
    same as nr_hugepages.

    Applying mempolicy--e.g., with numactl [using '-m' a.k.a.
    '--membind' because it allows multiple nodes to be specified
    and it's easy to type]--we can allocate huge pages on
    individual nodes or sets of nodes. So, starting from the
    condition above, with 8 huge pages per node, add 8 more to
    node 2 using:

    numactl -m 2 sysctl vm.nr_hugepages_mempolicy=40

    This yields:

    Node 0 HugePages_Total: 8
    Node 1 HugePages_Total: 8
    Node 2 HugePages_Total: 16
    Node 3 HugePages_Total: 8

    The incremental 8 huge pages were restricted to node 2 by the
    specified mempolicy.

    Similarly, we can use mempolicy to free persistent huge pages
    from specified nodes:

    numactl -m 0,1 sysctl vm.nr_hugepages_mempolicy=32

    yields:

    Node 0 HugePages_Total: 4
    Node 1 HugePages_Total: 4
    Node 2 HugePages_Total: 16
    Node 3 HugePages_Total: 8

    The 8 huge pages freed were balanced over nodes 0 and 1.

    [rientjes@google.com: accomodate reworked NODEMASK_ALLOC]
    Signed-off-by: David Rientjes
    Signed-off-by: Lee Schermerhorn
    Acked-by: Mel Gorman
    Reviewed-by: Andi Kleen
    Cc: KAMEZAWA Hiroyuki
    Cc: Randy Dunlap
    Cc: Nishanth Aravamudan
    Cc: Adam Litke
    Cc: Andy Whitcroft
    Cc: Eric Whitney
    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Lee Schermerhorn
     
  • commit d8e180dcd5bbbab9cd3ff2e779efcf70692ef541 "bsdacct: switch
    credentials for writing to the accounting file" introduced credential
    switching during final acct data collecting. However, uid/gid pair
    continued to be collected from current which became credentials of who
    created acct file, not who exits.

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

    Signed-off-by: Alexey Dobriyan
    Reported-by: Juho K. Juopperi
    Acked-by: Serge Hallyn
    Acked-by: David Howells
    Reviewed-by: Michal Schmidt
    Cc: James Morris
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

15 Dec, 2009

13 commits