Lines Matching +full:io +full:- +full:multiplex

1 // SPDX-License-Identifier: GPL-2.0-only
33 struct smb_hdr *in_buf = (struct smb_hdr *)rqst->rq_iov[0].iov_base; in send_nt_cancel()
35 /* -4 for RFC1001 length and +2 for BCC field */ in send_nt_cancel()
36 in_buf->smb_buf_length = cpu_to_be32(sizeof(struct smb_hdr) - 4 + 2); in send_nt_cancel()
37 in_buf->Command = SMB_COM_NT_CANCEL; in send_nt_cancel()
38 in_buf->WordCount = 0; in send_nt_cancel()
42 rc = cifs_sign_smb(in_buf, server, &mid->sequence_number); in send_nt_cancel()
53 --server->sequence_number; in send_nt_cancel()
54 rc = smb_send(server, in_buf, be32_to_cpu(in_buf->smb_buf_length)); in send_nt_cancel()
56 server->sequence_number--; in send_nt_cancel()
69 return ob1->fid.netfid == ob2->fid.netfid; in cifs_compare_fids()
76 return le16_to_cpu(rsp->DataOffset); in cifs_read_data_offset()
85 return (le16_to_cpu(rsp->DataLengthHigh) << 16) + in cifs_read_data_length()
86 le16_to_cpu(rsp->DataLength); in cifs_read_data_length()
95 spin_lock(&server->mid_lock); in cifs_find_mid()
96 list_for_each_entry(mid, &server->pending_mid_q, qhead) { in cifs_find_mid()
97 if (compare_mid(mid->mid, buf) && in cifs_find_mid()
98 mid->mid_state == MID_REQUEST_SUBMITTED && in cifs_find_mid()
99 le16_to_cpu(mid->command) == buf->Command) { in cifs_find_mid()
100 kref_get(&mid->refcount); in cifs_find_mid()
101 spin_unlock(&server->mid_lock); in cifs_find_mid()
105 spin_unlock(&server->mid_lock); in cifs_find_mid()
113 spin_lock(&server->req_lock); in cifs_add_credits()
114 server->credits += credits->value; in cifs_add_credits()
115 server->in_flight--; in cifs_add_credits()
116 spin_unlock(&server->req_lock); in cifs_add_credits()
117 wake_up(&server->request_q); in cifs_add_credits()
123 spin_lock(&server->req_lock); in cifs_set_credits()
124 server->credits = val; in cifs_set_credits()
125 server->oplocks = val > 1 ? enable_oplocks : false; in cifs_set_credits()
126 spin_unlock(&server->req_lock); in cifs_set_credits()
132 return &server->credits; in cifs_get_credits_field()
142 * Find a free multiplex id (SMB mid). Otherwise there could be
144 * wrong response to this request. Multiplex ids could collide if
148 * 64K-1 requests can be outstanding at one time. If no
159 * to somewhat less than 64K-1 although it is hard to imagine
169 spin_lock(&server->mid_lock); in cifs_get_next_mid()
172 cur_mid = (__u16)((server->CurrentMid) & 0xffff); in cifs_get_next_mid()
198 list_for_each_entry(mid_entry, &server->pending_mid_q, qhead) { in cifs_get_next_mid()
200 if (mid_entry->mid == cur_mid && in cifs_get_next_mid()
201 mid_entry->mid_state == MID_REQUEST_SUBMITTED) { in cifs_get_next_mid()
211 * box by issuing long-running calls and SIGKILL'ing them. If in cifs_get_next_mid()
223 server->CurrentMid = mid; in cifs_get_next_mid()
228 spin_unlock(&server->mid_lock); in cifs_get_next_mid()
241 -EINVAL invalid transact2
251 if (pSMB->Command != SMB_COM_TRANSACTION2) in check2ndT2()
256 if (pSMB->WordCount != 10) { /* coalesce_t2 depends on this */ in check2ndT2()
258 return -EINVAL; in check2ndT2()
263 total_data_size = get_unaligned_le16(&pSMBt->t2_rsp.TotalDataCount); in check2ndT2()
264 data_in_this_rsp = get_unaligned_le16(&pSMBt->t2_rsp.DataCount); in check2ndT2()
271 return -EINVAL; in check2ndT2()
274 remaining = total_data_size - data_in_this_rsp; in check2ndT2()
281 return -EINVAL; in check2ndT2()
297 src_total_cnt = get_unaligned_le16(&pSMBs->t2_rsp.TotalDataCount); in coalesce_t2()
298 tgt_total_cnt = get_unaligned_le16(&pSMBt->t2_rsp.TotalDataCount); in coalesce_t2()
304 total_in_tgt = get_unaligned_le16(&pSMBt->t2_rsp.DataCount); in coalesce_t2()
306 remaining = tgt_total_cnt - total_in_tgt; in coalesce_t2()
311 return -EPROTO; in coalesce_t2()
320 total_in_src = get_unaligned_le16(&pSMBs->t2_rsp.DataCount); in coalesce_t2()
325 data_area_of_tgt = (char *)&pSMBt->hdr.Protocol + in coalesce_t2()
326 get_unaligned_le16(&pSMBt->t2_rsp.DataOffset); in coalesce_t2()
329 data_area_of_src = (char *)&pSMBs->hdr.Protocol + in coalesce_t2()
330 get_unaligned_le16(&pSMBs->t2_rsp.DataOffset); in coalesce_t2()
339 return -EPROTO; in coalesce_t2()
341 put_unaligned_le16(total_in_tgt, &pSMBt->t2_rsp.DataCount); in coalesce_t2()
349 return -EPROTO; in coalesce_t2()
353 byte_count = be32_to_cpu(target_hdr->smb_buf_length); in coalesce_t2()
356 if (byte_count > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4) { in coalesce_t2()
359 return -ENOBUFS; in coalesce_t2()
361 target_hdr->smb_buf_length = cpu_to_be32(byte_count); in coalesce_t2()
393 mid->multiRsp = true; in cifs_check_trans2()
394 if (mid->resp_buf) { in cifs_check_trans2()
395 /* merge response - fix up 1st*/ in cifs_check_trans2()
396 malformed = coalesce_t2(buf, mid->resp_buf); in cifs_check_trans2()
400 mid->multiEnd = true; in cifs_check_trans2()
404 if (!server->large_buf) { in cifs_check_trans2()
409 mid->resp_buf = buf; in cifs_check_trans2()
410 mid->large_buf = true; in cifs_check_trans2()
411 server->bigbuf = NULL; in cifs_check_trans2()
419 return server->maxBuf == 0; in cifs_need_neg()
429 if (rc == -EAGAIN) { in cifs_negotiate()
433 if (rc == -EAGAIN) in cifs_negotiate()
434 rc = -EHOSTDOWN; in cifs_negotiate()
442 __u64 unix_cap = le64_to_cpu(tcon->fsUnixInfo.Capability); in cifs_negotiate_wsize()
443 struct TCP_Server_Info *server = tcon->ses->server; in cifs_negotiate_wsize()
447 if (ctx->wsize) in cifs_negotiate_wsize()
448 wsize = ctx->wsize; in cifs_negotiate_wsize()
449 else if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_WRITE_CAP)) in cifs_negotiate_wsize()
454 /* can server support 24-bit write sizes? (via UNIX extensions) */ in cifs_negotiate_wsize()
455 if (!tcon->unix_ext || !(unix_cap & CIFS_UNIX_LARGE_WRITE_CAP)) in cifs_negotiate_wsize()
463 if (!(server->capabilities & CAP_LARGE_WRITE_X) || in cifs_negotiate_wsize()
464 (!(server->capabilities & CAP_UNIX) && server->sign)) in cifs_negotiate_wsize()
466 server->maxBuf - sizeof(WRITE_REQ) + 4); in cifs_negotiate_wsize()
477 __u64 unix_cap = le64_to_cpu(tcon->fsUnixInfo.Capability); in cifs_negotiate_rsize()
478 struct TCP_Server_Info *server = tcon->ses->server; in cifs_negotiate_rsize()
485 * MS-CIFS indicates that servers are only limited by the client's in cifs_negotiate_rsize()
493 if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP)) in cifs_negotiate_rsize()
495 else if (server->capabilities & CAP_LARGE_READ_X) in cifs_negotiate_rsize()
498 defsize = server->maxBuf - sizeof(READ_RSP); in cifs_negotiate_rsize()
500 rsize = ctx->rsize ? ctx->rsize : defsize; in cifs_negotiate_rsize()
503 * no CAP_LARGE_READ_X? Then MS-CIFS states that we must limit this to in cifs_negotiate_rsize()
506 if (!(server->capabilities & CAP_LARGE_READ_X)) in cifs_negotiate_rsize()
532 return -ENOMEM; in cifs_is_path_accessible()
535 0 /* not legacy */, cifs_sb->local_nls, in cifs_is_path_accessible()
538 if (rc == -EOPNOTSUPP || rc == -EINVAL) in cifs_is_path_accessible()
540 cifs_sb->local_nls, cifs_remap(cifs_sb)); in cifs_is_path_accessible()
554 data->reparse_point = false; in cifs_query_path_info()
555 data->adjust_tz = false; in cifs_query_path_info()
558 rc = CIFSSMBQPathInfo(xid, tcon, full_path, &fi, 0 /* not legacy */, cifs_sb->local_nls, in cifs_query_path_info()
562 * no NT SMB support and the above call failed at least once - set flag in cifs_query_path_info()
565 if ((rc == -EOPNOTSUPP) || (rc == -EINVAL)) { in cifs_query_path_info()
566 rc = SMBQueryInformation(xid, tcon, full_path, &fi, cifs_sb->local_nls, in cifs_query_path_info()
568 data->adjust_tz = true; in cifs_query_path_info()
572 move_cifs_info_to_smb2(&data->fi, &fi); in cifs_query_path_info()
573 data->reparse_point = le32_to_cpu(fi.Attributes) & ATTR_REPARSE; in cifs_query_path_info()
588 * per-machine. in cifs_get_srv_inum()
598 if (tcon && !(tcon->ses->capabilities & CAP_INFOLEVEL_PASSTHRU)) in cifs_get_srv_inum()
599 return -EOPNOTSUPP; in cifs_get_srv_inum()
601 cifs_sb->local_nls, in cifs_get_srv_inum()
611 if (cfile->symlink_target) { in cifs_query_file_info()
612 data->symlink_target = kstrdup(cfile->symlink_target, GFP_KERNEL); in cifs_query_file_info()
613 if (!data->symlink_target) in cifs_query_file_info()
614 return -ENOMEM; in cifs_query_file_info()
617 rc = CIFSSMBQFileInfo(xid, tcon, cfile->fid.netfid, &fi); in cifs_query_file_info()
619 move_cifs_info_to_smb2(&data->fi, &fi); in cifs_query_file_info()
626 atomic_set(&tcon->stats.cifs_stats.num_writes, 0); in cifs_clear_stats()
627 atomic_set(&tcon->stats.cifs_stats.num_reads, 0); in cifs_clear_stats()
628 atomic_set(&tcon->stats.cifs_stats.num_flushes, 0); in cifs_clear_stats()
629 atomic_set(&tcon->stats.cifs_stats.num_oplock_brks, 0); in cifs_clear_stats()
630 atomic_set(&tcon->stats.cifs_stats.num_opens, 0); in cifs_clear_stats()
631 atomic_set(&tcon->stats.cifs_stats.num_posixopens, 0); in cifs_clear_stats()
632 atomic_set(&tcon->stats.cifs_stats.num_posixmkdirs, 0); in cifs_clear_stats()
633 atomic_set(&tcon->stats.cifs_stats.num_closes, 0); in cifs_clear_stats()
634 atomic_set(&tcon->stats.cifs_stats.num_deletes, 0); in cifs_clear_stats()
635 atomic_set(&tcon->stats.cifs_stats.num_mkdirs, 0); in cifs_clear_stats()
636 atomic_set(&tcon->stats.cifs_stats.num_rmdirs, 0); in cifs_clear_stats()
637 atomic_set(&tcon->stats.cifs_stats.num_renames, 0); in cifs_clear_stats()
638 atomic_set(&tcon->stats.cifs_stats.num_t2renames, 0); in cifs_clear_stats()
639 atomic_set(&tcon->stats.cifs_stats.num_ffirst, 0); in cifs_clear_stats()
640 atomic_set(&tcon->stats.cifs_stats.num_fnext, 0); in cifs_clear_stats()
641 atomic_set(&tcon->stats.cifs_stats.num_fclose, 0); in cifs_clear_stats()
642 atomic_set(&tcon->stats.cifs_stats.num_hardlinks, 0); in cifs_clear_stats()
643 atomic_set(&tcon->stats.cifs_stats.num_symlinks, 0); in cifs_clear_stats()
644 atomic_set(&tcon->stats.cifs_stats.num_locks, 0); in cifs_clear_stats()
645 atomic_set(&tcon->stats.cifs_stats.num_acl_get, 0); in cifs_clear_stats()
646 atomic_set(&tcon->stats.cifs_stats.num_acl_set, 0); in cifs_clear_stats()
653 atomic_read(&tcon->stats.cifs_stats.num_oplock_brks)); in cifs_print_stats()
655 atomic_read(&tcon->stats.cifs_stats.num_reads), in cifs_print_stats()
656 (long long)(tcon->bytes_read)); in cifs_print_stats()
658 atomic_read(&tcon->stats.cifs_stats.num_writes), in cifs_print_stats()
659 (long long)(tcon->bytes_written)); in cifs_print_stats()
661 atomic_read(&tcon->stats.cifs_stats.num_flushes)); in cifs_print_stats()
663 atomic_read(&tcon->stats.cifs_stats.num_locks), in cifs_print_stats()
664 atomic_read(&tcon->stats.cifs_stats.num_hardlinks), in cifs_print_stats()
665 atomic_read(&tcon->stats.cifs_stats.num_symlinks)); in cifs_print_stats()
667 atomic_read(&tcon->stats.cifs_stats.num_opens), in cifs_print_stats()
668 atomic_read(&tcon->stats.cifs_stats.num_closes), in cifs_print_stats()
669 atomic_read(&tcon->stats.cifs_stats.num_deletes)); in cifs_print_stats()
671 atomic_read(&tcon->stats.cifs_stats.num_posixopens), in cifs_print_stats()
672 atomic_read(&tcon->stats.cifs_stats.num_posixmkdirs)); in cifs_print_stats()
674 atomic_read(&tcon->stats.cifs_stats.num_mkdirs), in cifs_print_stats()
675 atomic_read(&tcon->stats.cifs_stats.num_rmdirs)); in cifs_print_stats()
677 atomic_read(&tcon->stats.cifs_stats.num_renames), in cifs_print_stats()
678 atomic_read(&tcon->stats.cifs_stats.num_t2renames)); in cifs_print_stats()
680 atomic_read(&tcon->stats.cifs_stats.num_ffirst), in cifs_print_stats()
681 atomic_read(&tcon->stats.cifs_stats.num_fnext), in cifs_print_stats()
682 atomic_read(&tcon->stats.cifs_stats.num_fclose)); in cifs_print_stats()
697 dosattrs = cifsInode->cifsAttrs|ATTR_READONLY; in cifs_mkdir_setinfo()
699 rc = CIFSSMBSetPathInfo(xid, tcon, full_path, &info, cifs_sb->local_nls, in cifs_mkdir_setinfo()
702 cifsInode->cifsAttrs = dosattrs; in cifs_mkdir_setinfo()
712 if (!(oparms->tcon->ses->capabilities & CAP_NT_SMBS)) in cifs_open_file()
713 rc = SMBLegacyOpen(xid, oparms->tcon, oparms->path, in cifs_open_file()
714 oparms->disposition, in cifs_open_file()
715 oparms->desired_access, in cifs_open_file()
716 oparms->create_options, in cifs_open_file()
717 &oparms->fid->netfid, oplock, &fi, in cifs_open_file()
718 oparms->cifs_sb->local_nls, in cifs_open_file()
719 cifs_remap(oparms->cifs_sb)); in cifs_open_file()
724 move_cifs_info_to_smb2(&data->fi, &fi); in cifs_open_file()
732 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry)); in cifs_set_fid()
733 cfile->fid.netfid = fid->netfid; in cifs_set_fid()
735 cinode->can_cache_brlcks = CIFS_CACHE_WRITE(cinode); in cifs_set_fid()
742 return CIFSSMBClose(xid, tcon, fid->netfid); in cifs_close_file()
749 return CIFSSMBFlush(xid, tcon, fid->netfid); in cifs_flush_file()
757 parms->netfid = pfid->netfid; in cifs_sync_read()
767 parms->netfid = pfid->netfid; in cifs_sync_write()
782 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); in smb_set_file_info()
789 fid.netfid = open_file->fid.netfid; in smb_set_file_info()
790 netpid = open_file->pid; in smb_set_file_info()
791 tcon = tlink_tcon(open_file->tlink); in smb_set_file_info()
803 rc = CIFSSMBSetPathInfo(xid, tcon, full_path, buf, cifs_sb->local_nls, in smb_set_file_info()
806 cinode->cifsAttrs = le32_to_cpu(buf->Attributes); in smb_set_file_info()
808 } else if (rc != -EOPNOTSUPP && rc != -EINVAL) { in smb_set_file_info()
825 if (rc == -EIO) in smb_set_file_info()
826 rc = -EINVAL; in smb_set_file_info()
830 netpid = current->tgid; in smb_set_file_info()
835 cinode->cifsAttrs = le32_to_cpu(buf->Attributes); in smb_set_file_info()
851 return CIFSSMB_set_compression(xid, tcon, cfile->fid.netfid); in cifs_set_compression()
863 &fid->netfid, search_flags, srch_inf, true); in cifs_query_dir_first()
874 return CIFSFindNext(xid, tcon, fid->netfid, search_flags, srch_inf); in cifs_query_dir_next()
881 return CIFSFindClose(xid, tcon, fid->netfid); in cifs_close_dir()
888 return CIFSSMBLock(0, tcon, net_fid, current->tgid, 0, 0, 0, 0, in cifs_oplock_response()
896 int rc = -EOPNOTSUPP; in cifs_queryfs()
898 buf->f_type = CIFS_SUPER_MAGIC; in cifs_queryfs()
903 if ((tcon->ses->capabilities & CAP_UNIX) && in cifs_queryfs()
904 (CIFS_POSIX_EXTENSIONS & le64_to_cpu(tcon->fsUnixInfo.Capability))) in cifs_queryfs()
911 if (rc && (tcon->ses->capabilities & CAP_NT_SMBS)) in cifs_queryfs()
928 return CIFSSMBLock(xid, tlink_tcon(cfile->tlink), cfile->fid.netfid, in cifs_mand_lock()
929 current->tgid, length, offset, unlock, lock, in cifs_mand_lock()
942 rc = get_dfs_path(xid, tcon->ses, searchName, nls_codepage, &referral, in cifs_unix_dfs_readlink()
949 rc = -ENOMEM; in cifs_unix_dfs_readlink()
953 return -EREMOTE; in cifs_unix_dfs_readlink()
967 if (!cap_unix(tcon->ses)) in cifs_query_symlink()
968 return -EOPNOTSUPP; in cifs_query_symlink()
971 cifs_sb->local_nls, cifs_remap(cifs_sb)); in cifs_query_symlink()
972 if (rc == -EREMOTE) in cifs_query_symlink()
974 target_path, cifs_sb->local_nls); in cifs_query_symlink()
984 TRANSACT_IOCTL_RSP *io = rsp_iov->iov_base; in cifs_parse_reparse_point() local
985 u32 plen = le16_to_cpu(io->ByteCount); in cifs_parse_reparse_point()
987 buf = (struct reparse_data_buffer *)((__u8 *)&io->hdr.Protocol + in cifs_parse_reparse_point()
988 le32_to_cpu(io->DataOffset)); in cifs_parse_reparse_point()
1001 return CIFS_SB(inode->i_sb)->ctx->wsize; in cifs_wp_retry_size()
1007 return !cfile->srch_inf.endOfSearch && !cfile->invalidHandle; in cifs_dir_needs_close()
1013 if (server->tcpStatus == CifsGood) in cifs_can_echo()
1024 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); in cifs_make_node()
1028 if (tcon->unix_ext) { in cifs_make_node()
1040 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) { in cifs_make_node()
1048 cifs_sb->local_nls, in cifs_make_node()
1054 inode->i_sb, xid); in cifs_make_node()
1066 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)) in cifs_make_node()
1067 return -EPERM; in cifs_make_node()