Lines Matching refs:ses

69 	struct cifs_ses *ses;  member
172 struct cifs_ses *ses; in cifs_mark_tcp_ses_conns_for_reconnect() local
193 list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { in cifs_mark_tcp_ses_conns_for_reconnect()
194 ses->need_reconnect = true; in cifs_mark_tcp_ses_conns_for_reconnect()
195 list_for_each_entry(tcon, &ses->tcon_list, tcon_list) in cifs_mark_tcp_ses_conns_for_reconnect()
197 if (ses->tcon_ipc) in cifs_mark_tcp_ses_conns_for_reconnect()
198 ses->tcon_ipc->need_reconnect = true; in cifs_mark_tcp_ses_conns_for_reconnect()
1598 static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx) in match_session() argument
1601 ctx->sectype != ses->sectype) in match_session()
1608 spin_lock(&ses->chan_lock); in match_session()
1609 if (ses->chan_max < ctx->max_channels) { in match_session()
1610 spin_unlock(&ses->chan_lock); in match_session()
1613 spin_unlock(&ses->chan_lock); in match_session()
1615 switch (ses->sectype) { in match_session()
1617 if (!uid_eq(ctx->cred_uid, ses->cred_uid)) in match_session()
1622 if (ses->user_name == NULL) { in match_session()
1629 if (strncmp(ses->user_name, in match_session()
1634 ses->password != NULL && in match_session()
1635 strncmp(ses->password, in match_session()
1653 cifs_setup_ipc(struct cifs_ses *ses, struct smb3_fs_context *ctx) in cifs_setup_ipc() argument
1659 struct TCP_Server_Info *server = ses->server; in cifs_setup_ipc()
1682 tcon->ses = ses; in cifs_setup_ipc()
1685 rc = server->ops->tree_connect(xid, ses, unc, tcon, ctx->local_nls); in cifs_setup_ipc()
1696 ses->tcon_ipc = tcon; in cifs_setup_ipc()
1714 cifs_free_ipc(struct cifs_ses *ses) in cifs_free_ipc() argument
1716 struct cifs_tcon *tcon = ses->tcon_ipc; in cifs_free_ipc()
1722 ses->tcon_ipc = NULL; in cifs_free_ipc()
1729 struct cifs_ses *ses; in cifs_find_smb_ses() local
1732 list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { in cifs_find_smb_ses()
1733 if (ses->status == CifsExiting) in cifs_find_smb_ses()
1735 if (!match_session(ses, ctx)) in cifs_find_smb_ses()
1737 ++ses->ses_count; in cifs_find_smb_ses()
1739 return ses; in cifs_find_smb_ses()
1745 void cifs_put_smb_ses(struct cifs_ses *ses) in cifs_put_smb_ses() argument
1749 struct TCP_Server_Info *server = ses->server; in cifs_put_smb_ses()
1750 cifs_dbg(FYI, "%s: ses_count=%d\n", __func__, ses->ses_count); in cifs_put_smb_ses()
1753 if (ses->status == CifsExiting) { in cifs_put_smb_ses()
1758 cifs_dbg(FYI, "%s: ses_count=%d\n", __func__, ses->ses_count); in cifs_put_smb_ses()
1759 cifs_dbg(FYI, "%s: ses ipc: %s\n", __func__, ses->tcon_ipc ? ses->tcon_ipc->treeName : "NONE"); in cifs_put_smb_ses()
1761 if (--ses->ses_count > 0) { in cifs_put_smb_ses()
1768 WARN_ON(ses->ses_count < 0); in cifs_put_smb_ses()
1771 if (ses->status == CifsGood) in cifs_put_smb_ses()
1772 ses->status = CifsExiting; in cifs_put_smb_ses()
1775 cifs_free_ipc(ses); in cifs_put_smb_ses()
1777 if (ses->status == CifsExiting && server->ops->logoff) { in cifs_put_smb_ses()
1779 rc = server->ops->logoff(xid, ses); in cifs_put_smb_ses()
1787 list_del_init(&ses->smb_ses_list); in cifs_put_smb_ses()
1790 spin_lock(&ses->chan_lock); in cifs_put_smb_ses()
1791 chan_count = ses->chan_count; in cifs_put_smb_ses()
1792 spin_unlock(&ses->chan_lock); in cifs_put_smb_ses()
1805 cifs_put_tcp_session(ses->chans[i].server, 0); in cifs_put_smb_ses()
1806 ses->chans[i].server = NULL; in cifs_put_smb_ses()
1810 sesInfoFree(ses); in cifs_put_smb_ses()
1821 cifs_set_cifscreds(struct smb3_fs_context *ctx, struct cifs_ses *ses) in cifs_set_cifscreds() argument
1829 struct TCP_Server_Info *server = ses->server; in cifs_set_cifscreds()
1858 if (!ses->domainName) { in cifs_set_cifscreds()
1865 sprintf(desc, "cifs:d:%s", ses->domainName); in cifs_set_cifscreds()
1934 if (is_domain && ses->domainName) { in cifs_set_cifscreds()
1935 ctx->domainname = kstrdup(ses->domainName, GFP_KERNEL); in cifs_set_cifscreds()
1959 struct cifs_ses *ses __attribute__((unused))) in cifs_set_cifscreds() argument
1979 struct cifs_ses *ses; in cifs_get_smb_ses() local
1985 ses = cifs_find_smb_ses(server, ctx); in cifs_get_smb_ses()
1986 if (ses) { in cifs_get_smb_ses()
1988 ses->status); in cifs_get_smb_ses()
1990 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
1991 if (ses->need_reconnect) { in cifs_get_smb_ses()
1994 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
1996 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
1998 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
2003 rc = cifs_setup_session(xid, ses, in cifs_get_smb_ses()
2006 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2008 cifs_put_smb_ses(ses); in cifs_get_smb_ses()
2013 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2018 return ses; in cifs_get_smb_ses()
2022 ses = sesInfoAlloc(); in cifs_get_smb_ses()
2023 if (ses == NULL) in cifs_get_smb_ses()
2027 ses->server = server; in cifs_get_smb_ses()
2029 sprintf(ses->ip_addr, "%pI6", &addr6->sin6_addr); in cifs_get_smb_ses()
2031 sprintf(ses->ip_addr, "%pI4", &addr->sin_addr); in cifs_get_smb_ses()
2034 ses->user_name = kstrdup(ctx->username, GFP_KERNEL); in cifs_get_smb_ses()
2035 if (!ses->user_name) in cifs_get_smb_ses()
2041 ses->password = kstrdup(ctx->password, GFP_KERNEL); in cifs_get_smb_ses()
2042 if (!ses->password) in cifs_get_smb_ses()
2046 ses->domainName = kstrdup(ctx->domainname, GFP_KERNEL); in cifs_get_smb_ses()
2047 if (!ses->domainName) in cifs_get_smb_ses()
2051 ses->workstation_name = kstrdup(ctx->workstation_name, in cifs_get_smb_ses()
2053 if (!ses->workstation_name) in cifs_get_smb_ses()
2057 ses->domainAuto = ctx->domainauto; in cifs_get_smb_ses()
2058 ses->cred_uid = ctx->cred_uid; in cifs_get_smb_ses()
2059 ses->linux_uid = ctx->linux_uid; in cifs_get_smb_ses()
2061 ses->sectype = ctx->sectype; in cifs_get_smb_ses()
2062 ses->sign = ctx->sign; in cifs_get_smb_ses()
2063 mutex_lock(&ses->session_mutex); in cifs_get_smb_ses()
2066 spin_lock(&ses->chan_lock); in cifs_get_smb_ses()
2067 ses->chans[0].server = server; in cifs_get_smb_ses()
2068 ses->chan_count = 1; in cifs_get_smb_ses()
2069 ses->chan_max = ctx->multichannel ? ctx->max_channels:1; in cifs_get_smb_ses()
2070 spin_unlock(&ses->chan_lock); in cifs_get_smb_ses()
2072 rc = cifs_negotiate_protocol(xid, ses); in cifs_get_smb_ses()
2074 rc = cifs_setup_session(xid, ses, ctx->local_nls); in cifs_get_smb_ses()
2077 memcpy(ses->chans[0].signkey, ses->smb3signingkey, in cifs_get_smb_ses()
2078 sizeof(ses->smb3signingkey)); in cifs_get_smb_ses()
2080 mutex_unlock(&ses->session_mutex); in cifs_get_smb_ses()
2086 list_add(&ses->smb_ses_list, &server->smb_ses_list); in cifs_get_smb_ses()
2091 cifs_setup_ipc(ses, ctx); in cifs_get_smb_ses()
2093 return ses; in cifs_get_smb_ses()
2096 sesInfoFree(ses); in cifs_get_smb_ses()
2121 cifs_find_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx) in cifs_find_tcon() argument
2127 list_for_each(tmp, &ses->tcon_list) { in cifs_find_tcon()
2144 struct cifs_ses *ses; in cifs_put_tcon() local
2153 ses = tcon->ses; in cifs_put_tcon()
2178 if (ses->server->ops->tree_disconnect) in cifs_put_tcon()
2179 ses->server->ops->tree_disconnect(xid, tcon); in cifs_put_tcon()
2184 cifs_put_smb_ses(ses); in cifs_put_tcon()
2210 cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx) in cifs_get_tcon() argument
2215 tcon = cifs_find_tcon(ses, ctx); in cifs_get_tcon()
2222 cifs_put_smb_ses(ses); in cifs_get_tcon()
2226 if (!ses->server->ops->tree_connect) { in cifs_get_tcon()
2238 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2248 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2257 tcon->ses = ses; in cifs_get_tcon()
2267 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2272 } else if (tcon->ses->server->capabilities & in cifs_get_tcon()
2283 if (ses->server->posix_ext_supported) { in cifs_get_tcon()
2298 rc = ses->server->ops->tree_connect(xid, ses, ctx->UNC, tcon, in cifs_get_tcon()
2308 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2313 } else if (ses->server->capabilities & in cifs_get_tcon()
2323 && (ses->server->capabilities & SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) in cifs_get_tcon()
2328 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2339 if (ses->server->vals->protocol_id >= SMB30_PROT_ID) { in cifs_get_tcon()
2374 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2390 if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING) in cifs_get_tcon()
2399 list_add(&tcon->tcon_list, &ses->tcon_list); in cifs_get_tcon()
2498 struct cifs_ses *ses; in cifs_match_super() local
2512 ses = tcon->ses; in cifs_match_super()
2513 tcp_srv = ses->server; in cifs_match_super()
2518 !match_session(ses, ctx) || in cifs_match_super()
2969 else if (mnt_ctx->ses) in mount_put_conns()
2970 cifs_put_smb_ses(mnt_ctx->ses); in mount_put_conns()
2982 struct cifs_ses *ses = NULL; in mount_get_conns() local
2999 ses = cifs_get_smb_ses(server, ctx); in mount_get_conns()
3000 if (IS_ERR(ses)) { in mount_get_conns()
3001 rc = PTR_ERR(ses); in mount_get_conns()
3002 ses = NULL; in mount_get_conns()
3006 if ((ctx->persistent == true) && (!(ses->server->capabilities & in mount_get_conns()
3014 tcon = cifs_get_tcon(ses, ctx); in mount_get_conns()
3026 if (cap_unix(tcon->ses)) { in mount_get_conns()
3032 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && in mount_get_conns()
3076 mnt_ctx->ses = ses; in mount_get_conns()
3083 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in mount_setup_tlink() argument
3093 tlink->tl_uid = ses->linux_uid; in mount_setup_tlink()
3347 if (mnt_ctx->ses) { in set_root_ses()
3349 mnt_ctx->ses->ses_count++; in set_root_ses()
3351 dfs_cache_add_refsrv_session(&mnt_ctx->mount_id, mnt_ctx->ses); in set_root_ses()
3353 mnt_ctx->root_ses = mnt_ctx->ses; in set_root_ses()
3373 dfs_cache_find(mnt_ctx->xid, mnt_ctx->ses, cifs_sb->local_nls, cifs_remap(cifs_sb), in is_dfs_mount()
3596 cifs_try_adding_channels(cifs_sb, mnt_ctx.ses); in cifs_mount()
3597 return mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); in cifs_mount()
3625 return mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); in cifs_mount()
3637 CIFSTCon(const unsigned int xid, struct cifs_ses *ses, in CIFSTCon() argument
3650 if (ses == NULL) in CIFSTCon()
3662 smb_buffer->Mid = get_next_mid(ses->server); in CIFSTCon()
3663 smb_buffer->Uid = ses->Suid; in CIFSTCon()
3670 if (tcon->pipe || (ses->server->sec_mode & SECMODE_USER)) { in CIFSTCon()
3677 if (ses->server->sign) in CIFSTCon()
3680 if (ses->capabilities & CAP_STATUS32) { in CIFSTCon()
3683 if (ses->capabilities & CAP_DFS) { in CIFSTCon()
3686 if (ses->capabilities & CAP_UNICODE) { in CIFSTCon()
3705 rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length, in CIFSTCon()
3802 cifs_negotiate_protocol(const unsigned int xid, struct cifs_ses *ses) in cifs_negotiate_protocol() argument
3805 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_negotiate_protocol()
3814 rc = server->ops->negotiate(xid, ses); in cifs_negotiate_protocol()
3828 cifs_setup_session(const unsigned int xid, struct cifs_ses *ses, in cifs_setup_session() argument
3832 struct TCP_Server_Info *server = cifs_ses_server(ses); in cifs_setup_session()
3834 if (!ses->binding) { in cifs_setup_session()
3835 ses->capabilities = server->capabilities; in cifs_setup_session()
3837 ses->capabilities &= (~server->vals->cap_unix); in cifs_setup_session()
3839 if (ses->auth_key.response) { in cifs_setup_session()
3841 ses->auth_key.response); in cifs_setup_session()
3842 kfree(ses->auth_key.response); in cifs_setup_session()
3843 ses->auth_key.response = NULL; in cifs_setup_session()
3844 ses->auth_key.len = 0; in cifs_setup_session()
3852 rc = server->ops->sess_setup(xid, ses, nls_info); in cifs_setup_session()
3861 cifs_set_vol_auth(struct smb3_fs_context *ctx, struct cifs_ses *ses) in cifs_set_vol_auth() argument
3863 ctx->sectype = ses->sectype; in cifs_set_vol_auth()
3869 return cifs_set_cifscreds(ctx, ses); in cifs_set_vol_auth()
3877 struct cifs_ses *ses; in cifs_construct_tcon() local
3899 ctx->sectype = master_tcon->ses->sectype; in cifs_construct_tcon()
3900 ctx->sign = master_tcon->ses->sign; in cifs_construct_tcon()
3904 rc = cifs_set_vol_auth(ctx, master_tcon->ses); in cifs_construct_tcon()
3912 ++master_tcon->ses->server->srv_count; in cifs_construct_tcon()
3915 ses = cifs_get_smb_ses(master_tcon->ses->server, ctx); in cifs_construct_tcon()
3916 if (IS_ERR(ses)) { in cifs_construct_tcon()
3917 tcon = (struct cifs_tcon *)ses; in cifs_construct_tcon()
3918 cifs_put_tcp_session(master_tcon->ses->server, 0); in cifs_construct_tcon()
3922 tcon = cifs_get_tcon(ses, ctx); in cifs_construct_tcon()
3924 cifs_put_smb_ses(ses); in cifs_construct_tcon()
3928 if (cap_unix(ses)) in cifs_construct_tcon()
4191 struct TCP_Server_Info *server = tcon->ses->server; in __tree_connect_dfs_target()
4193 struct cifs_tcon *ipc = tcon->ses->tcon_ipc; in __tree_connect_dfs_target()
4235 rc = ops->tree_connect(xid, ipc->ses, tree, ipc, cifs_sb->local_nls); in __tree_connect_dfs_target()
4242 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, cifs_sb->local_nls); in __tree_connect_dfs_target()
4251 if (dfs_cache_find(xid, tcon->ses, cifs_sb->local_nls, cifs_remap(cifs_sb), target, in __tree_connect_dfs_target()
4253 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, cifs_sb->local_nls); in __tree_connect_dfs_target()
4286 struct TCP_Server_Info *server = tcon->ses->server; in tree_connect_dfs_target()
4299 cifs_ses_mark_for_reconnect(tcon->ses); in tree_connect_dfs_target()
4309 struct TCP_Server_Info *server = tcon->ses->server; in cifs_tree_connect()
4323 rc = ops->tree_connect(xid, tcon->ses, tree, tcon, nlsc); in cifs_tree_connect()
4339 rc = ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, cifs_sb->local_nls); in cifs_tree_connect()
4356 const struct smb_version_operations *ops = tcon->ses->server->ops; in cifs_tree_connect()
4358 return ops->tree_connect(xid, tcon->ses, tcon->treeName, tcon, nlsc); in cifs_tree_connect()