smb3: add tracepoint to catch cases where credit refund of failed op overlaps reconnect
Add tracepoint to catch potential cases where a pending operation overlapping a reconnect could fail and incorrectly refund its credits causing the client to think it has more credits available than the server thinks it does. Signed-off-by: Steve French <stfrench@microsoft.com> Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
This commit is contained in:
parent
ce7fb50f92
commit
b340a4d4aa
|
@ -74,6 +74,12 @@ smb2_add_credits(struct TCP_Server_Info *server, const unsigned int add,
|
||||||
int *val, rc = 0;
|
int *val, rc = 0;
|
||||||
spin_lock(&server->req_lock);
|
spin_lock(&server->req_lock);
|
||||||
val = server->ops->get_credits_field(server, optype);
|
val = server->ops->get_credits_field(server, optype);
|
||||||
|
|
||||||
|
/* eg found case where write overlapping reconnect messed up credits */
|
||||||
|
if (((optype & CIFS_OP_MASK) == CIFS_NEG_OP) && (*val != 0))
|
||||||
|
trace_smb3_reconnect_with_invalid_credits(server->CurrentMid,
|
||||||
|
server->hostname, *val);
|
||||||
|
|
||||||
*val += add;
|
*val += add;
|
||||||
if (*val > 65000) {
|
if (*val > 65000) {
|
||||||
*val = 65000; /* Don't get near 64K credits, avoid srv bugs */
|
*val = 65000; /* Don't get near 64K credits, avoid srv bugs */
|
||||||
|
|
|
@ -486,6 +486,36 @@ DEFINE_EVENT(smb3_reconnect_class, smb3_##name, \
|
||||||
DEFINE_SMB3_RECONNECT_EVENT(reconnect);
|
DEFINE_SMB3_RECONNECT_EVENT(reconnect);
|
||||||
DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
|
DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
|
||||||
|
|
||||||
|
DECLARE_EVENT_CLASS(smb3_credit_class,
|
||||||
|
TP_PROTO(__u64 currmid,
|
||||||
|
char *hostname,
|
||||||
|
int credits),
|
||||||
|
TP_ARGS(currmid, hostname, credits),
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
__field(__u64, currmid)
|
||||||
|
__field(char *, hostname)
|
||||||
|
__field(int, credits)
|
||||||
|
),
|
||||||
|
TP_fast_assign(
|
||||||
|
__entry->currmid = currmid;
|
||||||
|
__entry->hostname = hostname;
|
||||||
|
__entry->credits = credits;
|
||||||
|
),
|
||||||
|
TP_printk("server=%s current_mid=0x%llx credits=%d",
|
||||||
|
__entry->hostname,
|
||||||
|
__entry->currmid,
|
||||||
|
__entry->credits)
|
||||||
|
)
|
||||||
|
|
||||||
|
#define DEFINE_SMB3_CREDIT_EVENT(name) \
|
||||||
|
DEFINE_EVENT(smb3_credit_class, smb3_##name, \
|
||||||
|
TP_PROTO(__u64 currmid, \
|
||||||
|
char *hostname, \
|
||||||
|
int credits), \
|
||||||
|
TP_ARGS(currmid, hostname, credits))
|
||||||
|
|
||||||
|
DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
|
||||||
|
|
||||||
#endif /* _CIFS_TRACE_H */
|
#endif /* _CIFS_TRACE_H */
|
||||||
|
|
||||||
#undef TRACE_INCLUDE_PATH
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
|
Loading…
Reference in New Issue