Lines Matching refs:server
296 static int ip_connect(struct TCP_Server_Info *server);
297 static int generic_ip_connect(struct TCP_Server_Info *server);
312 cifs_reconnect(struct TCP_Server_Info *server) in cifs_reconnect() argument
322 if (server->tcpStatus == CifsExiting) { in cifs_reconnect()
328 server->tcpStatus = CifsNeedReconnect; in cifs_reconnect()
330 server->maxBuf = 0; in cifs_reconnect()
332 server->max_read = 0; in cifs_reconnect()
342 list_for_each(tmp, &server->smb_ses_list) { in cifs_reconnect()
355 mutex_lock(&server->srv_mutex); in cifs_reconnect()
356 if (server->ssocket) { in cifs_reconnect()
358 server->ssocket->state, server->ssocket->flags); in cifs_reconnect()
359 kernel_sock_shutdown(server->ssocket, SHUT_WR); in cifs_reconnect()
361 server->ssocket->state, server->ssocket->flags); in cifs_reconnect()
362 sock_release(server->ssocket); in cifs_reconnect()
363 server->ssocket = NULL; in cifs_reconnect()
365 server->sequence_number = 0; in cifs_reconnect()
366 server->session_estab = false; in cifs_reconnect()
367 kfree(server->session_key.response); in cifs_reconnect()
368 server->session_key.response = NULL; in cifs_reconnect()
369 server->session_key.len = 0; in cifs_reconnect()
370 server->lstrp = jiffies; in cifs_reconnect()
376 list_for_each_safe(tmp, tmp2, &server->pending_mid_q) { in cifs_reconnect()
383 mutex_unlock(&server->srv_mutex); in cifs_reconnect()
396 mutex_lock(&server->srv_mutex); in cifs_reconnect()
397 rc = generic_ip_connect(server); in cifs_reconnect()
400 mutex_unlock(&server->srv_mutex); in cifs_reconnect()
405 if (server->tcpStatus != CifsExiting) in cifs_reconnect()
406 server->tcpStatus = CifsNeedNegotiate; in cifs_reconnect()
408 mutex_unlock(&server->srv_mutex); in cifs_reconnect()
410 } while (server->tcpStatus == CifsNeedReconnect); in cifs_reconnect()
419 struct TCP_Server_Info *server = container_of(work, in cifs_echo_request() local
428 if (!server->ops->need_neg || server->ops->need_neg(server) || in cifs_echo_request()
429 (server->ops->can_echo && !server->ops->can_echo(server)) || in cifs_echo_request()
430 time_before(jiffies, server->lstrp + SMB_ECHO_INTERVAL - HZ)) in cifs_echo_request()
433 rc = server->ops->echo ? server->ops->echo(server) : -ENOSYS; in cifs_echo_request()
436 server->hostname); in cifs_echo_request()
439 queue_delayed_work(cifsiod_wq, &server->echo, SMB_ECHO_INTERVAL); in cifs_echo_request()
443 allocate_buffers(struct TCP_Server_Info *server) in allocate_buffers() argument
445 if (!server->bigbuf) { in allocate_buffers()
446 server->bigbuf = (char *)cifs_buf_get(); in allocate_buffers()
447 if (!server->bigbuf) { in allocate_buffers()
453 } else if (server->large_buf) { in allocate_buffers()
455 memset(server->bigbuf, 0, HEADER_SIZE(server)); in allocate_buffers()
458 if (!server->smallbuf) { in allocate_buffers()
459 server->smallbuf = (char *)cifs_small_buf_get(); in allocate_buffers()
460 if (!server->smallbuf) { in allocate_buffers()
469 memset(server->smallbuf, 0, HEADER_SIZE(server)); in allocate_buffers()
476 server_unresponsive(struct TCP_Server_Info *server) in server_unresponsive() argument
489 if (server->tcpStatus == CifsGood && in server_unresponsive()
490 time_after(jiffies, server->lstrp + 2 * SMB_ECHO_INTERVAL)) { in server_unresponsive()
492 server->hostname, (2 * SMB_ECHO_INTERVAL) / HZ); in server_unresponsive()
493 cifs_reconnect(server); in server_unresponsive()
494 wake_up(&server->response_q); in server_unresponsive()
537 get_server_iovec(struct TCP_Server_Info *server, unsigned int nr_segs) in get_server_iovec() argument
541 if (server->iov && nr_segs <= server->nr_iov) in get_server_iovec()
542 return server->iov; in get_server_iovec()
547 kfree(server->iov); in get_server_iovec()
548 server->iov = new_iov; in get_server_iovec()
549 server->nr_iov = nr_segs; in get_server_iovec()
555 cifs_readv_from_socket(struct TCP_Server_Info *server, struct kvec *iov_orig, in cifs_readv_from_socket() argument
564 iov = get_server_iovec(server, nr_segs); in cifs_readv_from_socket()
574 if (server_unresponsive(server)) { in cifs_readv_from_socket()
581 length = kernel_recvmsg(server->ssocket, &smb_msg, in cifs_readv_from_socket()
584 if (server->tcpStatus == CifsExiting) { in cifs_readv_from_socket()
587 } else if (server->tcpStatus == CifsNeedReconnect) { in cifs_readv_from_socket()
588 cifs_reconnect(server); in cifs_readv_from_socket()
605 cifs_reconnect(server); in cifs_readv_from_socket()
614 cifs_read_from_socket(struct TCP_Server_Info *server, char *buf, in cifs_read_from_socket() argument
622 return cifs_readv_from_socket(server, &iov, 1, to_read); in cifs_read_from_socket()
626 is_smb_response(struct TCP_Server_Info *server, unsigned char type) in is_smb_response() argument
657 cifs_set_port((struct sockaddr *)&server->dstaddr, CIFS_PORT); in is_smb_response()
658 cifs_reconnect(server); in is_smb_response()
659 wake_up(&server->response_q); in is_smb_response()
663 cifs_reconnect(server); in is_smb_response()
685 handle_mid(struct mid_q_entry *mid, struct TCP_Server_Info *server, in handle_mid() argument
688 if (server->ops->check_trans2 && in handle_mid()
689 server->ops->check_trans2(mid, server, buf, malformed)) in handle_mid()
692 mid->large_buf = server->large_buf; in handle_mid()
696 if (server->large_buf) in handle_mid()
697 server->bigbuf = NULL; in handle_mid()
699 server->smallbuf = NULL; in handle_mid()
704 static void clean_demultiplex_info(struct TCP_Server_Info *server) in clean_demultiplex_info() argument
710 list_del_init(&server->tcp_ses_list); in clean_demultiplex_info()
714 server->tcpStatus = CifsExiting; in clean_demultiplex_info()
716 wake_up_all(&server->response_q); in clean_demultiplex_info()
719 spin_lock(&server->req_lock); in clean_demultiplex_info()
720 if (server->credits <= 0) in clean_demultiplex_info()
721 server->credits = 1; in clean_demultiplex_info()
722 spin_unlock(&server->req_lock); in clean_demultiplex_info()
730 wake_up_all(&server->request_q); in clean_demultiplex_info()
734 if (server->ssocket) { in clean_demultiplex_info()
735 sock_release(server->ssocket); in clean_demultiplex_info()
736 server->ssocket = NULL; in clean_demultiplex_info()
739 if (!list_empty(&server->pending_mid_q)) { in clean_demultiplex_info()
746 list_for_each_safe(tmp, tmp2, &server->pending_mid_q) { in clean_demultiplex_info()
765 if (!list_empty(&server->pending_mid_q)) { in clean_demultiplex_info()
782 kfree(server->hostname); in clean_demultiplex_info()
783 kfree(server->iov); in clean_demultiplex_info()
784 kfree(server); in clean_demultiplex_info()
792 standard_receive3(struct TCP_Server_Info *server, struct mid_q_entry *mid) in standard_receive3() argument
795 char *buf = server->smallbuf; in standard_receive3()
799 if (pdu_length > CIFSMaxBufSize + MAX_HEADER_SIZE(server) - 4) { in standard_receive3()
801 cifs_reconnect(server); in standard_receive3()
802 wake_up(&server->response_q); in standard_receive3()
808 server->large_buf = true; in standard_receive3()
809 memcpy(server->bigbuf, buf, server->total_read); in standard_receive3()
810 buf = server->bigbuf; in standard_receive3()
814 length = cifs_read_from_socket(server, buf + HEADER_SIZE(server) - 1, in standard_receive3()
815 pdu_length - HEADER_SIZE(server) + 1 + 4); in standard_receive3()
818 server->total_read += length; in standard_receive3()
820 dump_smb(buf, server->total_read); in standard_receive3()
831 length = server->ops->check_message(buf, server->total_read); in standard_receive3()
834 min_t(unsigned int, server->total_read, 48)); in standard_receive3()
836 if (server->ops->is_status_pending && in standard_receive3()
837 server->ops->is_status_pending(buf, server, length)) in standard_receive3()
843 handle_mid(mid, server, buf, length); in standard_receive3()
851 struct TCP_Server_Info *server = p; in cifs_demultiplex_thread() local
865 while (server->tcpStatus != CifsExiting) { in cifs_demultiplex_thread()
869 if (!allocate_buffers(server)) in cifs_demultiplex_thread()
872 server->large_buf = false; in cifs_demultiplex_thread()
873 buf = server->smallbuf; in cifs_demultiplex_thread()
876 length = cifs_read_from_socket(server, buf, pdu_length); in cifs_demultiplex_thread()
879 server->total_read = length; in cifs_demultiplex_thread()
888 if (!is_smb_response(server, buf[0])) in cifs_demultiplex_thread()
892 if (pdu_length < HEADER_SIZE(server) - 1 - 4) { in cifs_demultiplex_thread()
895 cifs_reconnect(server); in cifs_demultiplex_thread()
896 wake_up(&server->response_q); in cifs_demultiplex_thread()
901 length = cifs_read_from_socket(server, buf + 4, in cifs_demultiplex_thread()
902 HEADER_SIZE(server) - 1 - 4); in cifs_demultiplex_thread()
905 server->total_read += length; in cifs_demultiplex_thread()
907 mid_entry = server->ops->find_mid(server, buf); in cifs_demultiplex_thread()
910 length = standard_receive3(server, mid_entry); in cifs_demultiplex_thread()
912 length = mid_entry->receive(server, mid_entry); in cifs_demultiplex_thread()
917 if (server->large_buf) in cifs_demultiplex_thread()
918 buf = server->bigbuf; in cifs_demultiplex_thread()
920 server->lstrp = jiffies; in cifs_demultiplex_thread()
924 } else if (!server->ops->is_oplock_break || in cifs_demultiplex_thread()
925 !server->ops->is_oplock_break(buf, server)) { in cifs_demultiplex_thread()
929 HEADER_SIZE(server)); in cifs_demultiplex_thread()
931 if (server->ops->dump_detail) in cifs_demultiplex_thread()
932 server->ops->dump_detail(buf); in cifs_demultiplex_thread()
933 cifs_dump_mids(server); in cifs_demultiplex_thread()
940 cifs_buf_release(server->bigbuf); in cifs_demultiplex_thread()
941 if (server->smallbuf) /* no sense logging a debug message if NULL */ in cifs_demultiplex_thread()
942 cifs_small_buf_release(server->smallbuf); in cifs_demultiplex_thread()
944 task_to_wake = xchg(&server->tsk, NULL); in cifs_demultiplex_thread()
945 clean_demultiplex_info(server); in cifs_demultiplex_thread()
1981 match_port(struct TCP_Server_Info *server, struct sockaddr *addr) in match_port() argument
1987 sport = &((struct sockaddr_in *) &server->dstaddr)->sin_port; in match_port()
1991 sport = &((struct sockaddr_in6 *) &server->dstaddr)->sin6_port; in match_port()
2011 match_address(struct TCP_Server_Info *server, struct sockaddr *addr, in match_address() argument
2018 (struct sockaddr_in *)&server->dstaddr; in match_address()
2027 (struct sockaddr_in6 *)&server->dstaddr; in match_address()
2041 if (!srcip_matches(srcaddr, (struct sockaddr *)&server->srcaddr)) in match_address()
2048 match_security(struct TCP_Server_Info *server, struct smb_vol *vol) in match_security() argument
2055 if (select_sectype(server, vol->sectype) == Unspecified) in match_security()
2063 if (vol->sign && !server->sign) in match_security()
2069 static int match_server(struct TCP_Server_Info *server, struct smb_vol *vol) in match_server() argument
2076 if ((server->vals != vol->vals) || (server->ops != vol->ops)) in match_server()
2079 if (!net_eq(cifs_net_ns(server), current->nsproxy->net_ns)) in match_server()
2082 if (!match_address(server, addr, in match_server()
2086 if (!match_port(server, addr)) in match_server()
2089 if (!match_security(server, vol)) in match_server()
2098 struct TCP_Server_Info *server; in cifs_find_tcp_session() local
2101 list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) { in cifs_find_tcp_session()
2102 if (!match_server(server, vol)) in cifs_find_tcp_session()
2105 ++server->srv_count; in cifs_find_tcp_session()
2108 return server; in cifs_find_tcp_session()
2115 cifs_put_tcp_session(struct TCP_Server_Info *server) in cifs_put_tcp_session() argument
2120 if (--server->srv_count > 0) { in cifs_put_tcp_session()
2125 put_net(cifs_net_ns(server)); in cifs_put_tcp_session()
2127 list_del_init(&server->tcp_ses_list); in cifs_put_tcp_session()
2130 cancel_delayed_work_sync(&server->echo); in cifs_put_tcp_session()
2133 server->tcpStatus = CifsExiting; in cifs_put_tcp_session()
2136 cifs_crypto_shash_release(server); in cifs_put_tcp_session()
2137 cifs_fscache_release_client_cookie(server); in cifs_put_tcp_session()
2139 kfree(server->session_key.response); in cifs_put_tcp_session()
2140 server->session_key.response = NULL; in cifs_put_tcp_session()
2141 server->session_key.len = 0; in cifs_put_tcp_session()
2143 task = xchg(&server->tsk, NULL); in cifs_put_tcp_session()
2295 cifs_find_smb_ses(struct TCP_Server_Info *server, struct smb_vol *vol) in cifs_find_smb_ses() argument
2300 list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { in cifs_find_smb_ses()
2317 struct TCP_Server_Info *server = ses->server; in cifs_put_smb_ses() local
2334 if (ses->status == CifsExiting && server->ops->logoff) { in cifs_put_smb_ses()
2336 rc = server->ops->logoff(xid, ses); in cifs_put_smb_ses()
2348 cifs_put_tcp_session(server); in cifs_put_smb_ses()
2365 struct TCP_Server_Info *server = ses->server; in cifs_set_cifscreds() local
2375 switch (server->dstaddr.ss_family) { in cifs_set_cifscreds()
2377 sa = (struct sockaddr_in *)&server->dstaddr; in cifs_set_cifscreds()
2381 sa6 = (struct sockaddr_in6 *)&server->dstaddr; in cifs_set_cifscreds()
2386 server->dstaddr.ss_family); in cifs_set_cifscreds()
2483 cifs_get_smb_ses(struct TCP_Server_Info *server, struct smb_vol *volume_info) in cifs_get_smb_ses() argument
2488 struct sockaddr_in *addr = (struct sockaddr_in *)&server->dstaddr; in cifs_get_smb_ses()
2489 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&server->dstaddr; in cifs_get_smb_ses()
2493 ses = cifs_find_smb_ses(server, volume_info); in cifs_get_smb_ses()
2522 cifs_put_tcp_session(server); in cifs_get_smb_ses()
2533 ses->server = server; in cifs_get_smb_ses()
2534 if (server->dstaddr.ss_family == AF_INET6) in cifs_get_smb_ses()
2572 list_add(&ses->smb_ses_list, &server->smb_ses_list); in cifs_get_smb_ses()
2629 if (ses->server->ops->tree_disconnect) in cifs_put_tcon()
2630 ses->server->ops->tree_disconnect(xid, tcon); in cifs_put_tcon()
2654 if (!ses->server->ops->tree_connect) { in cifs_get_tcon()
2679 rc = ses->server->ops->tree_connect(xid, ses, volume_info->UNC, tcon, in cifs_get_tcon()
2694 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2700 } else if (ses->server->capabilities & in cifs_get_tcon()
2712 && (ses->server->capabilities & SMB2_GLOBAL_CAP_PERSISTENT_HANDLES) in cifs_get_tcon()
2718 if (ses->server->vals->protocol_id == 0) { in cifs_get_tcon()
2834 tcp_srv = ses->server; in cifs_match_super()
2860 if (!ses->server->ops->tree_connect || !ses->server->ops->get_dfs_refer) in get_dfs_path()
2876 rc = ses->server->ops->tree_connect(xid, ses, temp_unc, NULL, in get_dfs_path()
2882 rc = ses->server->ops->get_dfs_refer(xid, ses, old_path, in get_dfs_path()
2941 bind_socket(struct TCP_Server_Info *server) in bind_socket() argument
2944 if (server->srcaddr.ss_family != AF_UNSPEC) { in bind_socket()
2946 struct socket *socket = server->ssocket; in bind_socket()
2948 (struct sockaddr *) &server->srcaddr, in bind_socket()
2949 sizeof(server->srcaddr)); in bind_socket()
2953 saddr4 = (struct sockaddr_in *)&server->srcaddr; in bind_socket()
2954 saddr6 = (struct sockaddr_in6 *)&server->srcaddr; in bind_socket()
2967 ip_rfc1001_connect(struct TCP_Server_Info *server) in ip_rfc1001_connect() argument
2982 if (server->server_RFC1001_name && in ip_rfc1001_connect()
2983 server->server_RFC1001_name[0] != 0) in ip_rfc1001_connect()
2986 server->server_RFC1001_name, in ip_rfc1001_connect()
3000 if (server->workstation_RFC1001_name[0] != 0) in ip_rfc1001_connect()
3003 server->workstation_RFC1001_name, in ip_rfc1001_connect()
3017 rc = smb_send(server, smb_buf, 0x44); in ip_rfc1001_connect()
3040 generic_ip_connect(struct TCP_Server_Info *server) in generic_ip_connect() argument
3045 struct socket *socket = server->ssocket; in generic_ip_connect()
3048 saddr = (struct sockaddr *) &server->dstaddr; in generic_ip_connect()
3050 if (server->dstaddr.ss_family == AF_INET6) { in generic_ip_connect()
3061 rc = __sock_create(cifs_net_ns(server), sfamily, SOCK_STREAM, in generic_ip_connect()
3065 server->ssocket = NULL; in generic_ip_connect()
3071 server->ssocket = socket; in generic_ip_connect()
3079 rc = bind_socket(server); in generic_ip_connect()
3092 if (server->noautotune) { in generic_ip_connect()
3099 if (server->tcp_nodelay) { in generic_ip_connect()
3116 server->ssocket = NULL; in generic_ip_connect()
3121 rc = ip_rfc1001_connect(server); in generic_ip_connect()
3127 ip_connect(struct TCP_Server_Info *server) in ip_connect() argument
3130 struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&server->dstaddr; in ip_connect()
3131 struct sockaddr_in *addr = (struct sockaddr_in *)&server->dstaddr; in ip_connect()
3133 if (server->dstaddr.ss_family == AF_INET6) in ip_connect()
3144 rc = generic_ip_connect(server); in ip_connect()
3152 return generic_ip_connect(server); in ip_connect()
3525 struct TCP_Server_Info *server; in cifs_mount() local
3553 server = NULL; in cifs_mount()
3560 server = cifs_get_tcp_session(volume_info); in cifs_mount()
3561 if (IS_ERR(server)) { in cifs_mount()
3562 rc = PTR_ERR(server); in cifs_mount()
3568 ses = cifs_get_smb_ses(server, volume_info); in cifs_mount()
3576 if ((volume_info->persistent == true) && ((ses->server->capabilities & in cifs_mount()
3597 if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && in cifs_mount()
3607 if (!tcon->ipc && server->ops->qfs_tcon) in cifs_mount()
3608 server->ops->qfs_tcon(xid, tcon); in cifs_mount()
3610 cifs_sb->wsize = server->ops->negotiate_wsize(tcon, volume_info); in cifs_mount()
3611 cifs_sb->rsize = server->ops->negotiate_rsize(tcon, volume_info); in cifs_mount()
3637 if (!server->ops->is_path_accessible) { in cifs_mount()
3649 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, in cifs_mount()
3718 cifs_put_tcp_session(server); in cifs_mount()
3757 smb_buffer->Mid = get_next_mid(ses->server); in CIFSTCon()
3765 if (!tcon || (ses->server->sec_mode & SECMODE_USER)) { in CIFSTCon()
3781 calc_lanman_hash(tcon->password, ses->server->cryptkey, in CIFSTCon()
3782 ses->server->sec_mode & in CIFSTCon()
3787 rc = SMBNTencrypt(tcon->password, ses->server->cryptkey, in CIFSTCon()
3804 if (ses->server->sign) in CIFSTCon()
3931 struct TCP_Server_Info *server = ses->server; in cifs_negotiate_protocol() local
3933 if (!server->ops->need_neg || !server->ops->negotiate) in cifs_negotiate_protocol()
3937 if (!server->ops->need_neg(server)) in cifs_negotiate_protocol()
3940 set_credits(server, 1); in cifs_negotiate_protocol()
3942 rc = server->ops->negotiate(xid, ses); in cifs_negotiate_protocol()
3945 if (server->tcpStatus == CifsNeedNegotiate) in cifs_negotiate_protocol()
3946 server->tcpStatus = CifsGood; in cifs_negotiate_protocol()
3960 struct TCP_Server_Info *server = ses->server; in cifs_setup_session() local
3962 ses->capabilities = server->capabilities; in cifs_setup_session()
3964 ses->capabilities &= (~server->vals->cap_unix); in cifs_setup_session()
3967 server->sec_mode, server->capabilities, server->timeAdj); in cifs_setup_session()
3969 if (server->ops->sess_setup) in cifs_setup_session()
3970 rc = server->ops->sess_setup(xid, ses, nls_info); in cifs_setup_session()
4022 ++master_tcon->ses->server->srv_count; in cifs_construct_tcon()
4025 ses = cifs_get_smb_ses(master_tcon->ses->server, vol_info); in cifs_construct_tcon()
4028 cifs_put_tcp_session(master_tcon->ses->server); in cifs_construct_tcon()