af_unix: use freezable blocking calls in read

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

Change-Id: I788246a76780ea892659526e70be018b18f646c4
Acked-by: Tejun Heo <>
Signed-off-by: Colin Cross <>
Signed-off-by: Rafael J. Wysocki <>
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 2a89d01..54f2a5e 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[UNIX_HASH_SIZE + 1];
@@ -1874,7 +1875,7 @@
 		set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
-		timeo = schedule_timeout(timeo);
+		timeo = freezable_schedule_timeout(timeo);
 		clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);