three smb3 client fixes
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmnzfsoACgkQiiy9cAdy T1E8ogv+Kx7TMahO+6RJpSHknPbwHxmEQjvz6SZkSFG7WgtupqRofAjnxIJyiqo5 PuoH2LPd9ggWvzZC3spz/J/XqcwiqY+u94h3pudGClJuLU7p1AH7eH5aS+GgFePW FFymUOWUaqwPp6NTBHKfEFg6byPfqzm7e256WpSQSDqKPiEEcrLZqxiZ0H6iOoBK 4asWO/0P6a1MMWf+rUeNq0IduHt8R1tTsukuF5Ye/B919eA3zvnlRTGjhW0X35Qc BxPaGO4eIrBvmPHSZUS2XN9tBES7kFK+lEdYpDIHkOhD67BKIqJ7rPOgoXrgJwtK MxZbTNm1Zfkrh7wbxOCbyfHLs1ckPKmOWzfa3Qjls2SyohmwaV6u2EJ2xu/A11r5 4O31gDTunwZ1f1v72k/mXbC2Bi1rIdBVzzfRxqSzMApfSeouk5PLjedvekAoqrO9 0EXGWIp/uIbs8Be1+YIEfXkitjff0znC2VFd+1N7nifF8zqBfYQJyyJpigdjhLB4 WFi1zp9C =CAio -----END PGP SIGNATURE----- Merge tag 'v7.1-rc2-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull smb client fixes from Steve French: - multichannel crediting fix - memory allocation improvement for smb2_compound_op - remove some dead code * tag 'v7.1-rc2-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: change_conf needs to be called for session setup smb: client: change allocation requirements in smb2_compound_op smb/client: remove unused smb3_parse_opt()master
commit
74b54e9b10
|
|
@ -89,7 +89,6 @@ int cifs_handle_standard(struct TCP_Server_Info *server,
|
|||
struct mid_q_entry *mid);
|
||||
char *smb3_fs_context_fullpath(const struct smb3_fs_context *ctx, char dirsep);
|
||||
int smb3_parse_devname(const char *devname, struct smb3_fs_context *ctx);
|
||||
int smb3_parse_opt(const char *options, const char *key, char **val);
|
||||
int cifs_ipaddr_cmp(struct sockaddr *srcaddr, struct sockaddr *rhs);
|
||||
bool cifs_match_ipaddr(struct sockaddr *srcaddr, struct sockaddr *rhs);
|
||||
int cifs_discard_remaining_data(struct TCP_Server_Info *server);
|
||||
|
|
|
|||
|
|
@ -536,37 +536,6 @@ cifs_parse_smb_version(struct fs_context *fc, char *value, struct smb3_fs_contex
|
|||
return 0;
|
||||
}
|
||||
|
||||
int smb3_parse_opt(const char *options, const char *key, char **val)
|
||||
{
|
||||
int rc = -ENOENT;
|
||||
char *opts, *orig, *p;
|
||||
|
||||
orig = opts = kstrdup(options, GFP_KERNEL);
|
||||
if (!opts)
|
||||
return -ENOMEM;
|
||||
|
||||
while ((p = strsep(&opts, ","))) {
|
||||
char *nval;
|
||||
|
||||
if (!*p)
|
||||
continue;
|
||||
if (strncasecmp(p, key, strlen(key)))
|
||||
continue;
|
||||
nval = strchr(p, '=');
|
||||
if (nval) {
|
||||
if (nval == p)
|
||||
continue;
|
||||
*nval++ = 0;
|
||||
*val = kstrdup(nval, GFP_KERNEL);
|
||||
rc = !*val ? -ENOMEM : 0;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
kfree(orig);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove duplicate path delimiters. Windows is supposed to do that
|
||||
* but there are some bugs that prevent rename from working if there are
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ replay_again:
|
|||
num_rqst = 0;
|
||||
server = cifs_pick_channel(ses);
|
||||
|
||||
vars = kzalloc_obj(*vars, GFP_ATOMIC);
|
||||
vars = kzalloc_obj(*vars, GFP_KERNEL);
|
||||
if (vars == NULL) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
|
|
|
|||
|
|
@ -111,10 +111,21 @@ smb2_add_credits(struct TCP_Server_Info *server,
|
|||
cifs_trace_rw_credits_zero_in_flight);
|
||||
}
|
||||
server->in_flight--;
|
||||
|
||||
/*
|
||||
* Rebalance credits when an op drains in_flight. For session setup,
|
||||
* do this only when the total accumulated credits are high enough (>2)
|
||||
* so that a newly established secondary channel can reserve credits for
|
||||
* echoes and oplocks. We expect this to happen at the end of the final
|
||||
* session setup response.
|
||||
*/
|
||||
if (server->in_flight == 0 &&
|
||||
((optype & CIFS_OP_MASK) != CIFS_NEG_OP) &&
|
||||
((optype & CIFS_OP_MASK) != CIFS_SESS_OP))
|
||||
rc = change_conf(server);
|
||||
else if (server->in_flight == 0 &&
|
||||
((optype & CIFS_OP_MASK) == CIFS_SESS_OP) && *val > 2)
|
||||
rc = change_conf(server);
|
||||
/*
|
||||
* Sometimes server returns 0 credits on oplock break ack - we need to
|
||||
* rebalance credits in this case.
|
||||
|
|
|
|||
Loading…
Reference in New Issue