Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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()

+20 -6
+4 -3
fs/cifs/cifs_unicode.c
··· 290 290 cifsConvertToUTF16(__le16 *target, const char *source, int srclen, 291 291 const struct nls_table *cp, int mapChars) 292 292 { 293 - int i, j, charlen; 293 + int i, charlen; 294 + int j = 0; 294 295 char src_char; 295 296 __le16 dst_char; 296 297 wchar_t tmp; ··· 299 298 if (!mapChars) 300 299 return cifs_strtoUTF16(target, source, PATH_MAX, cp); 301 300 302 - for (i = 0, j = 0; i < srclen; j++) { 301 + for (i = 0; i < srclen; j++) { 303 302 src_char = source[i]; 304 303 charlen = 1; 305 304 switch (src_char) { 306 305 case 0: 307 - put_unaligned(0, &target[j]); 308 306 goto ctoUTF16_out; 309 307 case ':': 310 308 dst_char = cpu_to_le16(UNI_COLON); ··· 350 350 } 351 351 352 352 ctoUTF16_out: 353 + put_unaligned(0, &target[j]); /* Null terminate target unicode string */ 353 354 return j; 354 355 } 355 356
+15 -2
fs/cifs/cifsfs.c
··· 725 725 goto out; 726 726 } 727 727 728 + static ssize_t 729 + cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter) 730 + { 731 + ssize_t rc; 732 + struct inode *inode = file_inode(iocb->ki_filp); 733 + 734 + rc = cifs_revalidate_mapping(inode); 735 + if (rc) 736 + return rc; 737 + 738 + return generic_file_read_iter(iocb, iter); 739 + } 740 + 728 741 static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 729 742 { 730 743 struct inode *inode = file_inode(iocb->ki_filp); ··· 894 881 const struct file_operations cifs_file_ops = { 895 882 .read = new_sync_read, 896 883 .write = new_sync_write, 897 - .read_iter = generic_file_read_iter, 884 + .read_iter = cifs_loose_read_iter, 898 885 .write_iter = cifs_file_write_iter, 899 886 .open = cifs_open, 900 887 .release = cifs_close, ··· 952 939 const struct file_operations cifs_file_nobrl_ops = { 953 940 .read = new_sync_read, 954 941 .write = new_sync_write, 955 - .read_iter = generic_file_read_iter, 942 + .read_iter = cifs_loose_read_iter, 956 943 .write_iter = cifs_file_write_iter, 957 944 .open = cifs_open, 958 945 .release = cifs_close,
+1 -1
fs/cifs/link.c
··· 374 374 oparms.cifs_sb = cifs_sb; 375 375 oparms.desired_access = GENERIC_WRITE; 376 376 oparms.create_options = create_options; 377 - oparms.disposition = FILE_OPEN; 377 + oparms.disposition = FILE_CREATE; 378 378 oparms.path = path; 379 379 oparms.fid = &fid; 380 380 oparms.reconnect = false;