diff options
author | Ronnie Sahlberg <lsahlber@redhat.com> | 2022-01-18 03:16:57 +0100 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2022-01-18 07:10:03 +0100 |
commit | 5455b9ecaf231ec5c6b0cd5c6076eb64c9dbc9aa (patch) | |
tree | 2d94649b45e5f2ab110ee192fa5b77458018de1e /fs | |
parent | cifs: quirk for STATUS_OBJECT_NAME_INVALID returned for non-ASCII dfs refs (diff) | |
download | linux-5455b9ecaf231ec5c6b0cd5c6076eb64c9dbc9aa.tar.xz linux-5455b9ecaf231ec5c6b0cd5c6076eb64c9dbc9aa.zip |
cifs: serialize all mount attempts
RHBZ: 2008434
Some servers, such as Windows2016 have a very low number of concurrent mounts that
they allow from each client.
This can be a problem if you have a more than a handful (==3 in this case)
of cifs entries in your fstab and cause a number of the mounts there to randomly fail.
Add a global mutex and use it to serialize all mount attempts.
Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/fs_context.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/cifs/fs_context.c b/fs/cifs/fs_context.c index e3ed25dc6f3f..7ec35f3f0a5f 100644 --- a/fs/cifs/fs_context.c +++ b/fs/cifs/fs_context.c @@ -37,6 +37,8 @@ #include "rfc1002pdu.h" #include "fs_context.h" +static DEFINE_MUTEX(cifs_mount_mutex); + static const match_table_t cifs_smb_version_tokens = { { Smb_1, SMB1_VERSION_STRING }, { Smb_20, SMB20_VERSION_STRING}, @@ -707,10 +709,14 @@ static int smb3_get_tree_common(struct fs_context *fc) static int smb3_get_tree(struct fs_context *fc) { int err = smb3_fs_context_validate(fc); + int ret; if (err) return err; - return smb3_get_tree_common(fc); + mutex_lock(&cifs_mount_mutex); + ret = smb3_get_tree_common(fc); + mutex_unlock(&cifs_mount_mutex); + return ret; } static void smb3_fs_context_free(struct fs_context *fc) |