• Zhang Xiaoxu's avatar
    SUNRPC: Should wake up the privileged task firstly. · 5483b904
    Zhang Xiaoxu authored
    When find a task from wait queue to wake up, a non-privileged task may
    be found out, rather than the privileged. This maybe lead a deadlock
    same as commit dfe1fe75 ("NFSv4: Fix deadlock between nfs4_evict_inode()
    and nfs4_opendata_get_inode()"):
    
    Privileged delegreturn task is queued to privileged list because all
    the slots are assigned. If there has no enough slot to wake up the
    non-privileged batch tasks(session less than 8 slot), then the privileged
    delegreturn task maybe lost waked up because the found out task can't
    get slot since the session is on draining.
    
    So we should treate the privileged task as the emergency task, and
    execute it as for as we can.
    Reported-by: default avatarHulk Robot <hulkci@huawei.com>
    Fixes: 5fcdfacc ("NFSv4: Return delegations synchronously in evict_inode")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
    5483b904
sched.c 32.9 KB