26 Mar, 2011

2 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (56 commits)
    route: Take the right src and dst addresses in ip_route_newports
    ipv4: Fix nexthop caching wrt. scoping.
    ipv4: Invalidate nexthop cache nh_saddr more correctly.
    net: fix pch_gbe section mismatch warning
    ipv4: fix fib metrics
    mlx4_en: Removing HW info from ethtool -i report.
    net_sched: fix THROTTLED/RUNNING race
    drivers/net/a2065.c: Convert release_resource to release_region/release_mem_region
    drivers/net/ariadne.c: Convert release_resource to release_region/release_mem_region
    bonding: fix rx_handler locking
    myri10ge: fix rmmod crash
    mlx4_en: updated driver version to 1.5.4.1
    mlx4_en: Using blue flame support
    mlx4_core: reserve UARs for userspace consumers
    mlx4_core: maintain available field in bitmap allocator
    mlx4: Add blue flame support for kernel consumers
    mlx4_en: Enabling new steering
    mlx4: Add support for promiscuous mode in the new steering model.
    mlx4: generalization of multicast steering.
    mlx4_en: Reporting HW revision in ethtool -i
    ...

    Linus Torvalds
     
  • * 'nfs-for-2.6.39' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: (28 commits)
    Cleanup XDR parsing for LAYOUTGET, GETDEVICEINFO
    NFSv4.1 convert layoutcommit sync to boolean
    NFSv4.1 pnfs_layoutcommit_inode fixes
    NFS: Determine initial mount security
    NFS: use secinfo when crossing mountpoints
    NFS: Add secinfo procedure
    NFS: lookup supports alternate client
    NFS: convert call_sync() to a function
    NFSv4.1 remove temp code that prevented ds commits
    NFSv4.1: layoutcommit
    NFSv4.1: filelayout driver specific code for COMMIT
    NFSv4.1: remove GETATTR from ds commits
    NFSv4.1: add generic layer hooks for pnfs COMMIT
    NFSv4.1: alloc and free commit_buckets
    NFSv4.1: shift filelayout_free_lseg
    NFSv4.1: pull out code from nfs_commit_release
    NFSv4.1: pull error handling out of nfs_commit_list
    NFSv4.1: add callback to nfs4_commit_done
    NFSv4.1: rearrange nfs_commit_rpcsetup
    NFSv4.1: don't send COMMIT to ds for data sync writes
    ...

    Linus Torvalds
     

25 Mar, 2011

6 commits


24 Mar, 2011

5 commits

  • * 'for-2.6.39' of git://linux-nfs.org/~bfields/linux:
    SUNRPC: Remove resource leak in svc_rdma_send_error()
    nfsd: wrong index used in inner loop
    nfsd4: fix comment and remove unused nfsd4_file fields
    nfs41: make sure nfs server return right ca_maxresponsesize_cached
    nfsd: fix compile error
    svcrpc: fix bad argument in unix_domain_find
    nfsd4: fix struct file leak
    nfsd4: minor nfs4state.c reshuffling
    svcrpc: fix rare race on unix_domain creation
    nfsd41: modify the members value of nfsd4_op_flags
    nfsd: add proc file listing kernel's gss_krb5 enctypes
    gss:krb5 only include enctype numbers in gm_upcall_enctypes
    NFSD, VFS: Remove dead code in nfsd_rename()
    nfsd: kill unused macro definition
    locks: use assign_type()

    Linus Torvalds
     
  • As a preparation for removing ext2 non-atomic bit operations from
    asm/bitops.h. This converts ext2 non-atomic bit operations to
    little-endian bit operations.

    Signed-off-by: Akinobu Mita
    Cc: Andy Grover
    Cc: "David S. Miller"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     
  • asm-generic/bitops/le.h is only intended to be included directly from
    asm-generic/bitops/ext2-non-atomic.h or asm-generic/bitops/minix-le.h
    which implements generic ext2 or minix bit operations.

    This stops including asm-generic/bitops/le.h directly and use ext2
    non-atomic bit operations instead.

    It seems odd to use ext2_*_bit() on rds, but it will replaced with
    __{set,clear,test}_bit_le() after introducing little endian bit operations
    for all architectures. This indirect step is necessary to maintain
    bisectability for some architectures which have their own little-endian
    bit operations.

    Signed-off-by: Akinobu Mita
    Cc: Andy Grover
    Cc: "David S. Miller"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     
  • commit 2c8cec5c10bc (Cache learned PMTU information in inetpeer) added
    an extra inet_putpeer() call in ip_rt_update_pmtu().

    This results in various problems, since we can free one inetpeer, while
    it is still in use.

    Ref: http://www.spinics.net/lists/netdev/msg159121.html

    Reported-by: Alexander Beregalov
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • In commit 9435eb1cf0b76b323019cebf8d16762a50a12a19
    ("ipv4: Implement __ip_dev_find using new interface address hash.")
    we reimplemented __ip_dev_find() so that it doesn't have to
    do a full FIB table lookup.

    Instead, it consults a hash table of addresses configured to
    interfaces.

    This works identically to the old code in all except one case,
    and that is for loopback subnets.

    The old code would match the loopback device for any IP address
    that falls within a subnet configured to the loopback device.

    Handle this corner case by doing the FIB lookup.

    We could implement this via inet_addr_onlink() but:

    1) Someone could configure many addresses to loopback and
    inet_addr_onlink() is a simple list traversal.

    2) We know the old code works.

    Reported-by: Julian Anastasov
    Acked-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    David S. Miller
     

23 Mar, 2011

16 commits

  • Signed-off-by: David S. Miller

    David S. Miller
     
  • In the current undo logic, cwnd is moderated after it was restored
    to the value prior entering fast-recovery. It was moderated first
    in tcp_try_undo_recovery then again in tcp_complete_cwr.

    Since the undo indicates recovery was false, these moderations
    are not necessary. If the undo is triggered when most of the
    outstanding data have been acknowledged, the (restored) cwnd is
    falsely pulled down to a small value.

    This patch removes these cwnd moderations if cwnd is undone
    a) during fast-recovery
    b) by receiving DSACKs past fast-recovery

    Signed-off-by: Yuchung Cheng
    Signed-off-by: David S. Miller

    Yuchung Cheng
     
  • The ipv6_dev_get_saddr() is currently called with an uninitialized
    destination address. Although in tests it usually seemed to nevertheless
    always fetch the right source address, there seems to be a possible race
    condition.

    Therefore this commit changes this, first setting the destination
    address and only after that fetching the source address.

    Reported-by: Jan Beulich
    Signed-off-by: Linus Lüssing
    Signed-off-by: David S. Miller

    Linus Lüssing
     
  • This avoids explicit cast to avoid 'discards qualifiers'
    compiler warning in a netfilter patch that i've been working on.

    Signed-off-by: Florian Westphal
    Signed-off-by: David S. Miller

    Florian Westphal
     
  • ksoftirqd, kworker, migration, and pktgend kthreads can be created with
    kthread_create_on_node(), to get proper NUMA affinities for their stack and
    task_struct.

    Signed-off-by: Eric Dumazet
    Acked-by: David S. Miller
    Reviewed-by: Andi Kleen
    Acked-by: Rusty Russell
    Acked-by: Tejun Heo
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: David Howells
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Dumazet
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs:
    [net/9p]: Introduce basic flow-control for VirtIO transport.
    9p: use the updated offset given by generic_write_checks
    [net/9p] Don't re-pin pages on retrying virtqueue_add_buf().
    [net/9p] Set the condition just before waking up.
    [net/9p] unconditional wake_up to proc waiting for space on VirtIO ring
    fs/9p: Add v9fs_dentry2v9ses
    fs/9p: Attach writeback_fid on first open with WR flag
    fs/9p: Open writeback fid in O_SYNC mode
    fs/9p: Use truncate_setsize instead of vmtruncate
    net/9p: Fix compile warning
    net/9p: Convert the in the 9p rpc call path to GFP_NOFS
    fs/9p: Fix race in initializing writeback fid

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
    rbd: use watch/notify for changes in rbd header
    libceph: add lingering request and watch/notify event framework
    rbd: update email address in Documentation
    ceph: rename dentry_release -> d_release, fix comment
    ceph: add request to the tail of unsafe write list
    ceph: remove request from unsafe list if it is canceled/timed out
    ceph: move readahead default to fs/ceph from libceph
    ceph: add ino32 mount option
    ceph: update common header files
    ceph: remove debugfs debug cruft
    libceph: fix osd request queuing on osdmap updates
    ceph: preserve I_COMPLETE across rename
    libceph: Fix base64-decoding when input ends in newline.

    Linus Torvalds
     
  • If we call xs_close(), we're in one of two situations:
    - Autoclose, which means we don't expect to resend a request
    - bind+connect failed, which probably means the port is in use

    Signed-off-by: Trond Myklebust
    Cc: stable@kernel.org

    Trond Myklebust
     
  • David S. Miller
     
  • Recent zerocopy work in the 9P VirtIO transport maps and pins
    user buffers into kernel memory for the server to work on them.
    Since the user process can initiate this kind of pinning with a simple
    read/write call, thousands of IO threads initiated by the user process can
    hog the system resources and could result into denial of service.

    This patch introduces flow control to avoid that extreme scenario.

    The ceiling limit to avoid denial of service attacks is set to relatively
    high (nr_free_pagecache_pages()/4) so that it won't interfere with
    regular usage, but can step in extreme cases to limit the total system
    hang. Since we don't have a global structure to accommodate this variable,
    I choose the virtio_chan as the home for this.

    Signed-off-by: Venkateswararao Jujjuri
    Reviewed-by: Badari Pulavarty
    Signed-off-by: Eric Van Hensbergen

    Venkateswararao Jujjuri (JV)
     
  • Signed-off-by: Venkateswararao Jujjuri
    Signed-off-by: Eric Van Hensbergen

    Venkateswararao Jujjuri (JV)
     
  • Given that the sprious wake-ups are common, we need to move the
    condition setting right next to the wake_up(). After setting the condition
    to req->status = REQ_STATUS_RCVD, sprious wakeups may cause the
    virtqueue back on the free list for someone else to use.
    This may result in kernel panic while relasing the pinned pages
    in p9_release_req_pages().

    Also rearranged the while loop in req_done() for better redability.

    Signed-off-by: Venkateswararao Jujjuri
    Signed-off-by: Eric Van Hensbergen

    Venkateswararao Jujjuri (JV)
     
  • Process may wait to get space on VirtIO ring to send a transaction to
    VirtFS server. Current code just does a conditional wake_up() which
    means only one process will be woken up even if multiple processes
    are waiting.

    This fix makes the wake_up unconditional. Hence we won't have any
    processes waiting for-ever.

    Signed-off-by: Venkateswararao Jujjuri
    Signed-off-by: Eric Van Hensbergen

    Venkateswararao Jujjuri (JV)
     
  • Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Venkateswararao Jujjuri
    Signed-off-by: Eric Van Hensbergen

    Aneesh Kumar K.V
     
  • Without this we can cause reclaim allocation in writepage.

    [ 3433.448430] =================================
    [ 3433.449117] [ INFO: inconsistent lock state ]
    [ 3433.449117] 2.6.38-rc5+ #84
    [ 3433.449117] ---------------------------------
    [ 3433.449117] inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-R} usage.
    [ 3433.449117] kswapd0/505 [HC0[0]:SC0[0]:HE1:SE1] takes:
    [ 3433.449117] (iprune_sem){+++++-}, at: [] shrink_icache_memory+0x45/0x2b1
    [ 3433.449117] {RECLAIM_FS-ON-W} state was registered at:
    [ 3433.449117] [] mark_held_locks+0x52/0x70
    [ 3433.449117] [] lockdep_trace_alloc+0x85/0x9f
    [ 3433.449117] [] slab_pre_alloc_hook+0x18/0x3c
    [ 3433.449117] [] kmem_cache_alloc+0x23/0xa2
    [ 3433.449117] [] idr_pre_get+0x2d/0x6f
    [ 3433.449117] [] p9_idpool_get+0x30/0xae
    [ 3433.449117] [] p9_client_rpc+0xd7/0x9b0
    [ 3433.449117] [] p9_client_clunk+0x88/0xdb
    [ 3433.449117] [] v9fs_evict_inode+0x3c/0x48
    [ 3433.449117] [] evict+0x1f/0x87
    [ 3433.449117] [] dispose_list+0x47/0xe3
    [ 3433.449117] [] evict_inodes+0x138/0x14f
    [ 3433.449117] [] generic_shutdown_super+0x57/0xe8
    [ 3433.449117] [] kill_anon_super+0x11/0x50
    [ 3433.449117] [] v9fs_kill_super+0x49/0xab
    [ 3433.449117] [] deactivate_locked_super+0x21/0x46
    [ 3433.449117] [] deactivate_super+0x40/0x44
    [ 3433.449117] [] mntput_no_expire+0x100/0x109
    [ 3433.449117] [] sys_umount+0x2f1/0x31c
    [ 3433.449117] [] system_call_fastpath+0x16/0x1b
    [ 3433.449117] irq event stamp: 192941
    [ 3433.449117] hardirqs last enabled at (192941): [] _raw_spin_unlock_irq+0x2b/0x30
    [ 3433.449117] hardirqs last disabled at (192940): [] shrink_inactive_list+0x290/0x2f5
    [ 3433.449117] softirqs last enabled at (188470): [] __do_softirq+0x133/0x152
    [ 3433.449117] softirqs last disabled at (188455): [] call_softirq+0x1c/0x28
    [ 3433.449117]
    [ 3433.449117] other info that might help us debug this:
    [ 3433.449117] 1 lock held by kswapd0/505:
    [ 3433.449117] #0: (shrinker_rwsem){++++..}, at: [] shrink_slab+0x38/0x15f
    [ 3433.449117]
    [ 3433.449117] stack backtrace:
    [ 3433.449117] Pid: 505, comm: kswapd0 Not tainted 2.6.38-rc5+ #84
    [ 3433.449117] Call Trace:
    [ 3433.449117] [] ? valid_state+0x17e/0x191
    [ 3433.449117] [] ? save_stack_trace+0x28/0x45
    [ 3433.449117] [] ? check_usage_forwards+0x0/0x87
    [ 3433.449117] [] ? mark_lock+0x113/0x22c
    [ 3433.449117] [] ? __lock_acquire+0x37a/0xcf7
    [ 3433.449117] [] ? mark_lock+0x2d/0x22c
    [ 3433.449117] [] ? __lock_acquire+0x392/0xcf7
    [ 3433.449117] [] ? determine_dirtyable_memory+0x15/0x28
    [ 3433.449117] [] ? lock_acquire+0x57/0x6d
    [ 3433.449117] [] ? shrink_icache_memory+0x45/0x2b1
    [ 3433.449117] [] ? down_read+0x47/0x5c
    [ 3433.449117] [] ? shrink_icache_memory+0x45/0x2b1
    [ 3433.449117] [] ? shrink_icache_memory+0x45/0x2b1
    [ 3433.449117] [] ? shrink_slab+0xdb/0x15f
    [ 3433.449117] [] ? kswapd+0x574/0x96a
    [ 3433.449117] [] ? kswapd+0x0/0x96a
    [ 3433.449117] [] ? kthread+0x7d/0x85
    [ 3433.449117] [] ? kernel_thread_helper+0x4/0x10
    [ 3433.449117] [] ? restore_args+0x0/0x30
    [ 3433.449117] [] ? kthread+0x0/0x85
    [ 3433.449117] [] ? kernel_thread_helper+0x0/0x10

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Venkateswararao Jujjuri
    Signed-off-by: Eric Van Hensbergen

    Aneesh Kumar K.V
     
  • Lingering requests are requests that are sent to the OSD normally but
    tracked also after we get a successful request. This keeps the OSD
    connection open and resends the original request if the object moves to
    another OSD. The OSD can then send notification messages back to us
    if another client initiates a notify.

    This framework will be used by RBD so that the client gets notification
    when a snapshot is created by another node or tool.

    Signed-off-by: Yehuda Sadeh
    Signed-off-by: Sage Weil

    Yehuda Sadeh
     

22 Mar, 2011

11 commits

  • Optimize the calling of fib_add_ifaddr for all
    secondary addresses after the promoted one to start from
    their place, not from the new place of the promoted
    secondary. It will save some CPU cycles because we
    are sure the promoted secondary was first for the subnet
    and all next secondaries do not change their place.

    Signed-off-by: Julian Anastasov
    Signed-off-by: David S. Miller

    Julian Anastasov
     
  • The secondary address promotion relies on fib_sync_down_addr
    to remove all routes created for the secondary addresses when
    the old primary address is deleted. It does not happen for cases
    when the primary address is also in another subnet. Fix that
    by deleting local and broadcast routes for all secondaries while
    they are on device list and by faking that all addresses from
    this subnet are to be deleted. It relies on fib_del_ifaddr being
    able to ignore the IPs from the concerned subnet while checking
    for duplication.

    Signed-off-by: Julian Anastasov
    Signed-off-by: David S. Miller

    Julian Anastasov
     
  • Alex Sidorenko reported for problems with local
    routes left after IP addresses are deleted. It happens
    when same IPs are used in more than one subnet for the
    device.

    Fix fib_del_ifaddr to restrict the checks for duplicate
    local and broadcast addresses only to the IFAs that use
    our primary IFA or another primary IFA with same address.
    And we expect the prefsrc to be matched when the routes
    are deleted because it is possible they to differ only by
    prefsrc. This patch prevents local and broadcast routes
    to be leaked until their primary IP is deleted finally
    from the box.

    As the secondary address promotion needs to delete
    the routes for all secondaries that used the old primary IFA,
    add option to ignore these secondaries from the checks and
    to assume they are already deleted, so that we can safely
    delete the route while these IFAs are still on the device list.

    Reported-by: Alex Sidorenko
    Signed-off-by: Julian Anastasov
    Signed-off-by: David S. Miller

    Julian Anastasov
     
  • fib_table_delete forgets to match the routes by prefsrc.
    Callers can specify known IP in fc_prefsrc and we should remove
    the exact route. This is needed for cases when same local or
    broadcast addresses are used in different subnets and the
    routes differ only in prefsrc. All callers that do not provide
    fc_prefsrc will ignore the route prefsrc as before and will
    delete the first occurence. That is how the ip route del default
    magic works.

    Current callers are:

    - ip_rt_ioctl where rtentry_to_fib_config provides fc_prefsrc only
    when the provided device name matches IP label with colon.

    - inet_rtm_delroute where RTA_PREFSRC is optional too

    - fib_magic which deals with routes when deleting addresses
    and where the fc_prefsrc is always set with the primary IP
    for the concerned IFA.

    Signed-off-by: Julian Anastasov
    Signed-off-by: David S. Miller

    Julian Anastasov
     
  • Implement compatibility with new hw_features for dev_disable_lro().
    This is a transition path - dev_disable_lro() should be later
    integrated into netdev_fix_features() after all drivers are converted.

    Signed-off-by: Michał Mirosław
    Signed-off-by: David S. Miller

    Michał Mirosław
     
  • As part of the work to make IPVS network namespace aware
    __ip_vs_app_mutex was replaced by a per-namespace lock,
    ipvs->app_mutex. ipvs->app_key is also supplied for debugging purposes.

    Unfortunately this implementation results in ipvs->app_key residing
    in non-static storage which at the very least causes a lockdep warning.

    This patch takes the rather heavy-handed approach of reinstating
    __ip_vs_app_mutex which will cover access to the ipvs->list_head
    of all network namespaces.

    [ 12.610000] IPVS: Creating netns size=2456 id=0
    [ 12.630000] IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP)
    [ 12.640000] BUG: key ffff880003bbf1a0 not in .data!
    [ 12.640000] ------------[ cut here ]------------
    [ 12.640000] WARNING: at kernel/lockdep.c:2701 lockdep_init_map+0x37b/0x570()
    [ 12.640000] Hardware name: Bochs
    [ 12.640000] Pid: 1, comm: swapper Tainted: G W 2.6.38-kexec-06330-g69b7efe-dirty #122
    [ 12.650000] Call Trace:
    [ 12.650000] [] warn_slowpath_common+0x75/0xb0
    [ 12.650000] [] warn_slowpath_null+0x15/0x20
    [ 12.650000] [] lockdep_init_map+0x37b/0x570
    [ 12.650000] [] ? trace_hardirqs_on+0xd/0x10
    [ 12.650000] [] debug_mutex_init+0x38/0x50
    [ 12.650000] [] __mutex_init+0x5c/0x70
    [ 12.650000] [] __ip_vs_app_init+0x64/0x86
    [ 12.660000] [] ? ip_vs_init+0x0/0xff
    [ 12.660000] [] T.620+0x43/0x170
    [ 12.660000] [] ? register_pernet_subsys+0x1a/0x40
    [ 12.660000] [] ? ip_vs_init+0x0/0xff
    [ 12.660000] [] ? ip_vs_init+0x0/0xff
    [ 12.660000] [] register_pernet_operations+0x57/0xb0
    [ 12.660000] [] ? ip_vs_init+0x0/0xff
    [ 12.670000] [] register_pernet_subsys+0x29/0x40
    [ 12.670000] [] ip_vs_app_init+0x10/0x12
    [ 12.670000] [] ip_vs_init+0x4c/0xff
    [ 12.670000] [] do_one_initcall+0x7a/0x12e
    [ 12.670000] [] kernel_init+0x13e/0x1c2
    [ 12.670000] [] kernel_thread_helper+0x4/0x10
    [ 12.670000] [] ? restore_args+0x0/0x30
    [ 12.680000] [] ? kernel_init+0x0/0x1c2
    [ 12.680000] [] ? kernel_thread_helper+0x0/0x1global0

    Signed-off-by: Simon Horman
    Cc: Ingo Molnar
    Cc: Eric Dumazet
    Cc: Julian Anastasov
    Cc: Hans Schillstrom
    Signed-off-by: David S. Miller

    Simon Horman
     
  • Reported-by: Ingo Molnar
    Signed-off-by: Eric Dumazet
    Cc: Simon Horman
    Cc: Julian Anastasov
    Acked-by: Simon Horman
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • When I was fixing issues with unregisgtering tables under /proc/sys/net/ipv6/neigh
    by adding a mount point it appears I missed a critical ordering issue, in the
    ipv6 initialization. I had not realized that ipv6_sysctl_register is called
    at the very end of the ipv6 initialization and in particular after we call
    neigh_sysctl_register from ndisc_init.

    "neigh" needs to be initialized in ipv6_static_sysctl_register which is
    the first ipv6 table to initialized, and definitely before ndisc_init.
    This removes the weirdness of duplicate tables while still providing a
    "neigh" mount point which prevents races in sysctl unregistering.

    This was initially reported at https://bugzilla.kernel.org/show_bug.cgi?id=31232
    Reported-by: sunkan@zappa.cx
    Signed-off-by: Eric W. Biederman
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • It was pointed out to me recently that my spelling could be better :)

    Signed-off-by: Neil Horman
    Signed-off-by: David S. Miller

    Neil Horman
     
  • The BKL removal in appletalk introduced a use-after-free problem,
    where atalk_destroy_socket frees a sock, but we still release
    the socket lock on it.

    An easy fix is to take an extra reference on the sock and sock_put
    it when returning from atalk_release.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: David S. Miller

    Arnd Bergmann
     
  • Commit b0d0d915d1d1a0 (remove the BKL) added a regression, because
    sock_put() can free memory while we are going to use it later.

    Fix is to delay sock_put() _after_ release_sock().

    Reported-by: Ingo Molnar
    Tested-by: Ingo Molnar
    Signed-off-by: Eric Dumazet
    Acked-by: Arnd Bergmann
    Signed-off-by: David S. Miller

    Eric Dumazet