Lines Matching refs:ses

153 	struct cifs_ses *ses;  in cifs_signal_cifsd_for_reconnect()  local
168 list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { in cifs_signal_cifsd_for_reconnect()
169 spin_lock(&ses->chan_lock); in cifs_signal_cifsd_for_reconnect()
170 for (i = 0; i < ses->chan_count; i++) { in cifs_signal_cifsd_for_reconnect()
171 spin_lock(&ses->chans[i].server->srv_lock); in cifs_signal_cifsd_for_reconnect()
172 ses->chans[i].server->tcpStatus = CifsNeedReconnect; in cifs_signal_cifsd_for_reconnect()
173 spin_unlock(&ses->chans[i].server->srv_lock); in cifs_signal_cifsd_for_reconnect()
175 spin_unlock(&ses->chan_lock); in cifs_signal_cifsd_for_reconnect()
195 struct cifs_ses *ses, *nses; in cifs_mark_tcp_ses_conns_for_reconnect() local
209 list_for_each_entry_safe(ses, nses, &pserver->smb_ses_list, smb_ses_list) { in cifs_mark_tcp_ses_conns_for_reconnect()
211 if (!cifs_chan_is_iface_active(ses, server)) in cifs_mark_tcp_ses_conns_for_reconnect()
212 cifs_chan_update_iface(ses, server); in cifs_mark_tcp_ses_conns_for_reconnect()
214 spin_lock(&ses->chan_lock); in cifs_mark_tcp_ses_conns_for_reconnect()
215 if (!mark_smb_session && cifs_chan_needs_reconnect(ses, server)) in cifs_mark_tcp_ses_conns_for_reconnect()
219 CIFS_SET_ALL_CHANS_NEED_RECONNECT(ses); in cifs_mark_tcp_ses_conns_for_reconnect()
221 cifs_chan_set_need_reconnect(ses, server); in cifs_mark_tcp_ses_conns_for_reconnect()
224 if (!mark_smb_session && !CIFS_ALL_CHANS_NEED_RECONNECT(ses)) in cifs_mark_tcp_ses_conns_for_reconnect()
227 ses->ses_status = SES_NEED_RECON; in cifs_mark_tcp_ses_conns_for_reconnect()
229 list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { in cifs_mark_tcp_ses_conns_for_reconnect()
233 if (ses->tcon_ipc) { in cifs_mark_tcp_ses_conns_for_reconnect()
234 ses->tcon_ipc->need_reconnect = true; in cifs_mark_tcp_ses_conns_for_reconnect()
235 ses->tcon_ipc->status = TID_NEED_RECON; in cifs_mark_tcp_ses_conns_for_reconnect()
239 spin_unlock(&ses->chan_lock); in cifs_mark_tcp_ses_conns_for_reconnect()
1725 static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx) in match_session() argument
1728 ctx->sectype != ses->sectype) in match_session()
1735 spin_lock(&ses->chan_lock); in match_session()
1736 if (ses->chan_max < ctx->max_channels) { in match_session()
1737 spin_unlock(&ses->chan_lock); in match_session()
1740 spin_unlock(&ses->chan_lock); in match_session()
1742 switch (ses->sectype) { in match_session()
1744 if (!uid_eq(ctx->cred_uid, ses->cred_uid)) in match_session()
1749 if (ses->user_name == NULL) { in match_session()
1756 if (strncmp(ses->user_name, in match_session()
1761 ses->password != NULL && in match_session()
1762 strncmp(ses->password, in match_session()
1780 cifs_setup_ipc(struct cifs_ses *ses, struct smb3_fs_context *ctx) in cifs_setup_ipc() argument
1786 struct TCP_Server_Info *server = ses->server; in cifs_setup_ipc()
1809 tcon->ses = ses; in cifs_setup_ipc()
1812 rc = server->ops->tree_connect(xid, ses, unc, tcon, ctx->local_nls); in cifs_setup_ipc()
1826 ses->tcon_ipc = tcon; in cifs_setup_ipc()
1844 cifs_free_ipc(struct cifs_ses *ses) in cifs_free_ipc() argument
1846 struct cifs_tcon *tcon = ses->tcon_ipc; in cifs_free_ipc()
1852 ses->tcon_ipc = NULL; in cifs_free_ipc()
1859 struct cifs_ses *ses; in cifs_find_smb_ses() local
1862 list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { in cifs_find_smb_ses()
1863 spin_lock(&ses->ses_lock); in cifs_find_smb_ses()
1864 if (ses->ses_status == SES_EXITING) { in cifs_find_smb_ses()
1865 spin_unlock(&ses->ses_lock); in cifs_find_smb_ses()
1868 if (!match_session(ses, ctx)) { in cifs_find_smb_ses()
1869 spin_unlock(&ses->ses_lock); in cifs_find_smb_ses()
1872 spin_unlock(&ses->ses_lock); in cifs_find_smb_ses()
1874 ++ses->ses_count; in cifs_find_smb_ses()
1876 return ses; in cifs_find_smb_ses()
1882 void cifs_put_smb_ses(struct cifs_ses *ses) in cifs_put_smb_ses() argument
1886 struct TCP_Server_Info *server = ses->server; in cifs_put_smb_ses()
1888 spin_lock(&ses->ses_lock); in cifs_put_smb_ses()
1889 if (ses->ses_status == SES_EXITING) { in cifs_put_smb_ses()
1890 spin_unlock(&ses->ses_lock); in cifs_put_smb_ses()
1893 spin_unlock(&ses->ses_lock); in cifs_put_smb_ses()
1895 cifs_dbg(FYI, "%s: ses_count=%d\n", __func__, ses->ses_count); in cifs_put_smb_ses()
1897 "%s: ses ipc: %s\n", __func__, ses->tcon_ipc ? ses->tcon_ipc->tree_name : "NONE"); in cifs_put_smb_ses()
1900 if (--ses->ses_count > 0) { in cifs_put_smb_ses()
1907 WARN_ON(ses->ses_count < 0); in cifs_put_smb_ses()
1909 if (ses->ses_status == SES_GOOD) in cifs_put_smb_ses()
1910 ses->ses_status = SES_EXITING; in cifs_put_smb_ses()
1912 cifs_free_ipc(ses); in cifs_put_smb_ses()
1914 if (ses->ses_status == SES_EXITING && server->ops->logoff) { in cifs_put_smb_ses()
1916 rc = server->ops->logoff(xid, ses); in cifs_put_smb_ses()
1924 list_del_init(&ses->smb_ses_list); in cifs_put_smb_ses()
1927 chan_count = ses->chan_count; in cifs_put_smb_ses()
1934 if (ses->chans[i].iface) { in cifs_put_smb_ses()
1935 kref_put(&ses->chans[i].iface->refcount, release_iface); in cifs_put_smb_ses()
1936 ses->chans[i].iface = NULL; in cifs_put_smb_ses()
1938 cifs_put_tcp_session(ses->chans[i].server, 0); in cifs_put_smb_ses()
1939 ses->chans[i].server = NULL; in cifs_put_smb_ses()
1943 sesInfoFree(ses); in cifs_put_smb_ses()
1954 cifs_set_cifscreds(struct smb3_fs_context *ctx, struct cifs_ses *ses) in cifs_set_cifscreds() argument
1962 struct TCP_Server_Info *server = ses->server; in cifs_set_cifscreds()
1991 if (!ses->domainName) { in cifs_set_cifscreds()
1998 sprintf(desc, "cifs:d:%s", ses->domainName); in cifs_set_cifscreds()
2067 if (is_domain && ses->domainName) { in cifs_set_cifscreds()
2068 ctx->domainname = kstrdup(ses->domainName, GFP_KERNEL); in cifs_set_cifscreds()
2081 strscpy(ctx->workstation_name, ses->workstation_name, sizeof(ctx->workstation_name)); in cifs_set_cifscreds()
2094 struct cifs_ses *ses __attribute__((unused))) in cifs_set_cifscreds() argument
2114 struct cifs_ses *ses; in cifs_get_smb_ses() local
2120 ses = cifs_find_smb_ses(server, ctx); in cifs_get_smb_ses()
2121 if (ses) { in cifs_get_smb_ses()
2123 ses->ses_status); in cifs_get_smb_ses()
2125 spin_lock(&ses->chan_lock); in cifs_get_smb_ses()
2126 if (cifs_chan_needs_reconnect(ses, server)) { in cifs_get_smb_ses()
2127 spin_unlock(&ses->chan_lock); in cifs_get_smb_ses()
2130 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
2131 rc = cifs_negotiate_protocol(xid, ses, server); in cifs_get_smb_ses()
2133 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2135 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
2140 rc = cifs_setup_session(xid, ses, server, in cifs_get_smb_ses()
2143 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2145 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
2149 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2151 spin_lock(&ses->chan_lock); in cifs_get_smb_ses()
2153 spin_unlock(&ses->chan_lock); in cifs_get_smb_ses()
2158 return ses; in cifs_get_smb_ses()
2164 ses = sesInfoAlloc(); in cifs_get_smb_ses()
2165 if (ses == NULL) in cifs_get_smb_ses()
2169 ses->server = server; in cifs_get_smb_ses()
2171 sprintf(ses->ip_addr, "%pI6", &addr6->sin6_addr); in cifs_get_smb_ses()
2173 sprintf(ses->ip_addr, "%pI4", &addr->sin_addr); in cifs_get_smb_ses()
2176 ses->user_name = kstrdup(ctx->username, GFP_KERNEL); in cifs_get_smb_ses()
2177 if (!ses->user_name) in cifs_get_smb_ses()
2183 ses->password = kstrdup(ctx->password, GFP_KERNEL); in cifs_get_smb_ses()
2184 if (!ses->password) in cifs_get_smb_ses()
2188 ses->domainName = kstrdup(ctx->domainname, GFP_KERNEL); in cifs_get_smb_ses()
2189 if (!ses->domainName) in cifs_get_smb_ses()
2193 strscpy(ses->workstation_name, ctx->workstation_name, sizeof(ses->workstation_name)); in cifs_get_smb_ses()
2196 ses->domainAuto = ctx->domainauto; in cifs_get_smb_ses()
2197 ses->cred_uid = ctx->cred_uid; in cifs_get_smb_ses()
2198 ses->linux_uid = ctx->linux_uid; in cifs_get_smb_ses()
2200 ses->sectype = ctx->sectype; in cifs_get_smb_ses()
2201 ses->sign = ctx->sign; in cifs_get_smb_ses()
2204 spin_lock(&ses->chan_lock); in cifs_get_smb_ses()
2205 ses->chans[0].server = server; in cifs_get_smb_ses()
2206 ses->chan_count = 1; in cifs_get_smb_ses()
2207 ses->chan_max = ctx->multichannel ? ctx->max_channels:1; in cifs_get_smb_ses()
2208 ses->chans_need_reconnect = 1; in cifs_get_smb_ses()
2209 spin_unlock(&ses->chan_lock); in cifs_get_smb_ses()
2211 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
2212 rc = cifs_negotiate_protocol(xid, ses, server); in cifs_get_smb_ses()
2214 rc = cifs_setup_session(xid, ses, server, ctx->local_nls); in cifs_get_smb_ses()
2215 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2218 spin_lock(&ses->chan_lock); in cifs_get_smb_ses()
2219 memcpy(ses->chans[0].signkey, ses->smb3signingkey, in cifs_get_smb_ses()
2220 sizeof(ses->smb3signingkey)); in cifs_get_smb_ses()
2221 spin_unlock(&ses->chan_lock); in cifs_get_smb_ses()
2232 list_add(&ses->smb_ses_list, &server->smb_ses_list); in cifs_get_smb_ses()
2235 cifs_setup_ipc(ses, ctx); in cifs_get_smb_ses()
2239 return ses; in cifs_get_smb_ses()
2242 sesInfoFree(ses); in cifs_get_smb_ses()
2269 cifs_find_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx) in cifs_find_tcon() argument
2274 list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { in cifs_find_tcon()
2293 struct cifs_ses *ses; in cifs_put_tcon() local
2302 ses = tcon->ses; in cifs_put_tcon()
2333 if (ses->server->ops->tree_disconnect) in cifs_put_tcon()
2334 ses->server->ops->tree_disconnect(xid, tcon); in cifs_put_tcon()
2339 cifs_put_smb_ses(ses); in cifs_put_tcon()
2365 cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx) in cifs_get_tcon() argument
2370 tcon = cifs_find_tcon(ses, ctx); in cifs_get_tcon()
2377 cifs_put_smb_ses(ses); in cifs_get_tcon()
2381 if (!ses->server->ops->tree_connect) { in cifs_get_tcon()
2393 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2403 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2412 tcon->ses = ses; in cifs_get_tcon()
2422 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2427 } else if (tcon->ses->server->capabilities & in cifs_get_tcon()
2438 if (ses->server->posix_ext_supported) { in cifs_get_tcon()
2441 } else if ((ses->server->vals->protocol_id == SMB311_PROT_ID) || in cifs_get_tcon()
2442 (strcmp(ses->server->vals->version_string, in cifs_get_tcon()
2444 (strcmp(ses->server->vals->version_string, in cifs_get_tcon()
2458 rc = ses->server->ops->tree_connect(xid, ses, ctx->UNC, tcon, in cifs_get_tcon()
2468 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2473 } else if (ses->server->capabilities & in cifs_get_tcon()
2483 && (ses->server->capabilities & SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) in cifs_get_tcon()
2488 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2499 if (ses->server->vals->protocol_id >= SMB30_PROT_ID) { in cifs_get_tcon()
2534 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2551 if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING) in cifs_get_tcon()
2562 if (ses->server->dialect >= SMB30_PROT_ID && in cifs_get_tcon()
2563 (ses->server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL)) { in cifs_get_tcon()
2570 list_add(&tcon->tcon_list, &ses->tcon_list); in cifs_get_tcon()
2671 struct cifs_ses *ses; in cifs_match_super() local
2686 ses = tcon->ses; in cifs_match_super()
2687 tcp_srv = ses->server; in cifs_match_super()
2694 spin_lock(&ses->ses_lock); in cifs_match_super()
2697 !match_session(ses, ctx) || in cifs_match_super()
2707 spin_unlock(&ses->ses_lock); in cifs_match_super()
3138 else if (mnt_ctx->ses) in cifs_mount_put_conns()
3139 cifs_put_smb_ses(mnt_ctx->ses); in cifs_mount_put_conns()
3150 struct cifs_ses *ses = NULL; in cifs_mount_get_session() local
3171 ses = cifs_get_smb_ses(server, ctx); in cifs_mount_get_session()
3172 if (IS_ERR(ses)) { in cifs_mount_get_session()
3173 rc = PTR_ERR(ses); in cifs_mount_get_session()
3174 ses = NULL; in cifs_mount_get_session()
3178 if ((ctx->persistent == true) && (!(ses->server->capabilities & in cifs_mount_get_session()
3187 mnt_ctx->ses = ses; in cifs_mount_get_session()
3201 if (WARN_ON_ONCE(!mnt_ctx || !mnt_ctx->server || !mnt_ctx->ses || !mnt_ctx->fs_ctx || in cifs_mount_get_tcon()
3211 tcon = cifs_get_tcon(mnt_ctx->ses, ctx); in cifs_mount_get_tcon()
3224 if (cap_unix(tcon->ses)) { in cifs_mount_get_tcon()
3230 spin_lock(&tcon->ses->server->srv_lock); in cifs_mount_get_tcon()
3231 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && in cifs_mount_get_tcon()
3234 spin_unlock(&tcon->ses->server->srv_lock); in cifs_mount_get_tcon()
3238 spin_unlock(&tcon->ses->server->srv_lock); in cifs_mount_get_tcon()
3282 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in mount_setup_tlink() argument
3292 tlink->tl_uid = ses->linux_uid; in mount_setup_tlink()
3433 cifs_try_adding_channels(cifs_sb, mnt_ctx.ses); in cifs_mount()
3434 rc = mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); in cifs_mount()
3468 rc = mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); in cifs_mount()
3485 CIFSTCon(const unsigned int xid, struct cifs_ses *ses, in CIFSTCon() argument
3498 if (ses == NULL) in CIFSTCon()
3510 smb_buffer->Mid = get_next_mid(ses->server); in CIFSTCon()
3511 smb_buffer->Uid = ses->Suid; in CIFSTCon()
3524 if (ses->server->sign) in CIFSTCon()
3527 if (ses->capabilities & CAP_STATUS32) { in CIFSTCon()
3530 if (ses->capabilities & CAP_DFS) { in CIFSTCon()
3533 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
3552 rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length, in CIFSTCon()
3647 cifs_negotiate_protocol(const unsigned int xid, struct cifs_ses *ses, in cifs_negotiate_protocol() argument
3665 rc = server->ops->negotiate(xid, ses, server); in cifs_negotiate_protocol()
3684 cifs_setup_session(const unsigned int xid, struct cifs_ses *ses, in cifs_setup_session() argument
3694 spin_lock(&ses->ses_lock); in cifs_setup_session()
3695 if (ses->ses_status != SES_GOOD && in cifs_setup_session()
3696 ses->ses_status != SES_NEW && in cifs_setup_session()
3697 ses->ses_status != SES_NEED_RECON) { in cifs_setup_session()
3698 spin_unlock(&ses->ses_lock); in cifs_setup_session()
3703 spin_lock(&ses->chan_lock); in cifs_setup_session()
3704 if (CIFS_ALL_CHANS_GOOD(ses) || in cifs_setup_session()
3705 cifs_chan_in_reconnect(ses, server)) { in cifs_setup_session()
3706 spin_unlock(&ses->chan_lock); in cifs_setup_session()
3707 spin_unlock(&ses->ses_lock); in cifs_setup_session()
3710 is_binding = !CIFS_ALL_CHANS_NEED_RECONNECT(ses); in cifs_setup_session()
3711 cifs_chan_set_in_reconnect(ses, server); in cifs_setup_session()
3712 spin_unlock(&ses->chan_lock); in cifs_setup_session()
3715 ses->ses_status = SES_IN_SETUP; in cifs_setup_session()
3716 spin_unlock(&ses->ses_lock); in cifs_setup_session()
3721 scnprintf(ses->ip_addr, sizeof(ses->ip_addr), "%pI6", &addr6->sin6_addr); in cifs_setup_session()
3723 scnprintf(ses->ip_addr, sizeof(ses->ip_addr), "%pI4", &addr->sin_addr); in cifs_setup_session()
3727 ses->capabilities = server->capabilities; in cifs_setup_session()
3729 ses->capabilities &= (~server->vals->cap_unix); in cifs_setup_session()
3731 if (ses->auth_key.response) { in cifs_setup_session()
3733 ses->auth_key.response); in cifs_setup_session()
3734 kfree_sensitive(ses->auth_key.response); in cifs_setup_session()
3735 ses->auth_key.response = NULL; in cifs_setup_session()
3736 ses->auth_key.len = 0; in cifs_setup_session()
3744 rc = server->ops->sess_setup(xid, ses, server, nls_info); in cifs_setup_session()
3748 spin_lock(&ses->ses_lock); in cifs_setup_session()
3749 if (ses->ses_status == SES_IN_SETUP) in cifs_setup_session()
3750 ses->ses_status = SES_NEED_RECON; in cifs_setup_session()
3751 spin_lock(&ses->chan_lock); in cifs_setup_session()
3752 cifs_chan_clear_in_reconnect(ses, server); in cifs_setup_session()
3753 spin_unlock(&ses->chan_lock); in cifs_setup_session()
3754 spin_unlock(&ses->ses_lock); in cifs_setup_session()
3756 spin_lock(&ses->ses_lock); in cifs_setup_session()
3757 if (ses->ses_status == SES_IN_SETUP) in cifs_setup_session()
3758 ses->ses_status = SES_GOOD; in cifs_setup_session()
3759 spin_lock(&ses->chan_lock); in cifs_setup_session()
3760 cifs_chan_clear_in_reconnect(ses, server); in cifs_setup_session()
3761 cifs_chan_clear_need_reconnect(ses, server); in cifs_setup_session()
3762 spin_unlock(&ses->chan_lock); in cifs_setup_session()
3763 spin_unlock(&ses->ses_lock); in cifs_setup_session()
3770 cifs_set_vol_auth(struct smb3_fs_context *ctx, struct cifs_ses *ses) in cifs_set_vol_auth() argument
3772 ctx->sectype = ses->sectype; in cifs_set_vol_auth()
3778 return cifs_set_cifscreds(ctx, ses); in cifs_set_vol_auth()
3786 struct cifs_ses *ses; in cifs_construct_tcon() local
3808 ctx->sectype = master_tcon->ses->sectype; in cifs_construct_tcon()
3809 ctx->sign = master_tcon->ses->sign; in cifs_construct_tcon()
3813 rc = cifs_set_vol_auth(ctx, master_tcon->ses); in cifs_construct_tcon()
3821 ++master_tcon->ses->server->srv_count; in cifs_construct_tcon()
3824 ses = cifs_get_smb_ses(master_tcon->ses->server, ctx); in cifs_construct_tcon()
3825 if (IS_ERR(ses)) { in cifs_construct_tcon()
3826 tcon = (struct cifs_tcon *)ses; in cifs_construct_tcon()
3827 cifs_put_tcp_session(master_tcon->ses->server, 0); in cifs_construct_tcon()
3831 tcon = cifs_get_tcon(ses, ctx); in cifs_construct_tcon()
3833 cifs_put_smb_ses(ses); in cifs_construct_tcon()
3838 if (cap_unix(ses)) in cifs_construct_tcon()
4037 const struct smb_version_operations *ops = tcon->ses->server->ops; in cifs_tree_connect()
4041 if (tcon->ses->ses_status != SES_GOOD || in cifs_tree_connect()
4050 rc = ops->tree_connect(xid, tcon->ses, tcon->tree_name, tcon, nlsc); in cifs_tree_connect()