lkml.org 
[lkml]   [2012]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC, PATCH] fs: push rcu_barrier() from deactivate_locked_super() to filesystems
    On Fri, Jun 08, 2012 at 02:43:58PM -0700, Linus Torvalds wrote:
    > On Fri, Jun 8, 2012 at 2:28 PM, Kirill A. Shutemov
    > <kirill.shutemov@linux.intel.com> wrote:
    > > From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    > >
    > > There's no reason to call rcu_barrier() on every deactivate_locked_super().
    > > We only need to make sure that all delayed rcu free inodes are flushed
    > > before we destroy related cache.
    > >
    > > Removing rcu_barrier() from deactivate_locked_super() affects some
    > > fas paths. E.g. on my machine exit_group() of a last process in IPC
    > > namespace takes 0.07538s. rcu_barrier() takes 0.05188s of that time.
    >
    > I think we should just delete it.
    >
    > kmem_cache_destroy() (at least for SLUB) already has:
    >
    > if (s->flags & SLAB_DESTROY_BY_RCU)
    > rcu_barrier();
    >
    > in it. But I think it's too late - it gets called *after* we do
    > kmem_cache_close(), and I get the feeling that we should do it before.
    >
    > Shouldn't that be sufficient? And if other slab allocators don't have
    > this, we should add it to them too.
    >
    > Hmm?

    When I tried SLAB_DESTROY_BY_RCU I've got problem:

    [ 36.687999] Pid: 3455, comm: rmmod Not tainted 3.5.0-rc1-00130-g48d212a-dirty #40
    [ 36.688001] Call Trace:
    [ 36.688012] [<ffffffff8113367a>] slab_err+0xaa/0xd0
    [ 36.688020] [<ffffffff8113515a>] ? __kmalloc+0x10a/0x110
    [ 36.688026] [<ffffffff8113647d>] kmem_cache_destroy+0x1dd/0x420
    [ 36.688056] [<ffffffffa00f0f25>] btrfs_destroy_cachep+0x15/0x60 [btrfs]
    [ 36.688076] [<ffffffffa013cac3>] exit_btrfs_fs+0x9/0x3a [btrfs]
    [ 36.688083] [<ffffffff810c324e>] sys_delete_module+0x16e/0x2f0
    [ 36.688090] [<ffffffff8128cf29>] ? lockdep_sys_exit_thunk+0x35/0x67
    [ 36.688097] [<ffffffff8161eba6>] system_call_fastpath+0x1a/0x1f
    [ 36.688111] Pid: 3455, comm: rmmod Not tainted 3.5.0-rc1-00130-g48d212a-dirty #40
    [ 36.688114] Call Trace:
    [ 36.688119] [<ffffffff811365ee>] kmem_cache_destroy+0x34e/0x420
    [ 36.688143] [<ffffffffa00f0f25>] btrfs_destroy_cachep+0x15/0x60 [btrfs]
    [ 36.688162] [<ffffffffa013cac3>] exit_btrfs_fs+0x9/0x3a [btrfs]
    [ 36.688168] [<ffffffff810c324e>] sys_delete_module+0x16e/0x2f0
    [ 36.688174] [<ffffffff8128cf29>] ? lockdep_sys_exit_thunk+0x35/0x67
    [ 36.688179] [<ffffffff8161eba6>] system_call_fastpath+0x1a/0x1f

    IIUC, moving rcu_barrier() up should help, but I can't say that I fully
    understand SLAB_DESTROY_BY_RCU semantics.

    --
    Kirill A. Shutemov
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-06-09 00:41    [W:0.026 / U:122.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site