Automatic merge of rsync://rsync.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
This commit is contained in:
commit
16a789c11d
6 changed files with 49 additions and 41 deletions
|
@ -371,7 +371,7 @@ A partial list of the supported mount options follows:
|
|||
on newly created files, directories, and devices (create,
|
||||
mkdir, mknod) which will result in the server setting the
|
||||
uid and gid to the default (usually the server uid of the
|
||||
usern who mounted the share). Letting the server (rather than
|
||||
user who mounted the share). Letting the server (rather than
|
||||
the client) set the uid and gid is the default. This
|
||||
parameter has no effect if the CIFS Unix Extensions are not
|
||||
negotiated.
|
||||
|
@ -384,7 +384,7 @@ A partial list of the supported mount options follows:
|
|||
client (e.g. when the application is doing large sequential
|
||||
reads bigger than page size without rereading the same data)
|
||||
this can provide better performance than the default
|
||||
behavior which caches reads (reaadahead) and writes
|
||||
behavior which caches reads (readahead) and writes
|
||||
(writebehind) through the local Linux client pagecache
|
||||
if oplock (caching token) is granted and held. Note that
|
||||
direct allows write operations larger than page size
|
||||
|
|
|
@ -228,7 +228,7 @@ extern int CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon,
|
|||
const struct nls_table *nls_codepage,
|
||||
int remap_special_chars);
|
||||
#endif /* CONFIG_CIFS_EXPERIMENTAL */
|
||||
extern int cifs_convertUCSpath(char *target, const __u16 *source, int maxlen,
|
||||
extern int cifs_convertUCSpath(char *target, const __le16 *source, int maxlen,
|
||||
const struct nls_table * codepage);
|
||||
extern int cifsConvertToUCS(__le16 * target, const char *source, int maxlen,
|
||||
const struct nls_table * cp, int mapChars);
|
||||
|
|
|
@ -567,7 +567,7 @@ DelFileRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->fileName, fileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->fileName, fileName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -665,7 +665,7 @@ MkDirRetry:
|
|||
return rc;
|
||||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len = cifsConvertToUCS((__u16 *) pSMB->DirName, name,
|
||||
name_len = cifsConvertToUCS((__le16 *) pSMB->DirName, name,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -719,7 +719,7 @@ openRetry:
|
|||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
count = 1; /* account for one byte pad to word boundary */
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) (pSMB->fileName + 1),
|
||||
cifsConvertToUCS((__le16 *) (pSMB->fileName + 1),
|
||||
fileName, PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -1141,7 +1141,7 @@ renameRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->OldFileName, fromName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->OldFileName, fromName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -1149,7 +1149,7 @@ renameRetry:
|
|||
/* protocol requires ASCII signature byte on Unicode string */
|
||||
pSMB->OldFileName[name_len + 1] = 0x00;
|
||||
name_len2 =
|
||||
cifsConvertToUCS((__u16 *) &pSMB->OldFileName[name_len + 2],
|
||||
cifsConvertToUCS((__le16 *) &pSMB->OldFileName[name_len + 2],
|
||||
toName, PATH_MAX, nls_codepage, remap);
|
||||
name_len2 += 1 /* trailing null */ + 1 /* Signature word */ ;
|
||||
name_len2 *= 2; /* convert to bytes */
|
||||
|
@ -1236,10 +1236,10 @@ int CIFSSMBRenameOpenFile(const int xid,struct cifsTconInfo *pTcon,
|
|||
/* unicode only call */
|
||||
if(target_name == NULL) {
|
||||
sprintf(dummy_string,"cifs%x",pSMB->hdr.Mid);
|
||||
len_of_str = cifsConvertToUCS((__u16 *)rename_info->target_name,
|
||||
len_of_str = cifsConvertToUCS((__le16 *)rename_info->target_name,
|
||||
dummy_string, 24, nls_codepage, remap);
|
||||
} else {
|
||||
len_of_str = cifsConvertToUCS((__u16 *)rename_info->target_name,
|
||||
len_of_str = cifsConvertToUCS((__le16 *)rename_info->target_name,
|
||||
target_name, PATH_MAX, nls_codepage, remap);
|
||||
}
|
||||
rename_info->target_name_len = cpu_to_le32(2 * len_of_str);
|
||||
|
@ -1296,7 +1296,7 @@ copyRetry:
|
|||
pSMB->Flags = cpu_to_le16(flags & COPY_TREE);
|
||||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len = cifsConvertToUCS((__u16 *) pSMB->OldFileName,
|
||||
name_len = cifsConvertToUCS((__le16 *) pSMB->OldFileName,
|
||||
fromName, PATH_MAX, nls_codepage,
|
||||
remap);
|
||||
name_len++; /* trailing null */
|
||||
|
@ -1304,7 +1304,7 @@ copyRetry:
|
|||
pSMB->OldFileName[name_len] = 0x04; /* pad */
|
||||
/* protocol requires ASCII signature byte on Unicode string */
|
||||
pSMB->OldFileName[name_len + 1] = 0x00;
|
||||
name_len2 = cifsConvertToUCS((__u16 *)&pSMB->OldFileName[name_len + 2],
|
||||
name_len2 = cifsConvertToUCS((__le16 *)&pSMB->OldFileName[name_len + 2],
|
||||
toName, PATH_MAX, nls_codepage, remap);
|
||||
name_len2 += 1 /* trailing null */ + 1 /* Signature word */ ;
|
||||
name_len2 *= 2; /* convert to bytes */
|
||||
|
@ -1453,7 +1453,7 @@ createHardLinkRetry:
|
|||
return rc;
|
||||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len = cifsConvertToUCS((__u16 *) pSMB->FileName, toName,
|
||||
name_len = cifsConvertToUCS((__le16 *) pSMB->FileName, toName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -1476,7 +1476,7 @@ createHardLinkRetry:
|
|||
data_offset = (char *) (&pSMB->hdr.Protocol) + offset;
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len_target =
|
||||
cifsConvertToUCS((__u16 *) data_offset, fromName, PATH_MAX,
|
||||
cifsConvertToUCS((__le16 *) data_offset, fromName, PATH_MAX,
|
||||
nls_codepage, remap);
|
||||
name_len_target++; /* trailing null */
|
||||
name_len_target *= 2;
|
||||
|
@ -1546,14 +1546,14 @@ winCreateHardLinkRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->OldFileName, fromName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->OldFileName, fromName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
pSMB->OldFileName[name_len] = 0; /* pad */
|
||||
pSMB->OldFileName[name_len + 1] = 0x04;
|
||||
name_len2 =
|
||||
cifsConvertToUCS((__u16 *)&pSMB->OldFileName[name_len + 2],
|
||||
cifsConvertToUCS((__le16 *)&pSMB->OldFileName[name_len + 2],
|
||||
toName, PATH_MAX, nls_codepage, remap);
|
||||
name_len2 += 1 /* trailing null */ + 1 /* Signature word */ ;
|
||||
name_len2 *= 2; /* convert to bytes */
|
||||
|
@ -1939,7 +1939,7 @@ queryAclRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -2024,7 +2024,7 @@ setAclRetry:
|
|||
return rc;
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, fileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, fileName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -2188,7 +2188,7 @@ QPathInfoRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -2269,7 +2269,7 @@ UnixQPathInfoRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -2350,7 +2350,7 @@ findUniqueRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((wchar_t *) pSMB->FileName, searchName, PATH_MAX
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName, PATH_MAX
|
||||
/* find define for this maxpathcomponent */
|
||||
, nls_codepage);
|
||||
name_len++; /* trailing null */
|
||||
|
@ -2435,7 +2435,7 @@ findFirstRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName,searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName,searchName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
/* We can not add the asterik earlier in case
|
||||
it got remapped to 0xF03A as if it were part of the
|
||||
|
@ -2726,7 +2726,7 @@ GetInodeNumberRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName,
|
||||
PATH_MAX,nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -2837,7 +2837,7 @@ getDFSRetry:
|
|||
if (ses->capabilities & CAP_UNICODE) {
|
||||
pSMB->hdr.Flags2 |= SMBFLG2_UNICODE;
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->RequestFileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->RequestFileName,
|
||||
searchName, PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -3369,7 +3369,7 @@ SetEOFRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, fileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, fileName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -3627,7 +3627,7 @@ SetTimesRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, fileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, fileName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -3708,7 +3708,7 @@ SetAttrLgcyRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
ConvertToUCS((wchar_t *) pSMB->fileName, fileName,
|
||||
ConvertToUCS((__le16 *) pSMB->fileName, fileName,
|
||||
PATH_MAX, nls_codepage);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -3759,7 +3759,7 @@ setPermsRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, fileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, fileName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -3904,7 +3904,7 @@ QAllEAsRetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((wchar_t *) pSMB->FileName, searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -4047,7 +4047,7 @@ QEARetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, searchName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, searchName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
@ -4194,7 +4194,7 @@ SetEARetry:
|
|||
|
||||
if (pSMB->hdr.Flags2 & SMBFLG2_UNICODE) {
|
||||
name_len =
|
||||
cifsConvertToUCS((__u16 *) pSMB->FileName, fileName,
|
||||
cifsConvertToUCS((__le16 *) pSMB->FileName, fileName,
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
|
|
|
@ -392,7 +392,8 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct name
|
|||
rc = 0;
|
||||
d_add(direntry, NULL);
|
||||
} else {
|
||||
cERROR(1,("Error 0x%x or on cifs_get_inode_info in lookup",rc));
|
||||
cERROR(1,("Error 0x%x on cifs_get_inode_info in lookup of %s",
|
||||
rc,full_path));
|
||||
/* BB special case check for Access Denied - watch security
|
||||
exposure of returning dir info implicitly via different rc
|
||||
if file exists or not but no access BB */
|
||||
|
|
|
@ -422,7 +422,8 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry)
|
|||
cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
|
||||
if (!rc) {
|
||||
direntry->d_inode->i_nlink--;
|
||||
if(direntry->d_inode)
|
||||
direntry->d_inode->i_nlink--;
|
||||
} else if (rc == -ENOENT) {
|
||||
d_drop(direntry);
|
||||
} else if (rc == -ETXTBSY) {
|
||||
|
@ -440,7 +441,8 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry)
|
|||
cifs_sb->mnt_cifs_flags &
|
||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
CIFSSMBClose(xid, pTcon, netfid);
|
||||
direntry->d_inode->i_nlink--;
|
||||
if(direntry->d_inode)
|
||||
direntry->d_inode->i_nlink--;
|
||||
}
|
||||
} else if (rc == -EACCES) {
|
||||
/* try only if r/o attribute set in local lookup data? */
|
||||
|
@ -494,7 +496,8 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry)
|
|||
cifs_sb->mnt_cifs_flags &
|
||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
if (!rc) {
|
||||
direntry->d_inode->i_nlink--;
|
||||
if(direntry->d_inode)
|
||||
direntry->d_inode->i_nlink--;
|
||||
} else if (rc == -ETXTBSY) {
|
||||
int oplock = FALSE;
|
||||
__u16 netfid;
|
||||
|
@ -514,17 +517,20 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry)
|
|||
cifs_sb->mnt_cifs_flags &
|
||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
CIFSSMBClose(xid, pTcon, netfid);
|
||||
direntry->d_inode->i_nlink--;
|
||||
if(direntry->d_inode)
|
||||
direntry->d_inode->i_nlink--;
|
||||
}
|
||||
/* BB if rc = -ETXTBUSY goto the rename logic BB */
|
||||
}
|
||||
}
|
||||
}
|
||||
cifsInode = CIFS_I(direntry->d_inode);
|
||||
cifsInode->time = 0; /* will force revalidate to get info when
|
||||
needed */
|
||||
direntry->d_inode->i_ctime = inode->i_ctime = inode->i_mtime =
|
||||
current_fs_time(inode->i_sb);
|
||||
if(direntry->d_inode) {
|
||||
cifsInode = CIFS_I(direntry->d_inode);
|
||||
cifsInode->time = 0; /* will force revalidate to get info
|
||||
when needed */
|
||||
direntry->d_inode->i_ctime = current_fs_time(inode->i_sb);
|
||||
}
|
||||
inode->i_ctime = inode->i_mtime = current_fs_time(inode->i_sb);
|
||||
cifsInode = CIFS_I(inode);
|
||||
cifsInode->time = 0; /* force revalidate of dir as well */
|
||||
|
||||
|
|
|
@ -571,6 +571,7 @@ cifs_convertUCSpath(char *target, const __le16 * source, int maxlen,
|
|||
break;
|
||||
case UNI_LESSTHAN:
|
||||
target[j] = '<';
|
||||
break;
|
||||
default:
|
||||
len = cp->uni2char(src_char, &target[j],
|
||||
NLS_MAX_CHARSET_SIZE);
|
||||
|
|
Loading…
Reference in a new issue