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()
2680 static int match_session(struct cifs_ses *ses, struct smb_vol *vol) in match_session() argument
2683 vol->sectype != ses->sectype) in match_session()
2690 if (ses->chan_max < vol->max_channels) in match_session()
2693 switch (ses->sectype) { in match_session()
2695 if (!uid_eq(vol->cred_uid, ses->cred_uid)) in match_session()
2700 if (ses->user_name == NULL) { in match_session()
2707 if (strncmp(ses->user_name, in match_session()
2712 ses->password != NULL && in match_session()
2713 strncmp(ses->password, in match_session()
2728 cifs_setup_ipc(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_setup_ipc() argument
2735 struct TCP_Server_Info *server = ses->server; in cifs_setup_ipc()
2761 tcon->ses = ses; in cifs_setup_ipc()
2764 rc = server->ops->tree_connect(xid, ses, unc, tcon, nls_codepage); in cifs_setup_ipc()
2775 ses->tcon_ipc = tcon; in cifs_setup_ipc()
2787 cifs_free_ipc(struct cifs_ses *ses) in cifs_free_ipc() argument
2790 struct cifs_tcon *tcon = ses->tcon_ipc; in cifs_free_ipc()
2795 if (ses->server->ops->tree_disconnect) { in cifs_free_ipc()
2797 rc = ses->server->ops->tree_disconnect(xid, tcon); in cifs_free_ipc()
2805 ses->tcon_ipc = NULL; in cifs_free_ipc()
2812 struct cifs_ses *ses; in cifs_find_smb_ses() local
2815 list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { in cifs_find_smb_ses()
2816 if (ses->status == CifsExiting) in cifs_find_smb_ses()
2818 if (!match_session(ses, vol)) in cifs_find_smb_ses()
2820 ++ses->ses_count; in cifs_find_smb_ses()
2822 return ses; in cifs_find_smb_ses()
2828 void cifs_put_smb_ses(struct cifs_ses *ses) in cifs_put_smb_ses() argument
2831 struct TCP_Server_Info *server = ses->server; in cifs_put_smb_ses()
2833 cifs_dbg(FYI, "%s: ses_count=%d\n", __func__, ses->ses_count); in cifs_put_smb_ses()
2836 if (ses->status == CifsExiting) { in cifs_put_smb_ses()
2840 if (--ses->ses_count > 0) { in cifs_put_smb_ses()
2847 if (ses->status == CifsGood) in cifs_put_smb_ses()
2848 ses->status = CifsExiting; in cifs_put_smb_ses()
2851 cifs_free_ipc(ses); in cifs_put_smb_ses()
2853 if (ses->status == CifsExiting && server->ops->logoff) { in cifs_put_smb_ses()
2855 rc = server->ops->logoff(xid, ses); in cifs_put_smb_ses()
2863 list_del_init(&ses->smb_ses_list); in cifs_put_smb_ses()
2867 if (ses->chan_count > 1) { in cifs_put_smb_ses()
2870 for (i = 1; i < ses->chan_count; i++) in cifs_put_smb_ses()
2871 cifs_put_tcp_session(ses->chans[i].server, 0); in cifs_put_smb_ses()
2874 sesInfoFree(ses); in cifs_put_smb_ses()
2885 cifs_set_cifscreds(struct smb_vol *vol, struct cifs_ses *ses) in cifs_set_cifscreds() argument
2893 struct TCP_Server_Info *server = ses->server; in cifs_set_cifscreds()
2922 if (!ses->domainName) { in cifs_set_cifscreds()
2929 sprintf(desc, "cifs:d:%s", ses->domainName); in cifs_set_cifscreds()
2998 if (is_domain && ses->domainName) { in cifs_set_cifscreds()
2999 vol->domainname = kstrndup(ses->domainName, in cifs_set_cifscreds()
3000 strlen(ses->domainName), in cifs_set_cifscreds()
3025 struct cifs_ses *ses __attribute__((unused))) in cifs_set_cifscreds() argument
3043 struct cifs_ses *ses; in cifs_get_smb_ses() local
3049 ses = cifs_find_smb_ses(server, volume_info); in cifs_get_smb_ses()
3050 if (ses) { in cifs_get_smb_ses()
3052 ses->status); in cifs_get_smb_ses()
3054 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
3055 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
3057 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3059 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
3063 if (ses->need_reconnect) { in cifs_get_smb_ses()
3065 rc = cifs_setup_session(xid, ses, in cifs_get_smb_ses()
3068 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3070 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
3075 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3080 return ses; in cifs_get_smb_ses()
3084 ses = sesInfoAlloc(); in cifs_get_smb_ses()
3085 if (ses == NULL) in cifs_get_smb_ses()
3089 ses->server = server; in cifs_get_smb_ses()
3091 sprintf(ses->serverName, "%pI6", &addr6->sin6_addr); in cifs_get_smb_ses()
3093 sprintf(ses->serverName, "%pI4", &addr->sin_addr); in cifs_get_smb_ses()
3096 ses->user_name = kstrdup(volume_info->username, GFP_KERNEL); in cifs_get_smb_ses()
3097 if (!ses->user_name) in cifs_get_smb_ses()
3103 ses->password = kstrdup(volume_info->password, GFP_KERNEL); in cifs_get_smb_ses()
3104 if (!ses->password) in cifs_get_smb_ses()
3108 ses->domainName = kstrdup(volume_info->domainname, GFP_KERNEL); in cifs_get_smb_ses()
3109 if (!ses->domainName) in cifs_get_smb_ses()
3113 ses->domainAuto = volume_info->domainauto; in cifs_get_smb_ses()
3114 ses->cred_uid = volume_info->cred_uid; in cifs_get_smb_ses()
3115 ses->linux_uid = volume_info->linux_uid; in cifs_get_smb_ses()
3117 ses->sectype = volume_info->sectype; in cifs_get_smb_ses()
3118 ses->sign = volume_info->sign; in cifs_get_smb_ses()
3119 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
3122 ses->chans[0].server = server; in cifs_get_smb_ses()
3123 ses->chan_count = 1; in cifs_get_smb_ses()
3124 ses->chan_max = volume_info->multichannel ? volume_info->max_channels:1; in cifs_get_smb_ses()
3126 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
3128 rc = cifs_setup_session(xid, ses, volume_info->local_nls); in cifs_get_smb_ses()
3131 memcpy(ses->chans[0].signkey, ses->smb3signingkey, in cifs_get_smb_ses()
3132 sizeof(ses->smb3signingkey)); in cifs_get_smb_ses()
3134 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3140 list_add(&ses->smb_ses_list, &server->smb_ses_list); in cifs_get_smb_ses()
3145 cifs_setup_ipc(ses, volume_info); in cifs_get_smb_ses()
3147 return ses; in cifs_get_smb_ses()
3150 sesInfoFree(ses); in cifs_get_smb_ses()
3175 cifs_find_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_find_tcon() argument
3181 list_for_each(tmp, &ses->tcon_list) { in cifs_find_tcon()
3201 struct cifs_ses *ses; in cifs_put_tcon() local
3210 ses = tcon->ses; in cifs_put_tcon()
3222 if (ses->server->ops->tree_disconnect) in cifs_put_tcon()
3223 ses->server->ops->tree_disconnect(xid, tcon); in cifs_put_tcon()
3228 cifs_put_smb_ses(ses); in cifs_put_tcon()
3252 cifs_get_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_get_tcon() argument
3257 tcon = cifs_find_tcon(ses, volume_info); in cifs_get_tcon()
3264 cifs_put_smb_ses(ses); in cifs_get_tcon()
3268 if (!ses->server->ops->tree_connect) { in cifs_get_tcon()
3280 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3290 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3299 tcon->ses = ses; in cifs_get_tcon()
3309 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3314 } else if (tcon->ses->server->capabilities & in cifs_get_tcon()
3325 if (ses->server->posix_ext_supported) { in cifs_get_tcon()
3340 rc = ses->server->ops->tree_connect(xid, ses, volume_info->UNC, tcon, in cifs_get_tcon()
3350 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3355 } else if (ses->server->capabilities & in cifs_get_tcon()
3365 && (ses->server->capabilities & SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) in cifs_get_tcon()
3370 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3388 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3404 if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING) in cifs_get_tcon()
3413 list_add(&tcon->tcon_list, &ses->tcon_list); in cifs_get_tcon()
3511 struct cifs_ses *ses; in cifs_match_super() local
3525 ses = tcon->ses; in cifs_match_super()
3526 tcp_srv = ses->server; in cifs_match_super()
3531 !match_session(ses, volume_info) || in cifs_match_super()
4062 struct cifs_ses *ses, struct cifs_tcon *tcon) in mount_put_conns() argument
4068 else if (ses) in mount_put_conns()
4069 cifs_put_smb_ses(ses); in mount_put_conns()
4084 struct cifs_ses *ses; in mount_get_conns() local
4103 ses = cifs_get_smb_ses(server, vol); in mount_get_conns()
4104 if (IS_ERR(ses)) { in mount_get_conns()
4105 rc = PTR_ERR(ses); in mount_get_conns()
4109 *nses = ses; in mount_get_conns()
4111 if ((vol->persistent == true) && (!(ses->server->capabilities & in mount_get_conns()
4118 tcon = cifs_get_tcon(ses, vol); in mount_get_conns()
4131 if (cap_unix(tcon->ses)) { in mount_get_conns()
4137 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && in mount_get_conns()
4164 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in mount_setup_tlink() argument
4174 tlink->tl_uid = ses->linux_uid; in mount_setup_tlink()
4238 expand_dfs_referral(const unsigned int xid, struct cifs_ses *ses, in expand_dfs_referral() argument
4253 rc = dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), in expand_dfs_referral()
4318 struct TCP_Server_Info **server, struct cifs_ses **ses, in setup_dfs_tgt_conn() argument
4352 mount_put_conns(cifs_sb, *xid, *server, *ses, *tcon); in setup_dfs_tgt_conn()
4353 rc = mount_get_conns(&fake_vol, cifs_sb, xid, server, ses, in setup_dfs_tgt_conn()
4355 if (!rc || (*server && *ses)) { in setup_dfs_tgt_conn()
4369 struct TCP_Server_Info **server, struct cifs_ses **ses, in do_dfs_failover() argument
4389 rc = setup_dfs_tgt_conn(path, full_path, tgt_it, cifs_sb, vol, xid, server, ses, in do_dfs_failover()
4391 if (!rc || (*server && *ses)) in do_dfs_failover()
4399 rc = dfs_cache_update_tgthint(*xid, root_ses ? root_ses : *ses, in do_dfs_failover()
4561 static void set_root_ses(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in set_root_ses() argument
4564 if (ses) { in set_root_ses()
4566 ses->ses_count++; in set_root_ses()
4567 if (ses->tcon_ipc) in set_root_ses()
4568 ses->tcon_ipc->remap = cifs_remap(cifs_sb); in set_root_ses()
4571 *root_ses = ses; in set_root_ses()
4574 static void put_root_ses(struct cifs_ses *ses) in put_root_ses() argument
4576 if (ses) in put_root_ses()
4577 cifs_put_smb_ses(ses); in put_root_ses()
4656 struct cifs_ses *ses = NULL, *root_ses = NULL; in cifs_mount() local
4663 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4671 if (dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), vol->UNC + 1, NULL, in cifs_mount()
4697 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4714 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4715 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4717 if (rc && !server && !ses) { in cifs_mount()
4720 &server, &ses, &tcon); in cifs_mount()
4722 if (rc == -EACCES || rc == -EOPNOTSUPP || !server || !ses) in cifs_mount()
4729 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4784 cifs_try_adding_channels(ses); in cifs_mount()
4785 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4793 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4801 struct cifs_ses *ses; in cifs_mount() local
4805 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4819 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4822 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4831 CIFSTCon(const unsigned int xid, struct cifs_ses *ses, in CIFSTCon() argument
4844 if (ses == NULL) in CIFSTCon()
4856 smb_buffer->Mid = get_next_mid(ses->server); in CIFSTCon()
4857 smb_buffer->Uid = ses->Suid; in CIFSTCon()
4864 if (tcon->pipe || (ses->server->sec_mode & SECMODE_USER)) { in CIFSTCon()
4879 (ses->sectype == LANMAN)) in CIFSTCon()
4880 calc_lanman_hash(tcon->password, ses->server->cryptkey, in CIFSTCon()
4881 ses->server->sec_mode & in CIFSTCon()
4886 rc = SMBNTencrypt(tcon->password, ses->server->cryptkey, in CIFSTCon()
4896 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
4903 if (ses->server->sign) in CIFSTCon()
4906 if (ses->capabilities & CAP_STATUS32) { in CIFSTCon()
4909 if (ses->capabilities & CAP_DFS) { in CIFSTCon()
4912 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
4931 rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length, in CIFSTCon()
5028 cifs_negotiate_protocol(const unsigned int xid, struct cifs_ses *ses) in cifs_negotiate_protocol() argument
5031 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_negotiate_protocol()
5040 rc = server->ops->negotiate(xid, ses); in cifs_negotiate_protocol()
5054 cifs_setup_session(const unsigned int xid, struct cifs_ses *ses, in cifs_setup_session() argument
5058 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_setup_session()
5060 if (!ses->binding) { in cifs_setup_session()
5061 ses->capabilities = server->capabilities; in cifs_setup_session()
5063 ses->capabilities &= (~server->vals->cap_unix); in cifs_setup_session()
5065 if (ses->auth_key.response) { in cifs_setup_session()
5067 ses->auth_key.response); in cifs_setup_session()
5068 kfree(ses->auth_key.response); in cifs_setup_session()
5069 ses->auth_key.response = NULL; in cifs_setup_session()
5070 ses->auth_key.len = 0; in cifs_setup_session()
5078 rc = server->ops->sess_setup(xid, ses, nls_info); in cifs_setup_session()
5087 cifs_set_vol_auth(struct smb_vol *vol, struct cifs_ses *ses) in cifs_set_vol_auth() argument
5089 vol->sectype = ses->sectype; in cifs_set_vol_auth()
5095 return cifs_set_cifscreds(vol, ses); in cifs_set_vol_auth()
5103 struct cifs_ses *ses; in cifs_construct_tcon() local
5125 vol_info->sectype = master_tcon->ses->sectype; in cifs_construct_tcon()
5126 vol_info->sign = master_tcon->ses->sign; in cifs_construct_tcon()
5129 rc = cifs_set_vol_auth(vol_info, master_tcon->ses); in cifs_construct_tcon()
5137 ++master_tcon->ses->server->srv_count; in cifs_construct_tcon()
5140 ses = cifs_get_smb_ses(master_tcon->ses->server, vol_info); in cifs_construct_tcon()
5141 if (IS_ERR(ses)) { in cifs_construct_tcon()
5142 tcon = (struct cifs_tcon *)ses; in cifs_construct_tcon()
5143 cifs_put_tcp_session(master_tcon->ses->server, 0); in cifs_construct_tcon()
5147 tcon = cifs_get_tcon(ses, vol_info); in cifs_construct_tcon()
5149 cifs_put_smb_ses(ses); in cifs_construct_tcon()
5153 if (cap_unix(ses)) in cifs_construct_tcon()
5351 struct TCP_Server_Info *server = tcon->ses->server; in cifs_tree_connect()
5372 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5374 rc = ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()
5420 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5423 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5451 const struct smb_version_operations *ops = tcon->ses->server->ops; in cifs_tree_connect()
5453 return ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()