Re: [PATCH] cifs: do not fail __smb_send_rqst if non-fatal signals are pending

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch won't merge (also has some text corruptions in it).  This
line of code is different due to commit 6988a619f5b79

6988a619f5b79 (Paulo Alcantara 2020-11-28 15:57:06 -0300 342)
 cifs_dbg(FYI, "signal pending before send request\n");
6988a619f5b79 (Paulo Alcantara 2020-11-28 15:57:06 -0300 343)
 return -ERESTARTSYS;

        if (signal_pending(current)) {
                cifs_dbg(FYI, "signal pending before send request\n");
                return -ERESTARTSYS;
        }

See:

Author: Paulo Alcantara <pc@xxxxxx>
Date:   Sat Nov 28 15:57:06 2020 -0300

    cifs: allow syscalls to be restarted in __smb_send_rqst()

    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@xxxxxx>
    CC: Stable <stable@xxxxxxxxxxxxxxx>
    Reviewed-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
    Reviewed-by: Pavel Shilovsky <pshilov@xxxxxxxxxxxxx>

On Tue, Jan 19, 2021 at 10:32 PM Ronnie Sahlberg <lsahlber@xxxxxxxxxx> wrote:
>
> RHBZ 1848178
>
> There is no need to fail this function if non-fatal signals are
> pending when we enter it.
>
> Signed-off-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
> ---
>  fs/cifs/transport.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
> index c42bda5a5008..98752f7d2cd2 100644
> --- a/fs/cifs/transport.c
> +++ b/fs/cifs/transport.c
> @@ -339,7 +339,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
>         if (ssocket == NULL)
>                 return -EAGAIN;
>
> -       if (signal_pending(current)) {
> +       if (fatal_signal_pending(current)) {
>                 cifs_dbg(FYI, "signal is pending before sending any data\n");
>                 return -EINTR;
>         }
> --
> 2.13.6
>


-- 
Thanks,

Steve



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux