3d13f313c, Add force_uaccess_{begin,end} helpers for get_fs/set_fs diff -Naur drbd-9.0.26~0+git.9114a038.orig/drbd/drbd-kernel-compat/tests/have_force_uaccess_begin.c drbd-9.0.26~0+git.9114a038/drbd/drbd-kernel-compat/tests/have_force_uaccess_begin.c --- drbd-9.0.26~0+git.9114a038.orig/drbd/drbd-kernel-compat/tests/have_force_uaccess_begin.c 1970-01-01 08:00:00.000000000 +0800 +++ drbd-9.0.26~0+git.9114a038/drbd/drbd-kernel-compat/tests/have_force_uaccess_begin.c 2020-12-09 19:36:17.554021899 +0800 @@ -0,0 +1,7 @@ +/* 3d13f313c Add force_uaccess_{begin,end} helpers for get_fs/set_fs */ +#include + +void dummy(void) +{ + force_uaccess_begin(); +} diff -Naur drbd-9.0.26~0+git.9114a038.orig/drbd/drbd_transport_tcp.c drbd-9.0.26~0+git.9114a038/drbd/drbd_transport_tcp.c --- drbd-9.0.26~0+git.9114a038.orig/drbd/drbd_transport_tcp.c 2020-12-09 19:35:57.493892623 +0800 +++ drbd-9.0.26~0+git.9114a038/drbd/drbd_transport_tcp.c 2020-12-09 19:40:44.863689731 +0800 @@ -1145,7 +1145,12 @@ struct drbd_tcp_transport *tcp_transport = container_of(transport, struct drbd_tcp_transport, transport); struct socket *socket = tcp_transport->stream[stream]; +#ifdef COMPAT_HAVE_FORCE_UACCESS_BEGIN + mm_segment_t oldfs = force_uaccess_begin(); +#else mm_segment_t oldfs = get_fs(); + set_fs(KERNEL_DS); +#endif int len = size; int err = -EIO; @@ -1154,7 +1159,6 @@ msg_flags |= MSG_NOSIGNAL; dtt_update_congested(tcp_transport); - set_fs(KERNEL_DS); do { int sent; @@ -1180,7 +1184,11 @@ * and add that to the while() condition below. */ } while (len > 0 /* THINK && peer_device->repl_state[NOW] >= L_ESTABLISHED */); +#ifdef COMPAT_HAVE_FORCE_UACCESS_BEGIN + force_uaccess_end(oldfs); +#else set_fs(oldfs); +#endif clear_bit(NET_CONGESTED, &tcp_transport->transport.flags); if (len == 0)