30 Mar, 2010

1 commit


08 Dec, 2009

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl-2.6: (43 commits)
    security/tomoyo: Remove now unnecessary handling of security_sysctl.
    security/tomoyo: Add a special case to handle accesses through the internal proc mount.
    sysctl: Drop & in front of every proc_handler.
    sysctl: Remove CTL_NONE and CTL_UNNUMBERED
    sysctl: kill dead ctl_handler definitions.
    sysctl: Remove the last of the generic binary sysctl support
    sysctl net: Remove unused binary sysctl code
    sysctl security/tomoyo: Don't look at ctl_name
    sysctl arm: Remove binary sysctl support
    sysctl x86: Remove dead binary sysctl support
    sysctl sh: Remove dead binary sysctl support
    sysctl powerpc: Remove dead binary sysctl support
    sysctl ia64: Remove dead binary sysctl support
    sysctl s390: Remove dead sysctl binary support
    sysctl frv: Remove dead binary sysctl support
    sysctl mips/lasat: Remove dead binary sysctl support
    sysctl drivers: Remove dead binary sysctl support
    sysctl crypto: Remove dead binary sysctl support
    sysctl security/keys: Remove dead binary sysctl support
    sysctl kernel: Remove binary sysctl logic
    ...

    Linus Torvalds
     

02 Dec, 2009

1 commit


01 Dec, 2009

1 commit

  • Commits 3d7a641 ("SLOW_WORK: Wait for outstanding work items belonging to a
    module to clear") introduced some code to make sure that all of a module's
    slow-work items were complete before that module was removed, and commit
    3bde31a ("SLOW_WORK: Allow a requeueable work item to sleep till the thread is
    needed") further extended that, breaking it in the process if CONFIG_MODULES=n:

    CC kernel/slow-work.o
    kernel/slow-work.c: In function 'slow_work_execute':
    kernel/slow-work.c:313: error: 'slow_work_thread_processing' undeclared (first use in this function)
    kernel/slow-work.c:313: error: (Each undeclared identifier is reported only once
    kernel/slow-work.c:313: error: for each function it appears in.)
    kernel/slow-work.c: In function 'slow_work_wait_for_items':
    kernel/slow-work.c:950: error: 'slow_work_unreg_sync_lock' undeclared (first use in this function)
    kernel/slow-work.c:951: error: 'slow_work_unreg_wq' undeclared (first use in this function)
    kernel/slow-work.c:961: error: 'slow_work_unreg_work_item' undeclared (first use in this function)
    kernel/slow-work.c:974: error: 'slow_work_unreg_module' undeclared (first use in this function)
    kernel/slow-work.c:977: error: 'slow_work_thread_processing' undeclared (first use in this function)
    make[1]: *** [kernel/slow-work.o] Error 1

    Fix this by:

    (1) Extracting the bits of slow_work_execute() that are contingent on
    CONFIG_MODULES, and the bits that should be, into inline functions and
    placing them into the #ifdef'd section that defines the relevant variables
    and adding stubs for moduleless kernels. This allows the removal of some
    #ifdefs.

    (2) #ifdef'ing out the contents of slow_work_wait_for_items() in moduleless
    kernels.

    The four functions related to handling module unloading synchronisation (and
    their associated variables) could be offloaded into a separate .c file, but
    each function is only used once and three of them are tiny, so doing so would
    prevent them from being inlined.

    Reported-by: Ingo Molnar
    Signed-off-by: David Howells
    Signed-off-by: Linus Torvalds

    David Howells
     

20 Nov, 2009

6 commits

  • Add a function to allow a requeueable work item to sleep till the thread
    processing it is needed by the slow-work facility to perform other work.

    Sometimes a work item can't progress immediately, but must wait for the
    completion of another work item that's currently being processed by another
    slow-work thread.

    In some circumstances, the waiting item could instead - theoretically - put
    itself back on the queue and yield its thread back to the slow-work facility,
    thus waiting till it gets processing time again before attempting to progress.
    This would allow other work items processing time on that thread.

    However, this only works if there is something on the queue for it to queue
    behind - otherwise it will just get a thread again immediately, and will end
    up cycling between the queue and the thread, eating up valuable CPU time.

    So, slow_work_sleep_till_thread_needed() is provided such that an item can put
    itself on a wait queue that will wake it up when the event it is actually
    interested in occurs, then call this function in lieu of calling schedule().

    This function will then sleep until either the item's event occurs or another
    work item appears on the queue. If another work item is queued, but the
    item's event hasn't occurred, then the work item should requeue itself and
    yield the thread back to the slow-work facility by returning.

    This can be used by CacheFiles for an object that is being created on one
    thread to wait for an object being deleted on another thread where there is
    nothing on the queue for the creation to go and wait behind. As soon as an
    item appears on the queue that could be given thread time instead, CacheFiles
    can stick the creating object back on the queue and return to the slow-work
    facility - assuming the object deletion didn't also complete.

    Signed-off-by: David Howells

    David Howells
     
  • Allow the executing and queued work items to be viewed through a /proc file
    for debugging purposes. The contents look something like the following:

    THR PID ITEM ADDR FL MARK DESC
    === ===== ================ == ===== ==========
    0 3005 ffff880023f52348 a 952ms FSC: OBJ17d3: LOOK
    1 3006 ffff880024e33668 2 160ms FSC: OBJ17e5 OP60d3b: Write1/Store fl=2
    2 3165 ffff8800296dd180 a 424ms FSC: OBJ17e4: LOOK
    3 4089 ffff8800262c8d78 a 212ms FSC: OBJ17ea: CRTN
    4 4090 ffff88002792bed8 2 388ms FSC: OBJ17e8 OP60d36: Write1/Store fl=2
    5 4092 ffff88002a0ef308 2 388ms FSC: OBJ17e7 OP60d2e: Write1/Store fl=2
    6 4094 ffff88002abaf4b8 2 132ms FSC: OBJ17e2 OP60d4e: Write1/Store fl=2
    7 4095 ffff88002bb188e0 a 388ms FSC: OBJ17e9: CRTN
    vsq - ffff880023d99668 1 308ms FSC: OBJ17e0 OP60f91: Write1/EnQ fl=2
    vsq - ffff8800295d1740 1 212ms FSC: OBJ16be OP4d4b6: Write1/EnQ fl=2
    vsq - ffff880025ba3308 1 160ms FSC: OBJ179a OP58dec: Write1/EnQ fl=2
    vsq - ffff880024ec83e0 1 160ms FSC: OBJ17ae OP599f2: Write1/EnQ fl=2
    vsq - ffff880026618e00 1 160ms FSC: OBJ17e6 OP60d33: Write1/EnQ fl=2
    vsq - ffff880025a2a4b8 1 132ms FSC: OBJ16a2 OP4d583: Write1/EnQ fl=2
    vsq - ffff880023cbe6d8 9 212ms FSC: OBJ17eb: LOOK
    vsq - ffff880024d37590 9 212ms FSC: OBJ17ec: LOOK
    vsq - ffff880027746cb0 9 212ms FSC: OBJ17ed: LOOK
    vsq - ffff880024d37ae8 9 212ms FSC: OBJ17ee: LOOK
    vsq - ffff880024d37cb0 9 212ms FSC: OBJ17ef: LOOK
    vsq - ffff880025036550 9 212ms FSC: OBJ17f0: LOOK
    vsq - ffff8800250368e0 9 212ms FSC: OBJ17f1: LOOK
    vsq - ffff880025036aa8 9 212ms FSC: OBJ17f2: LOOK

    In the 'THR' column, executing items show the thread they're occupying and
    queued threads indicate which queue they're on. 'PID' shows the process ID of
    a slow-work thread that's executing something. 'FL' shows the work item flags.
    'MARK' indicates how long since an item was queued or began executing. Lastly,
    the 'DESC' column permits the owner of an item to give some information.

    Signed-off-by: David Howells

    David Howells
     
  • This adds support for starting slow work with a delay, similar
    to the functionality we have for workqueues.

    Signed-off-by: Jens Axboe
    Signed-off-by: David Howells

    Jens Axboe
     
  • Add support for cancellation of queued slow work and delayed slow work items.
    The cancellation functions will wait for items that are pending or undergoing
    execution to be discarded by the slow work facility.

    Attempting to enqueue work that is in the process of being cancelled will
    result in ECANCELED.

    Signed-off-by: Jens Axboe
    Signed-off-by: David Howells

    Jens Axboe
     
  • Make the ability for the slow-work facility to take references on a work item
    optional as not everyone requires this.

    Even the internal slow-work stubs them out, so those can be got rid of too.

    Signed-off-by: Jens Axboe
    Signed-off-by: David Howells

    Jens Axboe
     
  • Wait for outstanding slow work items belonging to a module to clear when
    unregistering that module as a user of the facility. This prevents the put_ref
    code of a work item from being taken away before it returns.

    Signed-off-by: David Howells

    David Howells
     

19 Nov, 2009

1 commit


12 Nov, 2009

1 commit


24 Sep, 2009

1 commit

  • It's unused.

    It isn't needed -- read or write flag is already passed and sysctl
    shouldn't care about the rest.

    It _was_ used in two places at arch/frv for some reason.

    Signed-off-by: Alexey Dobriyan
    Cc: David Howells
    Cc: "Eric W. Biederman"
    Cc: Al Viro
    Cc: Ralf Baechle
    Cc: Martin Schwidefsky
    Cc: Ingo Molnar
    Cc: "David S. Miller"
    Cc: James Morris
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

17 Jun, 2009

1 commit

  • Round the slow work queue's cull and OOM timeouts to whole second boundary
    with round_jiffies(). The slow work queue uses a pair of timers to cull
    idle threads and, after OOM, to delay new thread creation.

    This patch also extracts the mod_timer() logic for the cull timer into a
    separate helper function.

    By rounding non-time-critical timers such as these to whole seconds, they
    will be batched up to fire at the same time rather than being spread out.
    This allows the CPU wake up less, which saves power.

    Signed-off-by: Chris Peterson
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Peterson
     

12 Jun, 2009

1 commit

  • slow_work_thread() sleeps on slow_work_thread_wq without WQ_FLAG_EXCLUSIVE,
    this means that slow_work_enqueue()->__wake_up(nr_exclusive => 1) wakes up all
    kslowd threads. This is not what we want, so we change slow_work_thread() to
    use prepare_to_wait_exclusive() instead.

    Signed-off-by: Oleg Nesterov
    Signed-off-by: David Howells
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     

24 Apr, 2009

1 commit

  • Slow-work appears to delete its timer as soon as the first user
    unregisters, even though other users could be active. At the same time, it
    never seems to delete slow_work_oom_timer. Arrange for both to happen in
    the shutdown path.

    Signed-off-by: Jonathan Corbet
    Signed-off-by: David Howells
    Signed-off-by: Linus Torvalds

    Jonathan Corbet
     

03 Apr, 2009

4 commits

  • Document the slow work thread pool.

    Signed-off-by: David Howells
    Acked-by: Steve Dickson
    Acked-by: Trond Myklebust
    Acked-by: Al Viro
    Tested-by: Daire Byrne

    David Howells
     
  • Make the slow work pool configurable through /proc/sys/kernel/slow-work.

    (*) /proc/sys/kernel/slow-work/min-threads

    The minimum number of threads that should be in the pool as long as it is
    in use. This may be anywhere between 2 and max-threads.

    (*) /proc/sys/kernel/slow-work/max-threads

    The maximum number of threads that should in the pool. This may be
    anywhere between min-threads and 255 or NR_CPUS * 2, whichever is greater.

    (*) /proc/sys/kernel/slow-work/vslow-percentage

    The percentage of active threads in the pool that may be used to execute
    very slow work items. This may be between 1 and 99. The resultant number
    is bounded to between 1 and one fewer than the number of active threads.
    This ensures there is always at least one thread that can process very
    slow work items, and always at least one thread that won't.

    Signed-off-by: David Howells
    Acked-by: Serge Hallyn
    Acked-by: Steve Dickson
    Acked-by: Trond Myklebust
    Acked-by: Al Viro
    Tested-by: Daire Byrne

    David Howells
     
  • Make the slow-work thread pool actually dynamic in the number of threads it
    contains. With this patch, it will both create additional threads when it has
    extra work to do, and cull excess threads that aren't doing anything.

    Signed-off-by: David Howells
    Acked-by: Serge Hallyn
    Acked-by: Steve Dickson
    Acked-by: Trond Myklebust
    Acked-by: Al Viro
    Tested-by: Daire Byrne

    David Howells
     
  • Create a dynamically sized pool of threads for doing very slow work items, such
    as invoking mkdir() or rmdir() - things that may take a long time and may
    sleep, holding mutexes/semaphores and hogging a thread, and are thus unsuitable
    for workqueues.

    The number of threads is always at least a settable minimum, but more are
    started when there's more work to do, up to a limit. Because of the nature of
    the load, it's not suitable for a 1-thread-per-CPU type pool. A system with
    one CPU may well want several threads.

    This is used by FS-Cache to do slow caching operations in the background, such
    as looking up, creating or deleting cache objects.

    Signed-off-by: David Howells
    Acked-by: Serge Hallyn
    Acked-by: Steve Dickson
    Acked-by: Trond Myklebust
    Acked-by: Al Viro
    Tested-by: Daire Byrne

    David Howells