lkml.org 
[lkml]   [2013]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 16/16] af_unix: use freezable blocking calls in read
    Date
    Avoid waking up every thread sleeping in read call on an AF_UNIX
    socket during suspend and resume by calling a freezable blocking
    call. Previous patches modified the freezer to avoid sending
    wakeups to threads that are blocked in freezable blocking calls.

    This call was selected to be converted to a freezable call because
    it doesn't hold any locks or release any resources when interrupted
    that might be needed by another freezing task or a kernel driver
    during suspend, and is a common site where idle userspace tasks are
    blocked.

    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Colin Cross <ccross@android.com>
    ---
    net/unix/af_unix.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
    index 2db702d..2bcac57 100644
    --- a/net/unix/af_unix.c
    +++ b/net/unix/af_unix.c
    @@ -114,6 +114,7 @@
    #include <linux/mount.h>
    #include <net/checksum.h>
    #include <linux/security.h>
    +#include <linux/freezer.h>

    struct hlist_head unix_socket_table[2 * UNIX_HASH_SIZE];
    EXPORT_SYMBOL_GPL(unix_socket_table);
    @@ -1880,7 +1881,7 @@ static long unix_stream_data_wait(struct sock *sk, long timeo)

    set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
    unix_state_unlock(sk);
    - timeo = schedule_timeout(timeo);
    + timeo = freezable_schedule_timeout(timeo);
    unix_state_lock(sk);
    clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
    }
    --
    1.8.2.1


    \
     
     \ /
      Last update: 2013-05-07 03:21    [W:4.289 / U:0.852 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site