Paulo Alcantara a0ca8cb2f7 cifs: allow syscalls to be restarted in __smb_send_rqst()
commit 6988a619f5b79e4efadea6e19dcfe75fbcd350b5 upstream.

A customer has reported that several files in their multi-threaded app
were left with size of 0 because most of the read(2) calls returned
-EINTR and they assumed no bytes were read.  Obviously, they could
have fixed it by simply retrying on -EINTR.

We noticed that most of the -EINTR on read(2) were due to real-time
signals sent by glibc to process wide credential changes (SIGRT_1),
and its signal handler had been established with SA_RESTART, in which
case those calls could have been automatically restarted by the
kernel.

Let the kernel decide to whether or not restart the syscalls when
there is a signal pending in __smb_send_rqst() by returning
-ERESTARTSYS.  If it can't, it will return -EINTR anyway.

Signed-off-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
CC: Stable <stable@vger.kernel.org>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-12-11 13:23:29 +01:00
..
2020-11-05 11:43:34 +01:00
2019-09-19 09:42:37 -07:00
2020-10-29 09:58:03 +01:00
2019-09-19 09:42:37 -07:00
2020-08-26 10:40:56 +02:00
2019-09-19 09:42:37 -07:00
2019-07-03 17:52:09 -04:00
2020-11-18 19:20:30 +01:00
2020-11-05 11:43:29 +01:00
2020-06-17 16:40:24 +02:00
2020-03-05 16:43:36 +01:00
2020-10-01 13:17:19 +02:00
2019-08-07 21:51:47 -04:00
2020-03-25 08:25:58 +01:00
2019-12-17 19:55:30 +01:00
2019-09-18 16:59:14 -07:00
2019-09-18 16:59:14 -07:00
2019-08-01 20:51:23 +02:00