diff mbox series

cifs: fail i/o on soft mounts if sessionsetup errors out

Message ID 20200205010801.27759-1-lsahlber@redhat.com (mailing list archive)
State New, archived
Headers show
Series cifs: fail i/o on soft mounts if sessionsetup errors out | expand

Commit Message

Ronnie Sahlberg Feb. 5, 2020, 1:08 a.m. UTC
RHBZ: 1579050

If we have a soft mount we should fail commands for session-setup
failures (such as the password having changed/ account being deleted/ ...)
and return an error back to the application.

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
---
 fs/cifs/smb2pdu.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Steve French Feb. 5, 2020, 9:45 a.m. UTC | #1
Added cc:stable and merged into cifs-2.6.git for-next

On Tue, Feb 4, 2020 at 7:08 PM Ronnie Sahlberg <lsahlber@redhat.com> wrote:
>
> RHBZ: 1579050
>
> If we have a soft mount we should fail commands for session-setup
> failures (such as the password having changed/ account being deleted/ ...)
> and return an error back to the application.
>
> Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
> ---
>  fs/cifs/smb2pdu.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
> index 14f209f7376f..7996d81230aa 100644
> --- a/fs/cifs/smb2pdu.c
> +++ b/fs/cifs/smb2pdu.c
> @@ -350,9 +350,14 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
>         }
>
>         rc = cifs_negotiate_protocol(0, tcon->ses);
> -       if (!rc && tcon->ses->need_reconnect)
> +       if (!rc && tcon->ses->need_reconnect) {
>                 rc = cifs_setup_session(0, tcon->ses, nls_codepage);
> -
> +               if ((rc == -EACCES) && !tcon->retry) {
> +                       rc = -EHOSTDOWN;
> +                       mutex_unlock(&tcon->ses->session_mutex);
> +                       goto failed;
> +               }
> +       }
>         if (rc || !tcon->need_reconnect) {
>                 mutex_unlock(&tcon->ses->session_mutex);
>                 goto out;
> @@ -397,6 +402,7 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
>         case SMB2_SET_INFO:
>                 rc = -EAGAIN;
>         }
> +failed:
>         unload_nls(nls_codepage);
>         return rc;
>  }
> --
> 2.13.6
>
Aurélien Aptel Feb. 6, 2020, 7:47 a.m. UTC | #2
Steve French <smfrench@gmail.com> writes:
>> If we have a soft mount we should fail commands for session-setup
>> failures (such as the password having changed/ account being deleted/ ...)
>> and return an error back to the application.

Looks good to me but we need to make sure it doesnt break failover on the
buildbot.

Cheers,
diff mbox series

Patch

diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 14f209f7376f..7996d81230aa 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -350,9 +350,14 @@  smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
 	}
 
 	rc = cifs_negotiate_protocol(0, tcon->ses);
-	if (!rc && tcon->ses->need_reconnect)
+	if (!rc && tcon->ses->need_reconnect) {
 		rc = cifs_setup_session(0, tcon->ses, nls_codepage);
-
+		if ((rc == -EACCES) && !tcon->retry) {
+			rc = -EHOSTDOWN;
+			mutex_unlock(&tcon->ses->session_mutex);
+			goto failed;
+		}
+	}
 	if (rc || !tcon->need_reconnect) {
 		mutex_unlock(&tcon->ses->session_mutex);
 		goto out;
@@ -397,6 +402,7 @@  smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
 	case SMB2_SET_INFO:
 		rc = -EAGAIN;
 	}
+failed:
 	unload_nls(nls_codepage);
 	return rc;
 }