diff options
Diffstat (limited to 'fs/cifs/cifssmb.c')
-rw-r--r-- | fs/cifs/cifssmb.c | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 4511b708f0f3..994de7c90474 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
@@ -128,8 +128,7 @@ static void mark_open_files_invalid(struct cifsTconInfo *pTcon) | |||
128 | write_lock(&GlobalSMBSeslock); | 128 | write_lock(&GlobalSMBSeslock); |
129 | list_for_each_safe(tmp, tmp1, &pTcon->openFileList) { | 129 | list_for_each_safe(tmp, tmp1, &pTcon->openFileList) { |
130 | open_file = list_entry(tmp, struct cifsFileInfo, tlist); | 130 | open_file = list_entry(tmp, struct cifsFileInfo, tlist); |
131 | if (open_file) | 131 | open_file->invalidHandle = true; |
132 | open_file->invalidHandle = true; | ||
133 | } | 132 | } |
134 | write_unlock(&GlobalSMBSeslock); | 133 | write_unlock(&GlobalSMBSeslock); |
135 | /* BB Add call to invalidate_inodes(sb) for all superblocks mounted | 134 | /* BB Add call to invalidate_inodes(sb) for all superblocks mounted |
@@ -686,11 +685,10 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
686 | SecurityBlob, | 685 | SecurityBlob, |
687 | count - 16, | 686 | count - 16, |
688 | &server->secType); | 687 | &server->secType); |
689 | if (rc == 1) { | 688 | if (rc == 1) |
690 | rc = 0; | 689 | rc = 0; |
691 | } else { | 690 | else |
692 | rc = -EINVAL; | 691 | rc = -EINVAL; |
693 | } | ||
694 | } | 692 | } |
695 | } else | 693 | } else |
696 | server->capabilities &= ~CAP_EXTENDED_SECURITY; | 694 | server->capabilities &= ~CAP_EXTENDED_SECURITY; |
@@ -3914,7 +3912,10 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, | |||
3914 | bool is_unicode; | 3912 | bool is_unicode; |
3915 | struct dfs_referral_level_3 *ref; | 3913 | struct dfs_referral_level_3 *ref; |
3916 | 3914 | ||
3917 | is_unicode = pSMBr->hdr.Flags2 & SMBFLG2_UNICODE; | 3915 | if (pSMBr->hdr.Flags2 & SMBFLG2_UNICODE) |
3916 | is_unicode = true; | ||
3917 | else | ||
3918 | is_unicode = false; | ||
3918 | *num_of_nodes = le16_to_cpu(pSMBr->NumberOfReferrals); | 3919 | *num_of_nodes = le16_to_cpu(pSMBr->NumberOfReferrals); |
3919 | 3920 | ||
3920 | if (*num_of_nodes < 1) { | 3921 | if (*num_of_nodes < 1) { |
@@ -4814,8 +4815,8 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size, | |||
4814 | time and resort to the original setpathinfo level which takes the ancient | 4815 | time and resort to the original setpathinfo level which takes the ancient |
4815 | DOS time format with 2 second granularity */ | 4816 | DOS time format with 2 second granularity */ |
4816 | int | 4817 | int |
4817 | CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, | 4818 | CIFSSMBSetFileInfo(const int xid, struct cifsTconInfo *tcon, |
4818 | const FILE_BASIC_INFO *data, __u16 fid) | 4819 | const FILE_BASIC_INFO *data, __u16 fid, __u32 pid_of_opener) |
4819 | { | 4820 | { |
4820 | struct smb_com_transaction2_sfi_req *pSMB = NULL; | 4821 | struct smb_com_transaction2_sfi_req *pSMB = NULL; |
4821 | char *data_offset; | 4822 | char *data_offset; |
@@ -4828,11 +4829,8 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, | |||
4828 | if (rc) | 4829 | if (rc) |
4829 | return rc; | 4830 | return rc; |
4830 | 4831 | ||
4831 | /* At this point there is no need to override the current pid | 4832 | pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener); |
4832 | with the pid of the opener, but that could change if we someday | 4833 | pSMB->hdr.PidHigh = cpu_to_le16((__u16)(pid_of_opener >> 16)); |
4833 | use an existing handle (rather than opening one on the fly) */ | ||
4834 | /* pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener); | ||
4835 | pSMB->hdr.PidHigh = cpu_to_le16((__u16)(pid_of_opener >> 16));*/ | ||
4836 | 4834 | ||
4837 | params = 6; | 4835 | params = 6; |
4838 | pSMB->MaxSetupCount = 0; | 4836 | pSMB->MaxSetupCount = 0; |
@@ -4880,9 +4878,9 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, | |||
4880 | 4878 | ||
4881 | 4879 | ||
4882 | int | 4880 | int |
4883 | CIFSSMBSetTimes(const int xid, struct cifsTconInfo *tcon, const char *fileName, | 4881 | CIFSSMBSetPathInfo(const int xid, struct cifsTconInfo *tcon, |
4884 | const FILE_BASIC_INFO *data, | 4882 | const char *fileName, const FILE_BASIC_INFO *data, |
4885 | const struct nls_table *nls_codepage, int remap) | 4883 | const struct nls_table *nls_codepage, int remap) |
4886 | { | 4884 | { |
4887 | TRANSACTION2_SPI_REQ *pSMB = NULL; | 4885 | TRANSACTION2_SPI_REQ *pSMB = NULL; |
4888 | TRANSACTION2_SPI_RSP *pSMBr = NULL; | 4886 | TRANSACTION2_SPI_RSP *pSMBr = NULL; |
@@ -5011,10 +5009,9 @@ SetAttrLgcyRetry: | |||
5011 | #endif /* temporarily unneeded SetAttr legacy function */ | 5009 | #endif /* temporarily unneeded SetAttr legacy function */ |
5012 | 5010 | ||
5013 | int | 5011 | int |
5014 | CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon, | 5012 | CIFSSMBUnixSetInfo(const int xid, struct cifsTconInfo *tcon, char *fileName, |
5015 | char *fileName, __u64 mode, __u64 uid, __u64 gid, | 5013 | const struct cifs_unix_set_info_args *args, |
5016 | dev_t device, const struct nls_table *nls_codepage, | 5014 | const struct nls_table *nls_codepage, int remap) |
5017 | int remap) | ||
5018 | { | 5015 | { |
5019 | TRANSACTION2_SPI_REQ *pSMB = NULL; | 5016 | TRANSACTION2_SPI_REQ *pSMB = NULL; |
5020 | TRANSACTION2_SPI_RSP *pSMBr = NULL; | 5017 | TRANSACTION2_SPI_RSP *pSMBr = NULL; |
@@ -5023,6 +5020,7 @@ CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon, | |||
5023 | int bytes_returned = 0; | 5020 | int bytes_returned = 0; |
5024 | FILE_UNIX_BASIC_INFO *data_offset; | 5021 | FILE_UNIX_BASIC_INFO *data_offset; |
5025 | __u16 params, param_offset, offset, count, byte_count; | 5022 | __u16 params, param_offset, offset, count, byte_count; |
5023 | __u64 mode = args->mode; | ||
5026 | 5024 | ||
5027 | cFYI(1, ("In SetUID/GID/Mode")); | 5025 | cFYI(1, ("In SetUID/GID/Mode")); |
5028 | setPermsRetry: | 5026 | setPermsRetry: |
@@ -5078,16 +5076,16 @@ setPermsRetry: | |||
5078 | set file size and do not want to truncate file size to zero | 5076 | set file size and do not want to truncate file size to zero |
5079 | accidently as happened on one Samba server beta by putting | 5077 | accidently as happened on one Samba server beta by putting |
5080 | zero instead of -1 here */ | 5078 | zero instead of -1 here */ |
5081 | data_offset->EndOfFile = NO_CHANGE_64; | 5079 | data_offset->EndOfFile = cpu_to_le64(NO_CHANGE_64); |
5082 | data_offset->NumOfBytes = NO_CHANGE_64; | 5080 | data_offset->NumOfBytes = cpu_to_le64(NO_CHANGE_64); |
5083 | data_offset->LastStatusChange = NO_CHANGE_64; | 5081 | data_offset->LastStatusChange = cpu_to_le64(args->ctime); |
5084 | data_offset->LastAccessTime = NO_CHANGE_64; | 5082 | data_offset->LastAccessTime = cpu_to_le64(args->atime); |
5085 | data_offset->LastModificationTime = NO_CHANGE_64; | 5083 | data_offset->LastModificationTime = cpu_to_le64(args->mtime); |
5086 | data_offset->Uid = cpu_to_le64(uid); | 5084 | data_offset->Uid = cpu_to_le64(args->uid); |
5087 | data_offset->Gid = cpu_to_le64(gid); | 5085 | data_offset->Gid = cpu_to_le64(args->gid); |
5088 | /* better to leave device as zero when it is */ | 5086 | /* better to leave device as zero when it is */ |
5089 | data_offset->DevMajor = cpu_to_le64(MAJOR(device)); | 5087 | data_offset->DevMajor = cpu_to_le64(MAJOR(args->device)); |
5090 | data_offset->DevMinor = cpu_to_le64(MINOR(device)); | 5088 | data_offset->DevMinor = cpu_to_le64(MINOR(args->device)); |
5091 | data_offset->Permissions = cpu_to_le64(mode); | 5089 | data_offset->Permissions = cpu_to_le64(mode); |
5092 | 5090 | ||
5093 | if (S_ISREG(mode)) | 5091 | if (S_ISREG(mode)) |