mirror of https://github.com/torvalds/linux.git
six smb client fixes
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmj64UoACgkQiiy9cAdy T1GAcwwAggeoiMpFE+9tgTCBrHoJAkjkMrEF7njCf7rLa/CpjX9/1TdFL1DtsM/p lZlGRD82XZ6w88qjg/IJ8J5oNlzwCkuIWSoGcJZq2oRNQNdFBosoeM+BbBOjafMY FkLRiULHkWPEJl0I2FSnxCgypJSnXdvWjXotNBb6CfF8awI9imzb1IfypoR3WX/+ 1B1WT0xeUGdai1qFcCrHuZj6jljpq9UhA9ZPVi9W9oB9cxoKo3MA5OSFMIcnHNwq cU9dYe1/mCQe5jDwFJ7xABPZrI+YgB6U34bNMlLkr6m4ftm0tSK3y62JebjqMyoI Xk/dU+EKLDjuZM0V04qdFTwQTjRqfYL46Zj1w2uYxe73aiZJm3HVm/RIIOThGwAR 0zS/wr7JUL72xARzAvyhvOEl6QPEEJMlXYctRh2rTnIaVO3iPWmojMKmEPdj8zc4 5PdzSyzt6kb51SZ2s2Cg2p0GxMfMxBLacNWArNIShSOHdCgLxf3jMcdYBln0u9Id NkdCs8WW =AS5A -----END PGP SIGNATURE----- Merge tag '6.18-rc2-smb-client-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull smb client fixes from Steve French: - add missing tracepoints - smbdirect (RDMA) fix - fix potential issue with credits underflow - rename fix - improvement to calc_signature and additional cleanup patch * tag '6.18-rc2-smb-client-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: #include cifsglob.h before trace.h to allow structs in tracepoints cifs: Call the calc_signature functions directly smb: client: get rid of d_drop() in cifs_do_rename() cifs: Fix TCP_Server_Info::credits to be signed cifs: Add a couple of missing smb3_rw_credits tracepoints smb: client: allocate enough space for MR WRs and ib_drain_qp()
This commit is contained in:
commit
f2b2465726
|
|
@ -534,8 +534,6 @@ struct smb_version_operations {
|
||||||
void (*new_lease_key)(struct cifs_fid *);
|
void (*new_lease_key)(struct cifs_fid *);
|
||||||
int (*generate_signingkey)(struct cifs_ses *ses,
|
int (*generate_signingkey)(struct cifs_ses *ses,
|
||||||
struct TCP_Server_Info *server);
|
struct TCP_Server_Info *server);
|
||||||
int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *,
|
|
||||||
bool allocate_crypto);
|
|
||||||
int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
|
int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
|
||||||
struct cifsFileInfo *src_file);
|
struct cifsFileInfo *src_file);
|
||||||
int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,
|
int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,
|
||||||
|
|
@ -732,7 +730,7 @@ struct TCP_Server_Info {
|
||||||
bool nosharesock;
|
bool nosharesock;
|
||||||
bool tcp_nodelay;
|
bool tcp_nodelay;
|
||||||
bool terminate;
|
bool terminate;
|
||||||
unsigned int credits; /* send no more requests at once */
|
int credits; /* send no more requests at once */
|
||||||
unsigned int max_credits; /* can override large 32000 default at mnt */
|
unsigned int max_credits; /* can override large 32000 default at mnt */
|
||||||
unsigned int in_flight; /* number of requests on the wire to server */
|
unsigned int in_flight; /* number of requests on the wire to server */
|
||||||
unsigned int max_in_flight; /* max number of requests that were on wire */
|
unsigned int max_in_flight; /* max number of requests that were on wire */
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
#define _CIFSPROTO_H
|
#define _CIFSPROTO_H
|
||||||
#include <linux/nls.h>
|
#include <linux/nls.h>
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
|
#include "cifsglob.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
#ifdef CONFIG_CIFS_DFS_UPCALL
|
#ifdef CONFIG_CIFS_DFS_UPCALL
|
||||||
#include "dfs_cache.h"
|
#include "dfs_cache.h"
|
||||||
|
|
|
||||||
|
|
@ -1311,6 +1311,8 @@ cifs_readv_callback(struct mid_q_entry *mid)
|
||||||
.rreq_debug_id = rdata->rreq->debug_id,
|
.rreq_debug_id = rdata->rreq->debug_id,
|
||||||
.rreq_debug_index = rdata->subreq.debug_index,
|
.rreq_debug_index = rdata->subreq.debug_index,
|
||||||
};
|
};
|
||||||
|
unsigned int rreq_debug_id = rdata->rreq->debug_id;
|
||||||
|
unsigned int subreq_debug_index = rdata->subreq.debug_index;
|
||||||
|
|
||||||
cifs_dbg(FYI, "%s: mid=%llu state=%d result=%d bytes=%zu\n",
|
cifs_dbg(FYI, "%s: mid=%llu state=%d result=%d bytes=%zu\n",
|
||||||
__func__, mid->mid, mid->mid_state, rdata->result,
|
__func__, mid->mid, mid->mid_state, rdata->result,
|
||||||
|
|
@ -1374,6 +1376,9 @@ cifs_readv_callback(struct mid_q_entry *mid)
|
||||||
__set_bit(NETFS_SREQ_MADE_PROGRESS, &rdata->subreq.flags);
|
__set_bit(NETFS_SREQ_MADE_PROGRESS, &rdata->subreq.flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_smb3_rw_credits(rreq_debug_id, subreq_debug_index, rdata->credits.value,
|
||||||
|
server->credits, server->in_flight,
|
||||||
|
0, cifs_trace_rw_credits_read_response_clear);
|
||||||
rdata->credits.value = 0;
|
rdata->credits.value = 0;
|
||||||
rdata->subreq.error = rdata->result;
|
rdata->subreq.error = rdata->result;
|
||||||
rdata->subreq.transferred += rdata->got_bytes;
|
rdata->subreq.transferred += rdata->got_bytes;
|
||||||
|
|
@ -1381,6 +1386,9 @@ cifs_readv_callback(struct mid_q_entry *mid)
|
||||||
netfs_read_subreq_terminated(&rdata->subreq);
|
netfs_read_subreq_terminated(&rdata->subreq);
|
||||||
release_mid(mid);
|
release_mid(mid);
|
||||||
add_credits(server, &credits, 0);
|
add_credits(server, &credits, 0);
|
||||||
|
trace_smb3_rw_credits(rreq_debug_id, subreq_debug_index, 0,
|
||||||
|
server->credits, server->in_flight,
|
||||||
|
credits.value, cifs_trace_rw_credits_read_response_add);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cifs_async_readv - send an async write, and set up mid to handle result */
|
/* cifs_async_readv - send an async write, and set up mid to handle result */
|
||||||
|
|
|
||||||
|
|
@ -2484,11 +2484,8 @@ cifs_do_rename(const unsigned int xid, struct dentry *from_dentry,
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
|
#endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
|
||||||
do_rename_exit:
|
do_rename_exit:
|
||||||
if (rc == 0) {
|
if (rc == 0)
|
||||||
d_move(from_dentry, to_dentry);
|
d_move(from_dentry, to_dentry);
|
||||||
/* Force a new lookup */
|
|
||||||
d_drop(from_dentry);
|
|
||||||
}
|
|
||||||
cifs_put_tlink(tlink);
|
cifs_put_tlink(tlink);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5446,7 +5446,6 @@ struct smb_version_operations smb20_operations = {
|
||||||
.get_lease_key = smb2_get_lease_key,
|
.get_lease_key = smb2_get_lease_key,
|
||||||
.set_lease_key = smb2_set_lease_key,
|
.set_lease_key = smb2_set_lease_key,
|
||||||
.new_lease_key = smb2_new_lease_key,
|
.new_lease_key = smb2_new_lease_key,
|
||||||
.calc_signature = smb2_calc_signature,
|
|
||||||
.is_read_op = smb2_is_read_op,
|
.is_read_op = smb2_is_read_op,
|
||||||
.set_oplock_level = smb2_set_oplock_level,
|
.set_oplock_level = smb2_set_oplock_level,
|
||||||
.create_lease_buf = smb2_create_lease_buf,
|
.create_lease_buf = smb2_create_lease_buf,
|
||||||
|
|
@ -5550,7 +5549,6 @@ struct smb_version_operations smb21_operations = {
|
||||||
.get_lease_key = smb2_get_lease_key,
|
.get_lease_key = smb2_get_lease_key,
|
||||||
.set_lease_key = smb2_set_lease_key,
|
.set_lease_key = smb2_set_lease_key,
|
||||||
.new_lease_key = smb2_new_lease_key,
|
.new_lease_key = smb2_new_lease_key,
|
||||||
.calc_signature = smb2_calc_signature,
|
|
||||||
.is_read_op = smb21_is_read_op,
|
.is_read_op = smb21_is_read_op,
|
||||||
.set_oplock_level = smb21_set_oplock_level,
|
.set_oplock_level = smb21_set_oplock_level,
|
||||||
.create_lease_buf = smb2_create_lease_buf,
|
.create_lease_buf = smb2_create_lease_buf,
|
||||||
|
|
@ -5660,7 +5658,6 @@ struct smb_version_operations smb30_operations = {
|
||||||
.set_lease_key = smb2_set_lease_key,
|
.set_lease_key = smb2_set_lease_key,
|
||||||
.new_lease_key = smb2_new_lease_key,
|
.new_lease_key = smb2_new_lease_key,
|
||||||
.generate_signingkey = generate_smb30signingkey,
|
.generate_signingkey = generate_smb30signingkey,
|
||||||
.calc_signature = smb3_calc_signature,
|
|
||||||
.set_integrity = smb3_set_integrity,
|
.set_integrity = smb3_set_integrity,
|
||||||
.is_read_op = smb21_is_read_op,
|
.is_read_op = smb21_is_read_op,
|
||||||
.set_oplock_level = smb3_set_oplock_level,
|
.set_oplock_level = smb3_set_oplock_level,
|
||||||
|
|
@ -5777,7 +5774,6 @@ struct smb_version_operations smb311_operations = {
|
||||||
.set_lease_key = smb2_set_lease_key,
|
.set_lease_key = smb2_set_lease_key,
|
||||||
.new_lease_key = smb2_new_lease_key,
|
.new_lease_key = smb2_new_lease_key,
|
||||||
.generate_signingkey = generate_smb311signingkey,
|
.generate_signingkey = generate_smb311signingkey,
|
||||||
.calc_signature = smb3_calc_signature,
|
|
||||||
.set_integrity = smb3_set_integrity,
|
.set_integrity = smb3_set_integrity,
|
||||||
.is_read_op = smb21_is_read_op,
|
.is_read_op = smb21_is_read_op,
|
||||||
.set_oplock_level = smb3_set_oplock_level,
|
.set_oplock_level = smb3_set_oplock_level,
|
||||||
|
|
|
||||||
|
|
@ -39,12 +39,6 @@ extern struct mid_q_entry *smb2_setup_async_request(
|
||||||
struct TCP_Server_Info *server, struct smb_rqst *rqst);
|
struct TCP_Server_Info *server, struct smb_rqst *rqst);
|
||||||
extern struct cifs_tcon *smb2_find_smb_tcon(struct TCP_Server_Info *server,
|
extern struct cifs_tcon *smb2_find_smb_tcon(struct TCP_Server_Info *server,
|
||||||
__u64 ses_id, __u32 tid);
|
__u64 ses_id, __u32 tid);
|
||||||
extern int smb2_calc_signature(struct smb_rqst *rqst,
|
|
||||||
struct TCP_Server_Info *server,
|
|
||||||
bool allocate_crypto);
|
|
||||||
extern int smb3_calc_signature(struct smb_rqst *rqst,
|
|
||||||
struct TCP_Server_Info *server,
|
|
||||||
bool allocate_crypto);
|
|
||||||
extern void smb2_echo_request(struct work_struct *work);
|
extern void smb2_echo_request(struct work_struct *work);
|
||||||
extern __le32 smb2_get_lease_state(struct cifsInodeInfo *cinode);
|
extern __le32 smb2_get_lease_state(struct cifsInodeInfo *cinode);
|
||||||
extern bool smb2_is_valid_oplock_break(char *buffer,
|
extern bool smb2_is_valid_oplock_break(char *buffer,
|
||||||
|
|
|
||||||
|
|
@ -209,9 +209,9 @@ smb2_find_smb_tcon(struct TCP_Server_Info *server, __u64 ses_id, __u32 tid)
|
||||||
return tcon;
|
return tcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
smb2_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
|
smb2_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
|
||||||
bool allocate_crypto)
|
bool allocate_crypto)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char smb2_signature[SMB2_HMACSHA256_SIZE];
|
unsigned char smb2_signature[SMB2_HMACSHA256_SIZE];
|
||||||
|
|
@ -465,9 +465,9 @@ generate_smb311signingkey(struct cifs_ses *ses,
|
||||||
return generate_smb3signingkey(ses, server, &triplet);
|
return generate_smb3signingkey(ses, server, &triplet);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
|
smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
|
||||||
bool allocate_crypto)
|
bool allocate_crypto)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char smb3_signature[SMB2_CMACAES_SIZE];
|
unsigned char smb3_signature[SMB2_CMACAES_SIZE];
|
||||||
|
|
@ -477,6 +477,9 @@ smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
|
||||||
struct smb_rqst drqst;
|
struct smb_rqst drqst;
|
||||||
u8 key[SMB3_SIGN_KEY_SIZE];
|
u8 key[SMB3_SIGN_KEY_SIZE];
|
||||||
|
|
||||||
|
if (server->vals->protocol_id <= SMB21_PROT_ID)
|
||||||
|
return smb2_calc_signature(rqst, server, allocate_crypto);
|
||||||
|
|
||||||
rc = smb3_get_sign_key(le64_to_cpu(shdr->SessionId), server, key);
|
rc = smb3_get_sign_key(le64_to_cpu(shdr->SessionId), server, key);
|
||||||
if (unlikely(rc)) {
|
if (unlikely(rc)) {
|
||||||
cifs_server_dbg(FYI, "%s: Could not get signing key\n", __func__);
|
cifs_server_dbg(FYI, "%s: Could not get signing key\n", __func__);
|
||||||
|
|
@ -547,7 +550,6 @@ smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server,
|
||||||
static int
|
static int
|
||||||
smb2_sign_rqst(struct smb_rqst *rqst, struct TCP_Server_Info *server)
|
smb2_sign_rqst(struct smb_rqst *rqst, struct TCP_Server_Info *server)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
|
||||||
struct smb2_hdr *shdr;
|
struct smb2_hdr *shdr;
|
||||||
struct smb2_sess_setup_req *ssr;
|
struct smb2_sess_setup_req *ssr;
|
||||||
bool is_binding;
|
bool is_binding;
|
||||||
|
|
@ -574,9 +576,7 @@ smb2_sign_rqst(struct smb_rqst *rqst, struct TCP_Server_Info *server)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = server->ops->calc_signature(rqst, server, false);
|
return smb3_calc_signature(rqst, server, false);
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -612,7 +612,7 @@ smb2_verify_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server)
|
||||||
|
|
||||||
memset(shdr->Signature, 0, SMB2_SIGNATURE_SIZE);
|
memset(shdr->Signature, 0, SMB2_SIGNATURE_SIZE);
|
||||||
|
|
||||||
rc = server->ops->calc_signature(rqst, server, true);
|
rc = smb3_calc_signature(rqst, server, true);
|
||||||
|
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
|
||||||
|
|
@ -1767,6 +1767,7 @@ static struct smbd_connection *_smbd_get_connection(
|
||||||
struct smbdirect_socket *sc;
|
struct smbdirect_socket *sc;
|
||||||
struct smbdirect_socket_parameters *sp;
|
struct smbdirect_socket_parameters *sp;
|
||||||
struct rdma_conn_param conn_param;
|
struct rdma_conn_param conn_param;
|
||||||
|
struct ib_qp_cap qp_cap;
|
||||||
struct ib_qp_init_attr qp_attr;
|
struct ib_qp_init_attr qp_attr;
|
||||||
struct sockaddr_in *addr_in = (struct sockaddr_in *) dstaddr;
|
struct sockaddr_in *addr_in = (struct sockaddr_in *) dstaddr;
|
||||||
struct ib_port_immutable port_immutable;
|
struct ib_port_immutable port_immutable;
|
||||||
|
|
@ -1838,6 +1839,25 @@ static struct smbd_connection *_smbd_get_connection(
|
||||||
goto config_failed;
|
goto config_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sp->responder_resources =
|
||||||
|
min_t(u8, sp->responder_resources,
|
||||||
|
sc->ib.dev->attrs.max_qp_rd_atom);
|
||||||
|
log_rdma_mr(INFO, "responder_resources=%d\n",
|
||||||
|
sp->responder_resources);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We use allocate sp->responder_resources * 2 MRs
|
||||||
|
* and each MR needs WRs for REG and INV, so
|
||||||
|
* we use '* 4'.
|
||||||
|
*
|
||||||
|
* +1 for ib_drain_qp()
|
||||||
|
*/
|
||||||
|
memset(&qp_cap, 0, sizeof(qp_cap));
|
||||||
|
qp_cap.max_send_wr = sp->send_credit_target + sp->responder_resources * 4 + 1;
|
||||||
|
qp_cap.max_recv_wr = sp->recv_credit_max + 1;
|
||||||
|
qp_cap.max_send_sge = SMBDIRECT_SEND_IO_MAX_SGE;
|
||||||
|
qp_cap.max_recv_sge = SMBDIRECT_RECV_IO_MAX_SGE;
|
||||||
|
|
||||||
sc->ib.pd = ib_alloc_pd(sc->ib.dev, 0);
|
sc->ib.pd = ib_alloc_pd(sc->ib.dev, 0);
|
||||||
if (IS_ERR(sc->ib.pd)) {
|
if (IS_ERR(sc->ib.pd)) {
|
||||||
rc = PTR_ERR(sc->ib.pd);
|
rc = PTR_ERR(sc->ib.pd);
|
||||||
|
|
@ -1848,7 +1868,7 @@ static struct smbd_connection *_smbd_get_connection(
|
||||||
|
|
||||||
sc->ib.send_cq =
|
sc->ib.send_cq =
|
||||||
ib_alloc_cq_any(sc->ib.dev, sc,
|
ib_alloc_cq_any(sc->ib.dev, sc,
|
||||||
sp->send_credit_target, IB_POLL_SOFTIRQ);
|
qp_cap.max_send_wr, IB_POLL_SOFTIRQ);
|
||||||
if (IS_ERR(sc->ib.send_cq)) {
|
if (IS_ERR(sc->ib.send_cq)) {
|
||||||
sc->ib.send_cq = NULL;
|
sc->ib.send_cq = NULL;
|
||||||
goto alloc_cq_failed;
|
goto alloc_cq_failed;
|
||||||
|
|
@ -1856,7 +1876,7 @@ static struct smbd_connection *_smbd_get_connection(
|
||||||
|
|
||||||
sc->ib.recv_cq =
|
sc->ib.recv_cq =
|
||||||
ib_alloc_cq_any(sc->ib.dev, sc,
|
ib_alloc_cq_any(sc->ib.dev, sc,
|
||||||
sp->recv_credit_max, IB_POLL_SOFTIRQ);
|
qp_cap.max_recv_wr, IB_POLL_SOFTIRQ);
|
||||||
if (IS_ERR(sc->ib.recv_cq)) {
|
if (IS_ERR(sc->ib.recv_cq)) {
|
||||||
sc->ib.recv_cq = NULL;
|
sc->ib.recv_cq = NULL;
|
||||||
goto alloc_cq_failed;
|
goto alloc_cq_failed;
|
||||||
|
|
@ -1865,11 +1885,7 @@ static struct smbd_connection *_smbd_get_connection(
|
||||||
memset(&qp_attr, 0, sizeof(qp_attr));
|
memset(&qp_attr, 0, sizeof(qp_attr));
|
||||||
qp_attr.event_handler = smbd_qp_async_error_upcall;
|
qp_attr.event_handler = smbd_qp_async_error_upcall;
|
||||||
qp_attr.qp_context = sc;
|
qp_attr.qp_context = sc;
|
||||||
qp_attr.cap.max_send_wr = sp->send_credit_target;
|
qp_attr.cap = qp_cap;
|
||||||
qp_attr.cap.max_recv_wr = sp->recv_credit_max;
|
|
||||||
qp_attr.cap.max_send_sge = SMBDIRECT_SEND_IO_MAX_SGE;
|
|
||||||
qp_attr.cap.max_recv_sge = SMBDIRECT_RECV_IO_MAX_SGE;
|
|
||||||
qp_attr.cap.max_inline_data = 0;
|
|
||||||
qp_attr.sq_sig_type = IB_SIGNAL_REQ_WR;
|
qp_attr.sq_sig_type = IB_SIGNAL_REQ_WR;
|
||||||
qp_attr.qp_type = IB_QPT_RC;
|
qp_attr.qp_type = IB_QPT_RC;
|
||||||
qp_attr.send_cq = sc->ib.send_cq;
|
qp_attr.send_cq = sc->ib.send_cq;
|
||||||
|
|
@ -1883,12 +1899,6 @@ static struct smbd_connection *_smbd_get_connection(
|
||||||
}
|
}
|
||||||
sc->ib.qp = sc->rdma.cm_id->qp;
|
sc->ib.qp = sc->rdma.cm_id->qp;
|
||||||
|
|
||||||
sp->responder_resources =
|
|
||||||
min_t(u8, sp->responder_resources,
|
|
||||||
sc->ib.dev->attrs.max_qp_rd_atom);
|
|
||||||
log_rdma_mr(INFO, "responder_resources=%d\n",
|
|
||||||
sp->responder_resources);
|
|
||||||
|
|
||||||
memset(&conn_param, 0, sizeof(conn_param));
|
memset(&conn_param, 0, sizeof(conn_param));
|
||||||
conn_param.initiator_depth = sp->initiator_depth;
|
conn_param.initiator_depth = sp->initiator_depth;
|
||||||
conn_param.responder_resources = sp->responder_resources;
|
conn_param.responder_resources = sp->responder_resources;
|
||||||
|
|
|
||||||
|
|
@ -4,5 +4,6 @@
|
||||||
*
|
*
|
||||||
* Author(s): Steve French <stfrench@microsoft.com>
|
* Author(s): Steve French <stfrench@microsoft.com>
|
||||||
*/
|
*/
|
||||||
|
#include "cifsglob.h"
|
||||||
#define CREATE_TRACE_POINTS
|
#define CREATE_TRACE_POINTS
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue