cifs: new mount option called retrans
[ Upstream commit ce09f8d8a7130e6edfdd6fcad8eb277824d5de95 ] We have several places in the code where we treat the error -EAGAIN very differently. Some code retry for arbitrary number of times. Introducing this new mount option named "retrans", so that all these handlers of -EAGAIN can retry a fixed number of times. This applies only to soft mounts. Signed-off-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
de2cadf4bf
commit
b4ca2942a0
|
@ -682,6 +682,8 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
|
|||
seq_printf(s, ",rasize=%u", cifs_sb->ctx->rasize);
|
||||
if (tcon->ses->server->min_offload)
|
||||
seq_printf(s, ",esize=%u", tcon->ses->server->min_offload);
|
||||
if (tcon->ses->server->retrans)
|
||||
seq_printf(s, ",retrans=%u", tcon->ses->server->retrans);
|
||||
seq_printf(s, ",echo_interval=%lu",
|
||||
tcon->ses->server->echo_interval / HZ);
|
||||
|
||||
|
|
|
@ -754,6 +754,7 @@ struct TCP_Server_Info {
|
|||
unsigned int max_read;
|
||||
unsigned int max_write;
|
||||
unsigned int min_offload;
|
||||
unsigned int retrans;
|
||||
__le16 compress_algorithm;
|
||||
__u16 signing_algorithm;
|
||||
__le16 cipher_type;
|
||||
|
|
|
@ -1592,6 +1592,9 @@ static int match_server(struct TCP_Server_Info *server,
|
|||
if (server->min_offload != ctx->min_offload)
|
||||
return 0;
|
||||
|
||||
if (server->retrans != ctx->retrans)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1816,6 +1819,7 @@ smbd_connected:
|
|||
goto out_err_crypto_release;
|
||||
}
|
||||
tcp_ses->min_offload = ctx->min_offload;
|
||||
tcp_ses->retrans = ctx->retrans;
|
||||
/*
|
||||
* at this point we are the only ones with the pointer
|
||||
* to the struct since the kernel thread not created yet
|
||||
|
|
|
@ -139,6 +139,7 @@ const struct fs_parameter_spec smb3_fs_parameters[] = {
|
|||
fsparam_u32("dir_mode", Opt_dirmode),
|
||||
fsparam_u32("port", Opt_port),
|
||||
fsparam_u32("min_enc_offload", Opt_min_enc_offload),
|
||||
fsparam_u32("retrans", Opt_retrans),
|
||||
fsparam_u32("esize", Opt_min_enc_offload),
|
||||
fsparam_u32("bsize", Opt_blocksize),
|
||||
fsparam_u32("rasize", Opt_rasize),
|
||||
|
@ -1098,6 +1099,9 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
|
|||
case Opt_min_enc_offload:
|
||||
ctx->min_offload = result.uint_32;
|
||||
break;
|
||||
case Opt_retrans:
|
||||
ctx->retrans = result.uint_32;
|
||||
break;
|
||||
case Opt_blocksize:
|
||||
/*
|
||||
* inode blocksize realistically should never need to be
|
||||
|
@ -1678,6 +1682,8 @@ int smb3_init_fs_context(struct fs_context *fc)
|
|||
ctx->backupuid_specified = false; /* no backup intent for a user */
|
||||
ctx->backupgid_specified = false; /* no backup intent for a group */
|
||||
|
||||
ctx->retrans = 1;
|
||||
|
||||
/*
|
||||
* short int override_uid = -1;
|
||||
* short int override_gid = -1;
|
||||
|
|
|
@ -118,6 +118,7 @@ enum cifs_param {
|
|||
Opt_file_mode,
|
||||
Opt_dirmode,
|
||||
Opt_min_enc_offload,
|
||||
Opt_retrans,
|
||||
Opt_blocksize,
|
||||
Opt_rasize,
|
||||
Opt_rsize,
|
||||
|
@ -249,6 +250,7 @@ struct smb3_fs_context {
|
|||
unsigned int rsize;
|
||||
unsigned int wsize;
|
||||
unsigned int min_offload;
|
||||
unsigned int retrans;
|
||||
bool sockopt_tcp_nodelay:1;
|
||||
/* attribute cache timemout for files and directories in jiffies */
|
||||
unsigned long acregmax;
|
||||
|
|
Loading…
Reference in New Issue