diff options
Diffstat (limited to 'fs/cifs/cifssmb.c')
-rw-r--r-- | fs/cifs/cifssmb.c | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index c621ffa2ca90..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 |
@@ -4816,8 +4815,8 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size, | |||
4816 | 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 |
4817 | DOS time format with 2 second granularity */ | 4816 | DOS time format with 2 second granularity */ |
4818 | int | 4817 | int |
4819 | CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, | 4818 | CIFSSMBSetFileInfo(const int xid, struct cifsTconInfo *tcon, |
4820 | const FILE_BASIC_INFO *data, __u16 fid) | 4819 | const FILE_BASIC_INFO *data, __u16 fid, __u32 pid_of_opener) |
4821 | { | 4820 | { |
4822 | struct smb_com_transaction2_sfi_req *pSMB = NULL; | 4821 | struct smb_com_transaction2_sfi_req *pSMB = NULL; |
4823 | char *data_offset; | 4822 | char *data_offset; |
@@ -4830,11 +4829,8 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, | |||
4830 | if (rc) | 4829 | if (rc) |
4831 | return rc; | 4830 | return rc; |
4832 | 4831 | ||
4833 | /* At this point there is no need to override the current pid | 4832 | pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener); |
4834 | 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)); |
4835 | use an existing handle (rather than opening one on the fly) */ | ||
4836 | /* pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener); | ||
4837 | pSMB->hdr.PidHigh = cpu_to_le16((__u16)(pid_of_opener >> 16));*/ | ||
4838 | 4834 | ||
4839 | params = 6; | 4835 | params = 6; |
4840 | pSMB->MaxSetupCount = 0; | 4836 | pSMB->MaxSetupCount = 0; |
@@ -4882,9 +4878,9 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, | |||
4882 | 4878 | ||
4883 | 4879 | ||
4884 | int | 4880 | int |
4885 | CIFSSMBSetTimes(const int xid, struct cifsTconInfo *tcon, const char *fileName, | 4881 | CIFSSMBSetPathInfo(const int xid, struct cifsTconInfo *tcon, |
4886 | const FILE_BASIC_INFO *data, | 4882 | const char *fileName, const FILE_BASIC_INFO *data, |
4887 | const struct nls_table *nls_codepage, int remap) | 4883 | const struct nls_table *nls_codepage, int remap) |
4888 | { | 4884 | { |
4889 | TRANSACTION2_SPI_REQ *pSMB = NULL; | 4885 | TRANSACTION2_SPI_REQ *pSMB = NULL; |
4890 | TRANSACTION2_SPI_RSP *pSMBr = NULL; | 4886 | TRANSACTION2_SPI_RSP *pSMBr = NULL; |
@@ -5013,10 +5009,9 @@ SetAttrLgcyRetry: | |||
5013 | #endif /* temporarily unneeded SetAttr legacy function */ | 5009 | #endif /* temporarily unneeded SetAttr legacy function */ |
5014 | 5010 | ||
5015 | int | 5011 | int |
5016 | CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon, | 5012 | CIFSSMBUnixSetInfo(const int xid, struct cifsTconInfo *tcon, char *fileName, |
5017 | char *fileName, __u64 mode, __u64 uid, __u64 gid, | 5013 | const struct cifs_unix_set_info_args *args, |
5018 | dev_t device, const struct nls_table *nls_codepage, | 5014 | const struct nls_table *nls_codepage, int remap) |
5019 | int remap) | ||
5020 | { | 5015 | { |
5021 | TRANSACTION2_SPI_REQ *pSMB = NULL; | 5016 | TRANSACTION2_SPI_REQ *pSMB = NULL; |
5022 | TRANSACTION2_SPI_RSP *pSMBr = NULL; | 5017 | TRANSACTION2_SPI_RSP *pSMBr = NULL; |
@@ -5025,6 +5020,7 @@ CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon, | |||
5025 | int bytes_returned = 0; | 5020 | int bytes_returned = 0; |
5026 | FILE_UNIX_BASIC_INFO *data_offset; | 5021 | FILE_UNIX_BASIC_INFO *data_offset; |
5027 | __u16 params, param_offset, offset, count, byte_count; | 5022 | __u16 params, param_offset, offset, count, byte_count; |
5023 | __u64 mode = args->mode; | ||
5028 | 5024 | ||
5029 | cFYI(1, ("In SetUID/GID/Mode")); | 5025 | cFYI(1, ("In SetUID/GID/Mode")); |
5030 | setPermsRetry: | 5026 | setPermsRetry: |
@@ -5080,16 +5076,16 @@ setPermsRetry: | |||
5080 | 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 |
5081 | accidently as happened on one Samba server beta by putting | 5077 | accidently as happened on one Samba server beta by putting |
5082 | zero instead of -1 here */ | 5078 | zero instead of -1 here */ |
5083 | data_offset->EndOfFile = NO_CHANGE_64; | 5079 | data_offset->EndOfFile = cpu_to_le64(NO_CHANGE_64); |
5084 | data_offset->NumOfBytes = NO_CHANGE_64; | 5080 | data_offset->NumOfBytes = cpu_to_le64(NO_CHANGE_64); |
5085 | data_offset->LastStatusChange = NO_CHANGE_64; | 5081 | data_offset->LastStatusChange = cpu_to_le64(args->ctime); |
5086 | data_offset->LastAccessTime = NO_CHANGE_64; | 5082 | data_offset->LastAccessTime = cpu_to_le64(args->atime); |
5087 | data_offset->LastModificationTime = NO_CHANGE_64; | 5083 | data_offset->LastModificationTime = cpu_to_le64(args->mtime); |
5088 | data_offset->Uid = cpu_to_le64(uid); | 5084 | data_offset->Uid = cpu_to_le64(args->uid); |
5089 | data_offset->Gid = cpu_to_le64(gid); | 5085 | data_offset->Gid = cpu_to_le64(args->gid); |
5090 | /* better to leave device as zero when it is */ | 5086 | /* better to leave device as zero when it is */ |
5091 | data_offset->DevMajor = cpu_to_le64(MAJOR(device)); | 5087 | data_offset->DevMajor = cpu_to_le64(MAJOR(args->device)); |
5092 | data_offset->DevMinor = cpu_to_le64(MINOR(device)); | 5088 | data_offset->DevMinor = cpu_to_le64(MINOR(args->device)); |
5093 | data_offset->Permissions = cpu_to_le64(mode); | 5089 | data_offset->Permissions = cpu_to_le64(mode); |
5094 | 5090 | ||
5095 | if (S_ISREG(mode)) | 5091 | if (S_ISREG(mode)) |