Lines Matching refs:ses
394 struct cifs_ses *ses; in cifs_reconnect() local
457 ses = list_entry(tmp, struct cifs_ses, smb_ses_list); in cifs_reconnect()
458 ses->need_reconnect = true; in cifs_reconnect()
459 list_for_each(tmp2, &ses->tcon_list) { in cifs_reconnect()
463 if (ses->tcon_ipc) in cifs_reconnect()
464 ses->tcon_ipc->need_reconnect = true; in cifs_reconnect()
2662 static int match_session(struct cifs_ses *ses, struct smb_vol *vol) in match_session() argument
2665 vol->sectype != ses->sectype) in match_session()
2672 if (ses->chan_max < vol->max_channels) in match_session()
2675 switch (ses->sectype) { in match_session()
2677 if (!uid_eq(vol->cred_uid, ses->cred_uid)) in match_session()
2682 if (ses->user_name == NULL) { in match_session()
2689 if (strncmp(ses->user_name, in match_session()
2694 ses->password != NULL && in match_session()
2695 strncmp(ses->password, in match_session()
2710 cifs_setup_ipc(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_setup_ipc() argument
2717 struct TCP_Server_Info *server = ses->server; in cifs_setup_ipc()
2743 tcon->ses = ses; in cifs_setup_ipc()
2746 rc = server->ops->tree_connect(xid, ses, unc, tcon, nls_codepage); in cifs_setup_ipc()
2757 ses->tcon_ipc = tcon; in cifs_setup_ipc()
2769 cifs_free_ipc(struct cifs_ses *ses) in cifs_free_ipc() argument
2772 struct cifs_tcon *tcon = ses->tcon_ipc; in cifs_free_ipc()
2777 if (ses->server->ops->tree_disconnect) { in cifs_free_ipc()
2779 rc = ses->server->ops->tree_disconnect(xid, tcon); in cifs_free_ipc()
2787 ses->tcon_ipc = NULL; in cifs_free_ipc()
2794 struct cifs_ses *ses; in cifs_find_smb_ses() local
2797 list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { in cifs_find_smb_ses()
2798 if (ses->status == CifsExiting) in cifs_find_smb_ses()
2800 if (!match_session(ses, vol)) in cifs_find_smb_ses()
2802 ++ses->ses_count; in cifs_find_smb_ses()
2804 return ses; in cifs_find_smb_ses()
2810 void cifs_put_smb_ses(struct cifs_ses *ses) in cifs_put_smb_ses() argument
2813 struct TCP_Server_Info *server = ses->server; in cifs_put_smb_ses()
2815 cifs_dbg(FYI, "%s: ses_count=%d\n", __func__, ses->ses_count); in cifs_put_smb_ses()
2818 if (ses->status == CifsExiting) { in cifs_put_smb_ses()
2822 if (--ses->ses_count > 0) { in cifs_put_smb_ses()
2826 if (ses->status == CifsGood) in cifs_put_smb_ses()
2827 ses->status = CifsExiting; in cifs_put_smb_ses()
2830 cifs_free_ipc(ses); in cifs_put_smb_ses()
2832 if (ses->status == CifsExiting && server->ops->logoff) { in cifs_put_smb_ses()
2834 rc = server->ops->logoff(xid, ses); in cifs_put_smb_ses()
2842 list_del_init(&ses->smb_ses_list); in cifs_put_smb_ses()
2846 if (ses->chan_count > 1) { in cifs_put_smb_ses()
2849 for (i = 1; i < ses->chan_count; i++) in cifs_put_smb_ses()
2850 cifs_put_tcp_session(ses->chans[i].server, 0); in cifs_put_smb_ses()
2853 sesInfoFree(ses); in cifs_put_smb_ses()
2864 cifs_set_cifscreds(struct smb_vol *vol, struct cifs_ses *ses) in cifs_set_cifscreds() argument
2872 struct TCP_Server_Info *server = ses->server; in cifs_set_cifscreds()
2901 if (!ses->domainName) { in cifs_set_cifscreds()
2908 sprintf(desc, "cifs:d:%s", ses->domainName); in cifs_set_cifscreds()
2977 if (is_domain && ses->domainName) { in cifs_set_cifscreds()
2978 vol->domainname = kstrndup(ses->domainName, in cifs_set_cifscreds()
2979 strlen(ses->domainName), in cifs_set_cifscreds()
3004 struct cifs_ses *ses __attribute__((unused))) in cifs_set_cifscreds() argument
3022 struct cifs_ses *ses; in cifs_get_smb_ses() local
3028 ses = cifs_find_smb_ses(server, volume_info); in cifs_get_smb_ses()
3029 if (ses) { in cifs_get_smb_ses()
3031 ses->status); in cifs_get_smb_ses()
3033 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
3034 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
3036 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3038 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
3042 if (ses->need_reconnect) { in cifs_get_smb_ses()
3044 rc = cifs_setup_session(xid, ses, in cifs_get_smb_ses()
3047 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3049 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
3054 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3059 return ses; in cifs_get_smb_ses()
3063 ses = sesInfoAlloc(); in cifs_get_smb_ses()
3064 if (ses == NULL) in cifs_get_smb_ses()
3068 ses->server = server; in cifs_get_smb_ses()
3070 sprintf(ses->serverName, "%pI6", &addr6->sin6_addr); in cifs_get_smb_ses()
3072 sprintf(ses->serverName, "%pI4", &addr->sin_addr); in cifs_get_smb_ses()
3075 ses->user_name = kstrdup(volume_info->username, GFP_KERNEL); in cifs_get_smb_ses()
3076 if (!ses->user_name) in cifs_get_smb_ses()
3082 ses->password = kstrdup(volume_info->password, GFP_KERNEL); in cifs_get_smb_ses()
3083 if (!ses->password) in cifs_get_smb_ses()
3087 ses->domainName = kstrdup(volume_info->domainname, GFP_KERNEL); in cifs_get_smb_ses()
3088 if (!ses->domainName) in cifs_get_smb_ses()
3092 ses->domainAuto = volume_info->domainauto; in cifs_get_smb_ses()
3093 ses->cred_uid = volume_info->cred_uid; in cifs_get_smb_ses()
3094 ses->linux_uid = volume_info->linux_uid; in cifs_get_smb_ses()
3096 ses->sectype = volume_info->sectype; in cifs_get_smb_ses()
3097 ses->sign = volume_info->sign; in cifs_get_smb_ses()
3098 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
3101 ses->chans[0].server = server; in cifs_get_smb_ses()
3102 ses->chan_count = 1; in cifs_get_smb_ses()
3103 ses->chan_max = volume_info->multichannel ? volume_info->max_channels:1; in cifs_get_smb_ses()
3105 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
3107 rc = cifs_setup_session(xid, ses, volume_info->local_nls); in cifs_get_smb_ses()
3110 memcpy(ses->chans[0].signkey, ses->smb3signingkey, in cifs_get_smb_ses()
3111 sizeof(ses->smb3signingkey)); in cifs_get_smb_ses()
3113 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3119 list_add(&ses->smb_ses_list, &server->smb_ses_list); in cifs_get_smb_ses()
3124 cifs_setup_ipc(ses, volume_info); in cifs_get_smb_ses()
3126 return ses; in cifs_get_smb_ses()
3129 sesInfoFree(ses); in cifs_get_smb_ses()
3154 cifs_find_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_find_tcon() argument
3160 list_for_each(tmp, &ses->tcon_list) { in cifs_find_tcon()
3180 struct cifs_ses *ses; in cifs_put_tcon() local
3189 ses = tcon->ses; in cifs_put_tcon()
3201 if (ses->server->ops->tree_disconnect) in cifs_put_tcon()
3202 ses->server->ops->tree_disconnect(xid, tcon); in cifs_put_tcon()
3207 cifs_put_smb_ses(ses); in cifs_put_tcon()
3231 cifs_get_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_get_tcon() argument
3236 tcon = cifs_find_tcon(ses, volume_info); in cifs_get_tcon()
3243 cifs_put_smb_ses(ses); in cifs_get_tcon()
3247 if (!ses->server->ops->tree_connect) { in cifs_get_tcon()
3259 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3269 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3278 tcon->ses = ses; in cifs_get_tcon()
3288 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3293 } else if (tcon->ses->server->capabilities & in cifs_get_tcon()
3304 if (ses->server->posix_ext_supported) { in cifs_get_tcon()
3319 rc = ses->server->ops->tree_connect(xid, ses, volume_info->UNC, tcon, in cifs_get_tcon()
3329 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3334 } else if (ses->server->capabilities & in cifs_get_tcon()
3344 && (ses->server->capabilities & SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) in cifs_get_tcon()
3349 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3367 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3383 if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING) in cifs_get_tcon()
3392 list_add(&tcon->tcon_list, &ses->tcon_list); in cifs_get_tcon()
3490 struct cifs_ses *ses; in cifs_match_super() local
3503 ses = tcon->ses; in cifs_match_super()
3504 tcp_srv = ses->server; in cifs_match_super()
3509 !match_session(ses, volume_info) || in cifs_match_super()
4039 struct cifs_ses *ses, struct cifs_tcon *tcon) in mount_put_conns() argument
4045 else if (ses) in mount_put_conns()
4046 cifs_put_smb_ses(ses); in mount_put_conns()
4061 struct cifs_ses *ses; in mount_get_conns() local
4085 ses = cifs_get_smb_ses(server, vol); in mount_get_conns()
4086 if (IS_ERR(ses)) { in mount_get_conns()
4087 rc = PTR_ERR(ses); in mount_get_conns()
4091 *nses = ses; in mount_get_conns()
4093 if ((vol->persistent == true) && (!(ses->server->capabilities & in mount_get_conns()
4100 tcon = cifs_get_tcon(ses, vol); in mount_get_conns()
4113 if (cap_unix(tcon->ses)) { in mount_get_conns()
4119 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && in mount_get_conns()
4146 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in mount_setup_tlink() argument
4156 tlink->tl_uid = ses->linux_uid; in mount_setup_tlink()
4220 expand_dfs_referral(const unsigned int xid, struct cifs_ses *ses, in expand_dfs_referral() argument
4235 rc = dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), in expand_dfs_referral()
4300 struct TCP_Server_Info **server, struct cifs_ses **ses, in setup_dfs_tgt_conn() argument
4334 mount_put_conns(cifs_sb, *xid, *server, *ses, *tcon); in setup_dfs_tgt_conn()
4335 rc = mount_get_conns(&fake_vol, cifs_sb, xid, server, ses, in setup_dfs_tgt_conn()
4337 if (!rc || (*server && *ses)) { in setup_dfs_tgt_conn()
4351 struct TCP_Server_Info **server, struct cifs_ses **ses, in do_dfs_failover() argument
4371 rc = setup_dfs_tgt_conn(path, full_path, tgt_it, cifs_sb, vol, xid, server, ses, in do_dfs_failover()
4373 if (!rc || (*server && *ses)) in do_dfs_failover()
4381 rc = dfs_cache_update_tgthint(*xid, root_ses ? root_ses : *ses, in do_dfs_failover()
4543 static void set_root_ses(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in set_root_ses() argument
4546 if (ses) { in set_root_ses()
4548 ses->ses_count++; in set_root_ses()
4549 if (ses->tcon_ipc) in set_root_ses()
4550 ses->tcon_ipc->remap = cifs_remap(cifs_sb); in set_root_ses()
4553 *root_ses = ses; in set_root_ses()
4556 static void put_root_ses(struct cifs_ses *ses) in put_root_ses() argument
4558 if (ses) in put_root_ses()
4559 cifs_put_smb_ses(ses); in put_root_ses()
4638 struct cifs_ses *ses = NULL, *root_ses = NULL; in cifs_mount() local
4645 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4653 if (dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), vol->UNC + 1, NULL, in cifs_mount()
4679 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4696 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4697 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4699 if (rc && !server && !ses) { in cifs_mount()
4702 &server, &ses, &tcon); in cifs_mount()
4704 if (rc == -EACCES || rc == -EOPNOTSUPP || !server || !ses) in cifs_mount()
4711 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4766 cifs_try_adding_channels(ses); in cifs_mount()
4767 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4775 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4783 struct cifs_ses *ses; in cifs_mount() local
4787 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4801 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4804 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4813 CIFSTCon(const unsigned int xid, struct cifs_ses *ses, in CIFSTCon() argument
4826 if (ses == NULL) in CIFSTCon()
4838 smb_buffer->Mid = get_next_mid(ses->server); in CIFSTCon()
4839 smb_buffer->Uid = ses->Suid; in CIFSTCon()
4846 if (tcon->pipe || (ses->server->sec_mode & SECMODE_USER)) { in CIFSTCon()
4861 (ses->sectype == LANMAN)) in CIFSTCon()
4862 calc_lanman_hash(tcon->password, ses->server->cryptkey, in CIFSTCon()
4863 ses->server->sec_mode & in CIFSTCon()
4868 rc = SMBNTencrypt(tcon->password, ses->server->cryptkey, in CIFSTCon()
4878 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
4885 if (ses->server->sign) in CIFSTCon()
4888 if (ses->capabilities & CAP_STATUS32) { in CIFSTCon()
4891 if (ses->capabilities & CAP_DFS) { in CIFSTCon()
4894 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
4913 rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length, in CIFSTCon()
5010 cifs_negotiate_protocol(const unsigned int xid, struct cifs_ses *ses) in cifs_negotiate_protocol() argument
5013 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_negotiate_protocol()
5022 rc = server->ops->negotiate(xid, ses); in cifs_negotiate_protocol()
5036 cifs_setup_session(const unsigned int xid, struct cifs_ses *ses, in cifs_setup_session() argument
5040 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_setup_session()
5042 if (!ses->binding) { in cifs_setup_session()
5043 ses->capabilities = server->capabilities; in cifs_setup_session()
5045 ses->capabilities &= (~server->vals->cap_unix); in cifs_setup_session()
5047 if (ses->auth_key.response) { in cifs_setup_session()
5049 ses->auth_key.response); in cifs_setup_session()
5050 kfree(ses->auth_key.response); in cifs_setup_session()
5051 ses->auth_key.response = NULL; in cifs_setup_session()
5052 ses->auth_key.len = 0; in cifs_setup_session()
5060 rc = server->ops->sess_setup(xid, ses, nls_info); in cifs_setup_session()
5069 cifs_set_vol_auth(struct smb_vol *vol, struct cifs_ses *ses) in cifs_set_vol_auth() argument
5071 vol->sectype = ses->sectype; in cifs_set_vol_auth()
5077 return cifs_set_cifscreds(vol, ses); in cifs_set_vol_auth()
5085 struct cifs_ses *ses; in cifs_construct_tcon() local
5107 vol_info->sectype = master_tcon->ses->sectype; in cifs_construct_tcon()
5108 vol_info->sign = master_tcon->ses->sign; in cifs_construct_tcon()
5111 rc = cifs_set_vol_auth(vol_info, master_tcon->ses); in cifs_construct_tcon()
5119 ++master_tcon->ses->server->srv_count; in cifs_construct_tcon()
5122 ses = cifs_get_smb_ses(master_tcon->ses->server, vol_info); in cifs_construct_tcon()
5123 if (IS_ERR(ses)) { in cifs_construct_tcon()
5124 tcon = (struct cifs_tcon *)ses; in cifs_construct_tcon()
5125 cifs_put_tcp_session(master_tcon->ses->server, 0); in cifs_construct_tcon()
5129 tcon = cifs_get_tcon(ses, vol_info); in cifs_construct_tcon()
5131 cifs_put_smb_ses(ses); in cifs_construct_tcon()
5135 if (cap_unix(ses)) in cifs_construct_tcon()
5333 struct TCP_Server_Info *server = tcon->ses->server; in cifs_tree_connect()
5353 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5355 rc = ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()
5404 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5407 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5435 const struct smb_version_operations *ops = tcon->ses->server->ops; in cifs_tree_connect()
5437 return ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()