mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-15 16:53:54 +08:00
Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6
Pull CIFS fixes from Steve French: "Small set of misc cifs/smb3 fixes" * 'for-next' of git://git.samba.org/sfrench/cifs-2.6: [CIFS] fix mount failure with broken pathnames when smb3 mount with mapchars option cifs: revalidate mapping prior to satisfying read_iter request with cache=loose fs/cifs: fix regression in cifs_create_mf_symlink()
This commit is contained in:
commit
d7933ab727
@ -290,7 +290,8 @@ int
|
||||
cifsConvertToUTF16(__le16 *target, const char *source, int srclen,
|
||||
const struct nls_table *cp, int mapChars)
|
||||
{
|
||||
int i, j, charlen;
|
||||
int i, charlen;
|
||||
int j = 0;
|
||||
char src_char;
|
||||
__le16 dst_char;
|
||||
wchar_t tmp;
|
||||
@ -298,12 +299,11 @@ cifsConvertToUTF16(__le16 *target, const char *source, int srclen,
|
||||
if (!mapChars)
|
||||
return cifs_strtoUTF16(target, source, PATH_MAX, cp);
|
||||
|
||||
for (i = 0, j = 0; i < srclen; j++) {
|
||||
for (i = 0; i < srclen; j++) {
|
||||
src_char = source[i];
|
||||
charlen = 1;
|
||||
switch (src_char) {
|
||||
case 0:
|
||||
put_unaligned(0, &target[j]);
|
||||
goto ctoUTF16_out;
|
||||
case ':':
|
||||
dst_char = cpu_to_le16(UNI_COLON);
|
||||
@ -350,6 +350,7 @@ cifsConvertToUTF16(__le16 *target, const char *source, int srclen,
|
||||
}
|
||||
|
||||
ctoUTF16_out:
|
||||
put_unaligned(0, &target[j]); /* Null terminate target unicode string */
|
||||
return j;
|
||||
}
|
||||
|
||||
|
@ -725,6 +725,19 @@ out_nls:
|
||||
goto out;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
|
||||
{
|
||||
ssize_t rc;
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
|
||||
rc = cifs_revalidate_mapping(inode);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return generic_file_read_iter(iocb, iter);
|
||||
}
|
||||
|
||||
static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
||||
{
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
@ -881,7 +894,7 @@ const struct inode_operations cifs_symlink_inode_ops = {
|
||||
const struct file_operations cifs_file_ops = {
|
||||
.read = new_sync_read,
|
||||
.write = new_sync_write,
|
||||
.read_iter = generic_file_read_iter,
|
||||
.read_iter = cifs_loose_read_iter,
|
||||
.write_iter = cifs_file_write_iter,
|
||||
.open = cifs_open,
|
||||
.release = cifs_close,
|
||||
@ -939,7 +952,7 @@ const struct file_operations cifs_file_direct_ops = {
|
||||
const struct file_operations cifs_file_nobrl_ops = {
|
||||
.read = new_sync_read,
|
||||
.write = new_sync_write,
|
||||
.read_iter = generic_file_read_iter,
|
||||
.read_iter = cifs_loose_read_iter,
|
||||
.write_iter = cifs_file_write_iter,
|
||||
.open = cifs_open,
|
||||
.release = cifs_close,
|
||||
|
@ -374,7 +374,7 @@ cifs_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,
|
||||
oparms.cifs_sb = cifs_sb;
|
||||
oparms.desired_access = GENERIC_WRITE;
|
||||
oparms.create_options = create_options;
|
||||
oparms.disposition = FILE_OPEN;
|
||||
oparms.disposition = FILE_CREATE;
|
||||
oparms.path = path;
|
||||
oparms.fid = &fid;
|
||||
oparms.reconnect = false;
|
||||
|
Loading…
Reference in New Issue
Block a user