• Jeff Layton's avatar
    nfs: fix high load average due to callback thread sleeping · 5d05e54a
    Jeff Layton authored
    Chuck pointed out a problem that crept in with commit 6ffa30d3 (nfs:
    don't call blocking operations while !TASK_RUNNING). Linux counts tasks
    in uninterruptible sleep against the load average, so this caused the
    system's load average to be pinned at at least 1 when there was a
    NFSv4.1+ mount active.
    
    Not a huge problem, but it's probably worth fixing before we get too
    many complaints about it. This patch converts the code back to use
    TASK_INTERRUPTIBLE sleep, simply has it flush any signals on each loop
    iteration. In practice no one should really be signalling this thread at
    all, so I think this is reasonably safe.
    
    With this change, there's also no need to game the hung task watchdog so
    we can also convert the schedule_timeout call back to a normal schedule.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarJeff Layton <jeff.layton@primarydata.com>
    Tested-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Fixes: commit 6ffa30d3 (“nfs: don't call blocking . . .”)
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    5d05e54a
callback.c 12 KB