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()
3086 ses = sesInfoAlloc(); in cifs_get_smb_ses()
3087 if (ses == NULL) in cifs_get_smb_ses()
3091 ses->server = server; in cifs_get_smb_ses()
3093 sprintf(ses->serverName, "%pI6", &addr6->sin6_addr); in cifs_get_smb_ses()
3095 sprintf(ses->serverName, "%pI4", &addr->sin_addr); in cifs_get_smb_ses()
3098 ses->user_name = kstrdup(volume_info->username, GFP_KERNEL); in cifs_get_smb_ses()
3099 if (!ses->user_name) in cifs_get_smb_ses()
3105 ses->password = kstrdup(volume_info->password, GFP_KERNEL); in cifs_get_smb_ses()
3106 if (!ses->password) in cifs_get_smb_ses()
3110 ses->domainName = kstrdup(volume_info->domainname, GFP_KERNEL); in cifs_get_smb_ses()
3111 if (!ses->domainName) in cifs_get_smb_ses()
3115 ses->domainAuto = volume_info->domainauto; in cifs_get_smb_ses()
3116 ses->cred_uid = volume_info->cred_uid; in cifs_get_smb_ses()
3117 ses->linux_uid = volume_info->linux_uid; in cifs_get_smb_ses()
3119 ses->sectype = volume_info->sectype; in cifs_get_smb_ses()
3120 ses->sign = volume_info->sign; in cifs_get_smb_ses()
3121 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
3124 ses->chans[0].server = server; in cifs_get_smb_ses()
3125 ses->chan_count = 1; in cifs_get_smb_ses()
3126 ses->chan_max = volume_info->multichannel ? volume_info->max_channels:1; in cifs_get_smb_ses()
3128 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
3130 rc = cifs_setup_session(xid, ses, volume_info->local_nls); in cifs_get_smb_ses()
3133 memcpy(ses->chans[0].signkey, ses->smb3signingkey, in cifs_get_smb_ses()
3134 sizeof(ses->smb3signingkey)); in cifs_get_smb_ses()
3136 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
3142 list_add(&ses->smb_ses_list, &server->smb_ses_list); in cifs_get_smb_ses()
3147 cifs_setup_ipc(ses, volume_info); in cifs_get_smb_ses()
3149 return ses; in cifs_get_smb_ses()
3152 sesInfoFree(ses); in cifs_get_smb_ses()
3177 cifs_find_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_find_tcon() argument
3183 list_for_each(tmp, &ses->tcon_list) { in cifs_find_tcon()
3203 struct cifs_ses *ses; in cifs_put_tcon() local
3212 ses = tcon->ses; in cifs_put_tcon()
3224 if (ses->server->ops->tree_disconnect) in cifs_put_tcon()
3225 ses->server->ops->tree_disconnect(xid, tcon); in cifs_put_tcon()
3230 cifs_put_smb_ses(ses); in cifs_put_tcon()
3254 cifs_get_tcon(struct cifs_ses *ses, struct smb_vol *volume_info) in cifs_get_tcon() argument
3259 tcon = cifs_find_tcon(ses, volume_info); in cifs_get_tcon()
3266 cifs_put_smb_ses(ses); in cifs_get_tcon()
3270 if (!ses->server->ops->tree_connect) { in cifs_get_tcon()
3282 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3292 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3301 tcon->ses = ses; in cifs_get_tcon()
3311 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3316 } else if (tcon->ses->server->capabilities & in cifs_get_tcon()
3327 if (ses->server->posix_ext_supported) { in cifs_get_tcon()
3342 rc = ses->server->ops->tree_connect(xid, ses, volume_info->UNC, tcon, in cifs_get_tcon()
3352 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3357 } else if (ses->server->capabilities & in cifs_get_tcon()
3367 && (ses->server->capabilities & SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) in cifs_get_tcon()
3372 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3390 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
3406 if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING) in cifs_get_tcon()
3415 list_add(&tcon->tcon_list, &ses->tcon_list); in cifs_get_tcon()
3513 struct cifs_ses *ses; in cifs_match_super() local
3527 ses = tcon->ses; in cifs_match_super()
3528 tcp_srv = ses->server; in cifs_match_super()
3533 !match_session(ses, volume_info) || in cifs_match_super()
4064 struct cifs_ses *ses, struct cifs_tcon *tcon) in mount_put_conns() argument
4070 else if (ses) in mount_put_conns()
4071 cifs_put_smb_ses(ses); in mount_put_conns()
4086 struct cifs_ses *ses; in mount_get_conns() local
4105 ses = cifs_get_smb_ses(server, vol); in mount_get_conns()
4106 if (IS_ERR(ses)) { in mount_get_conns()
4107 rc = PTR_ERR(ses); in mount_get_conns()
4111 *nses = ses; in mount_get_conns()
4113 if ((vol->persistent == true) && (!(ses->server->capabilities & in mount_get_conns()
4120 tcon = cifs_get_tcon(ses, vol); in mount_get_conns()
4133 if (cap_unix(tcon->ses)) { in mount_get_conns()
4139 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && in mount_get_conns()
4166 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in mount_setup_tlink() argument
4176 tlink->tl_uid = ses->linux_uid; in mount_setup_tlink()
4240 expand_dfs_referral(const unsigned int xid, struct cifs_ses *ses, in expand_dfs_referral() argument
4255 rc = dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), in expand_dfs_referral()
4320 struct TCP_Server_Info **server, struct cifs_ses **ses, in setup_dfs_tgt_conn() argument
4354 mount_put_conns(cifs_sb, *xid, *server, *ses, *tcon); in setup_dfs_tgt_conn()
4355 rc = mount_get_conns(&fake_vol, cifs_sb, xid, server, ses, in setup_dfs_tgt_conn()
4357 if (!rc || (*server && *ses)) { in setup_dfs_tgt_conn()
4371 struct TCP_Server_Info **server, struct cifs_ses **ses, in do_dfs_failover() argument
4391 rc = setup_dfs_tgt_conn(path, full_path, tgt_it, cifs_sb, vol, xid, server, ses, in do_dfs_failover()
4393 if (!rc || (*server && *ses)) in do_dfs_failover()
4401 rc = dfs_cache_update_tgthint(*xid, root_ses ? root_ses : *ses, in do_dfs_failover()
4563 static void set_root_ses(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in set_root_ses() argument
4566 if (ses) { in set_root_ses()
4568 ses->ses_count++; in set_root_ses()
4569 if (ses->tcon_ipc) in set_root_ses()
4570 ses->tcon_ipc->remap = cifs_remap(cifs_sb); in set_root_ses()
4573 *root_ses = ses; in set_root_ses()
4576 static void put_root_ses(struct cifs_ses *ses) in put_root_ses() argument
4578 if (ses) in put_root_ses()
4579 cifs_put_smb_ses(ses); in put_root_ses()
4658 struct cifs_ses *ses = NULL, *root_ses = NULL; in cifs_mount() local
4665 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4673 if (dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), vol->UNC + 1, NULL, in cifs_mount()
4699 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4716 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4717 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4719 if (rc && !server && !ses) { in cifs_mount()
4722 &server, &ses, &tcon); in cifs_mount()
4724 if (rc == -EACCES || rc == -EOPNOTSUPP || !server || !ses) in cifs_mount()
4731 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4786 cifs_try_adding_channels(ses); in cifs_mount()
4787 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4795 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4803 struct cifs_ses *ses; in cifs_mount() local
4807 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4821 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4824 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4833 CIFSTCon(const unsigned int xid, struct cifs_ses *ses, in CIFSTCon() argument
4846 if (ses == NULL) in CIFSTCon()
4858 smb_buffer->Mid = get_next_mid(ses->server); in CIFSTCon()
4859 smb_buffer->Uid = ses->Suid; in CIFSTCon()
4866 if (tcon->pipe || (ses->server->sec_mode & SECMODE_USER)) { in CIFSTCon()
4881 (ses->sectype == LANMAN)) in CIFSTCon()
4882 calc_lanman_hash(tcon->password, ses->server->cryptkey, in CIFSTCon()
4883 ses->server->sec_mode & in CIFSTCon()
4888 rc = SMBNTencrypt(tcon->password, ses->server->cryptkey, in CIFSTCon()
4898 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
4905 if (ses->server->sign) in CIFSTCon()
4908 if (ses->capabilities & CAP_STATUS32) { in CIFSTCon()
4911 if (ses->capabilities & CAP_DFS) { in CIFSTCon()
4914 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
4933 rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length, in CIFSTCon()
5030 cifs_negotiate_protocol(const unsigned int xid, struct cifs_ses *ses) in cifs_negotiate_protocol() argument
5033 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_negotiate_protocol()
5042 rc = server->ops->negotiate(xid, ses); in cifs_negotiate_protocol()
5056 cifs_setup_session(const unsigned int xid, struct cifs_ses *ses, in cifs_setup_session() argument
5060 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_setup_session()
5062 if (!ses->binding) { in cifs_setup_session()
5063 ses->capabilities = server->capabilities; in cifs_setup_session()
5065 ses->capabilities &= (~server->vals->cap_unix); in cifs_setup_session()
5067 if (ses->auth_key.response) { in cifs_setup_session()
5069 ses->auth_key.response); in cifs_setup_session()
5070 kfree(ses->auth_key.response); in cifs_setup_session()
5071 ses->auth_key.response = NULL; in cifs_setup_session()
5072 ses->auth_key.len = 0; in cifs_setup_session()
5080 rc = server->ops->sess_setup(xid, ses, nls_info); in cifs_setup_session()
5089 cifs_set_vol_auth(struct smb_vol *vol, struct cifs_ses *ses) in cifs_set_vol_auth() argument
5091 vol->sectype = ses->sectype; in cifs_set_vol_auth()
5097 return cifs_set_cifscreds(vol, ses); in cifs_set_vol_auth()
5105 struct cifs_ses *ses; in cifs_construct_tcon() local
5127 vol_info->sectype = master_tcon->ses->sectype; in cifs_construct_tcon()
5128 vol_info->sign = master_tcon->ses->sign; in cifs_construct_tcon()
5131 rc = cifs_set_vol_auth(vol_info, master_tcon->ses); in cifs_construct_tcon()
5139 ++master_tcon->ses->server->srv_count; in cifs_construct_tcon()
5142 ses = cifs_get_smb_ses(master_tcon->ses->server, vol_info); in cifs_construct_tcon()
5143 if (IS_ERR(ses)) { in cifs_construct_tcon()
5144 tcon = (struct cifs_tcon *)ses; in cifs_construct_tcon()
5145 cifs_put_tcp_session(master_tcon->ses->server, 0); in cifs_construct_tcon()
5149 tcon = cifs_get_tcon(ses, vol_info); in cifs_construct_tcon()
5151 cifs_put_smb_ses(ses); in cifs_construct_tcon()
5155 if (cap_unix(ses)) in cifs_construct_tcon()
5353 struct TCP_Server_Info *server = tcon->ses->server; in cifs_tree_connect()
5374 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5376 rc = ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()
5422 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5425 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
5453 const struct smb_version_operations *ops = tcon->ses->server->ops; in cifs_tree_connect()
5455 return ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()