lkml.org 
[lkml]   [2014]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] mm/vmscan: Do not block forever at shrink_inactive_list().
    On Mon, May 19, 2014 at 10:40 PM, Tetsuo Handa
    <penguin-kernel@i-love.sakura.ne.jp> wrote:
    >
    > Since the kernel worker thread needs to escape from the while loop so that
    > alloc_page() can allocate memory (and eventually allow xfs_vm_writepage()
    > to release memory), I think that we should not block forever. This patch
    > introduces 30 seconds timeout for userspace processes and 5 seconds timeout
    > for kernel processes.
    >
    > Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    > ---
    > mm/vmscan.c | 7 ++++++-
    > 1 files changed, 6 insertions(+), 1 deletions(-)
    >
    > diff --git a/mm/vmscan.c b/mm/vmscan.c
    > index 32c661d..3eeeda6 100644
    > --- a/mm/vmscan.c
    > +++ b/mm/vmscan.c
    > @@ -1459,13 +1459,18 @@ shrink_inactive_list(unsigned long nr_to_scan, struct lruvec *lruvec,
    > int file = is_file_lru(lru);
    > struct zone *zone = lruvec_zone(lruvec);
    > struct zone_reclaim_stat *reclaim_stat = &lruvec->reclaim_stat;
    > + int i = 0;
    >
    > - while (unlikely(too_many_isolated(zone, file, sc))) {
    > + /* Throttle with timeout. */
    > + while (unlikely(too_many_isolated(zone, file, sc)) && i++ < 300) {
    > congestion_wait(BLK_RW_ASYNC, HZ/10);
    >
    > /* We are about to die and free our memory. Return now. */
    > if (fatal_signal_pending(current))
    > return SWAP_CLUSTER_MAX;
    > + /* Kernel threads should not be blocked for too long. */
    > + if (i == 50 && (current->flags & PF_KTHREAD))
    > + break;
    > }
    >
    > lru_add_drain();

    Hi, Tetsuo Handa

    I think it is good to use a MACRO for this magic number instead of harding code
    it, in a long-term maintainability view, and would better with
    appropriate document.

    Thanks,
    Jianyu Zhan


    \
     
     \ /
      Last update: 2014-05-20 05:21    [W:5.129 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site