Commit ce09f8d8 authored by Shyam Prasad N's avatar Shyam Prasad N Committed by Steve French
Browse files

cifs: new mount option called retrans



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: default avatarShyam Prasad N <sprasad@microsoft.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 49fe25ce
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -681,6 +681,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);

+1 −0
Original line number Diff line number Diff line
@@ -753,6 +753,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;
+4 −0
Original line number Diff line number Diff line
@@ -1574,6 +1574,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;
}

@@ -1798,6 +1801,7 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
		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
+6 −0
Original line number Diff line number Diff line
@@ -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),
@@ -1064,6 +1065,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
@@ -1619,6 +1623,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;
+2 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ enum cifs_param {
	Opt_file_mode,
	Opt_dirmode,
	Opt_min_enc_offload,
	Opt_retrans,
	Opt_blocksize,
	Opt_rasize,
	Opt_rsize,
@@ -245,6 +246,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;