diff options
| author | Tony Luck <tony.luck@intel.com> | 2005-05-17 18:53:14 -0400 |
|---|---|---|
| committer | Tony Luck <tony.luck@intel.com> | 2005-05-17 18:53:14 -0400 |
| commit | 325a479c4c110db278ef3361460a48c4093252cc (patch) | |
| tree | bcfbf4d0647d9442045639a5c19da59d55190e81 /fs/cifs/inode.c | |
| parent | ebcc80c1b6629a445f7471cc1ddb48faf8a84e70 (diff) | |
| parent | 7f9eaedf894dbaa08c157832e9a6c9c03ffed1ed (diff) | |
Merge with temp tree to get David's gdb inferior calls patch
Diffstat (limited to 'fs/cifs/inode.c')
| -rw-r--r-- | fs/cifs/inode.c | 106 |
1 files changed, 78 insertions, 28 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index d73b0aa86775..670947288262 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
| @@ -44,7 +44,8 @@ int cifs_get_inode_info_unix(struct inode **pinode, | |||
| 44 | cFYI(1, (" Getting info on %s ", search_path)); | 44 | cFYI(1, (" Getting info on %s ", search_path)); |
| 45 | /* could have done a find first instead but this returns more info */ | 45 | /* could have done a find first instead but this returns more info */ |
| 46 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, search_path, &findData, | 46 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, search_path, &findData, |
| 47 | cifs_sb->local_nls); | 47 | cifs_sb->local_nls, cifs_sb->mnt_cifs_flags & |
| 48 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 48 | /* dump_mem("\nUnixQPathInfo return data", &findData, | 49 | /* dump_mem("\nUnixQPathInfo return data", &findData, |
| 49 | sizeof(findData)); */ | 50 | sizeof(findData)); */ |
| 50 | if (rc) { | 51 | if (rc) { |
| @@ -63,7 +64,9 @@ int cifs_get_inode_info_unix(struct inode **pinode, | |||
| 63 | strncat(tmp_path, search_path, MAX_PATHCONF); | 64 | strncat(tmp_path, search_path, MAX_PATHCONF); |
| 64 | rc = connect_to_dfs_path(xid, pTcon->ses, | 65 | rc = connect_to_dfs_path(xid, pTcon->ses, |
| 65 | /* treename + */ tmp_path, | 66 | /* treename + */ tmp_path, |
| 66 | cifs_sb->local_nls); | 67 | cifs_sb->local_nls, |
| 68 | cifs_sb->mnt_cifs_flags & | ||
| 69 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 67 | kfree(tmp_path); | 70 | kfree(tmp_path); |
| 68 | 71 | ||
| 69 | /* BB fix up inode etc. */ | 72 | /* BB fix up inode etc. */ |
| @@ -210,7 +213,8 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 210 | pfindData = (FILE_ALL_INFO *)buf; | 213 | pfindData = (FILE_ALL_INFO *)buf; |
| 211 | /* could do find first instead but this returns more info */ | 214 | /* could do find first instead but this returns more info */ |
| 212 | rc = CIFSSMBQPathInfo(xid, pTcon, search_path, pfindData, | 215 | rc = CIFSSMBQPathInfo(xid, pTcon, search_path, pfindData, |
| 213 | cifs_sb->local_nls); | 216 | cifs_sb->local_nls, cifs_sb->mnt_cifs_flags & |
| 217 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 214 | } | 218 | } |
| 215 | /* dump_mem("\nQPathInfo return data",&findData, sizeof(findData)); */ | 219 | /* dump_mem("\nQPathInfo return data",&findData, sizeof(findData)); */ |
| 216 | if (rc) { | 220 | if (rc) { |
| @@ -230,7 +234,9 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 230 | strncat(tmp_path, search_path, MAX_PATHCONF); | 234 | strncat(tmp_path, search_path, MAX_PATHCONF); |
| 231 | rc = connect_to_dfs_path(xid, pTcon->ses, | 235 | rc = connect_to_dfs_path(xid, pTcon->ses, |
| 232 | /* treename + */ tmp_path, | 236 | /* treename + */ tmp_path, |
| 233 | cifs_sb->local_nls); | 237 | cifs_sb->local_nls, |
| 238 | cifs_sb->mnt_cifs_flags & | ||
| 239 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 234 | kfree(tmp_path); | 240 | kfree(tmp_path); |
| 235 | /* BB fix up inode etc. */ | 241 | /* BB fix up inode etc. */ |
| 236 | } else if (rc) { | 242 | } else if (rc) { |
| @@ -268,7 +274,9 @@ int cifs_get_inode_info(struct inode **pinode, | |||
| 268 | 274 | ||
| 269 | rc1 = CIFSGetSrvInodeNumber(xid, pTcon, | 275 | rc1 = CIFSGetSrvInodeNumber(xid, pTcon, |
| 270 | search_path, &inode_num, | 276 | search_path, &inode_num, |
| 271 | cifs_sb->local_nls); | 277 | cifs_sb->local_nls, |
| 278 | cifs_sb->mnt_cifs_flags & | ||
| 279 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 272 | if(rc1) { | 280 | if(rc1) { |
| 273 | cFYI(1,("GetSrvInodeNum rc %d", rc1)); | 281 | cFYI(1,("GetSrvInodeNum rc %d", rc1)); |
| 274 | /* BB EOPNOSUPP disable SERVER_INUM? */ | 282 | /* BB EOPNOSUPP disable SERVER_INUM? */ |
| @@ -410,7 +418,8 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
| 410 | FreeXid(xid); | 418 | FreeXid(xid); |
| 411 | return -ENOMEM; | 419 | return -ENOMEM; |
| 412 | } | 420 | } |
| 413 | rc = CIFSSMBDelFile(xid, pTcon, full_path, cifs_sb->local_nls); | 421 | rc = CIFSSMBDelFile(xid, pTcon, full_path, cifs_sb->local_nls, |
| 422 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 414 | 423 | ||
| 415 | if (!rc) { | 424 | if (!rc) { |
| 416 | direntry->d_inode->i_nlink--; | 425 | direntry->d_inode->i_nlink--; |
| @@ -422,10 +431,14 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
| 422 | 431 | ||
| 423 | rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, DELETE, | 432 | rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, DELETE, |
| 424 | CREATE_NOT_DIR | CREATE_DELETE_ON_CLOSE, | 433 | CREATE_NOT_DIR | CREATE_DELETE_ON_CLOSE, |
| 425 | &netfid, &oplock, NULL, cifs_sb->local_nls); | 434 | &netfid, &oplock, NULL, cifs_sb->local_nls, |
| 435 | cifs_sb->mnt_cifs_flags & | ||
| 436 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 426 | if (rc==0) { | 437 | if (rc==0) { |
| 427 | CIFSSMBRenameOpenFile(xid, pTcon, netfid, NULL, | 438 | CIFSSMBRenameOpenFile(xid, pTcon, netfid, NULL, |
| 428 | cifs_sb->local_nls); | 439 | cifs_sb->local_nls, |
| 440 | cifs_sb->mnt_cifs_flags & | ||
| 441 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 429 | CIFSSMBClose(xid, pTcon, netfid); | 442 | CIFSSMBClose(xid, pTcon, netfid); |
| 430 | direntry->d_inode->i_nlink--; | 443 | direntry->d_inode->i_nlink--; |
| 431 | } | 444 | } |
| @@ -439,7 +452,9 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
| 439 | if (!(pTcon->ses->flags & CIFS_SES_NT4)) | 452 | if (!(pTcon->ses->flags & CIFS_SES_NT4)) |
| 440 | rc = CIFSSMBSetTimes(xid, pTcon, full_path, | 453 | rc = CIFSSMBSetTimes(xid, pTcon, full_path, |
| 441 | pinfo_buf, | 454 | pinfo_buf, |
| 442 | cifs_sb->local_nls); | 455 | cifs_sb->local_nls, |
| 456 | cifs_sb->mnt_cifs_flags & | ||
| 457 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 443 | else | 458 | else |
| 444 | rc = -EOPNOTSUPP; | 459 | rc = -EOPNOTSUPP; |
| 445 | 460 | ||
| @@ -461,7 +476,9 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
| 461 | FILE_OPEN, SYNCHRONIZE | | 476 | FILE_OPEN, SYNCHRONIZE | |
| 462 | FILE_WRITE_ATTRIBUTES, 0, | 477 | FILE_WRITE_ATTRIBUTES, 0, |
| 463 | &netfid, &oplock, NULL, | 478 | &netfid, &oplock, NULL, |
| 464 | cifs_sb->local_nls); | 479 | cifs_sb->local_nls, |
| 480 | cifs_sb->mnt_cifs_flags & | ||
| 481 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 465 | if (rc==0) { | 482 | if (rc==0) { |
| 466 | rc = CIFSSMBSetFileTimes(xid, pTcon, | 483 | rc = CIFSSMBSetFileTimes(xid, pTcon, |
| 467 | pinfo_buf, | 484 | pinfo_buf, |
| @@ -472,8 +489,10 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
| 472 | kfree(pinfo_buf); | 489 | kfree(pinfo_buf); |
| 473 | } | 490 | } |
| 474 | if (rc==0) { | 491 | if (rc==0) { |
| 475 | rc = CIFSSMBDelFile(xid, pTcon, full_path, | 492 | rc = CIFSSMBDelFile(xid, pTcon, full_path, |
| 476 | cifs_sb->local_nls); | 493 | cifs_sb->local_nls, |
| 494 | cifs_sb->mnt_cifs_flags & | ||
| 495 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 477 | if (!rc) { | 496 | if (!rc) { |
| 478 | direntry->d_inode->i_nlink--; | 497 | direntry->d_inode->i_nlink--; |
| 479 | } else if (rc == -ETXTBSY) { | 498 | } else if (rc == -ETXTBSY) { |
| @@ -485,11 +504,15 @@ int cifs_unlink(struct inode *inode, struct dentry *direntry) | |||
| 485 | CREATE_NOT_DIR | | 504 | CREATE_NOT_DIR | |
| 486 | CREATE_DELETE_ON_CLOSE, | 505 | CREATE_DELETE_ON_CLOSE, |
| 487 | &netfid, &oplock, NULL, | 506 | &netfid, &oplock, NULL, |
| 488 | cifs_sb->local_nls); | 507 | cifs_sb->local_nls, |
| 508 | cifs_sb->mnt_cifs_flags & | ||
| 509 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 489 | if (rc==0) { | 510 | if (rc==0) { |
| 490 | CIFSSMBRenameOpenFile(xid, pTcon, | 511 | CIFSSMBRenameOpenFile(xid, pTcon, |
| 491 | netfid, NULL, | 512 | netfid, NULL, |
| 492 | cifs_sb->local_nls); | 513 | cifs_sb->local_nls, |
| 514 | cifs_sb->mnt_cifs_flags & | ||
| 515 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 493 | CIFSSMBClose(xid, pTcon, netfid); | 516 | CIFSSMBClose(xid, pTcon, netfid); |
| 494 | direntry->d_inode->i_nlink--; | 517 | direntry->d_inode->i_nlink--; |
| 495 | } | 518 | } |
| @@ -534,7 +557,8 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
| 534 | return -ENOMEM; | 557 | return -ENOMEM; |
| 535 | } | 558 | } |
| 536 | /* BB add setting the equivalent of mode via CreateX w/ACLs */ | 559 | /* BB add setting the equivalent of mode via CreateX w/ACLs */ |
| 537 | rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls); | 560 | rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls, |
| 561 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 538 | if (rc) { | 562 | if (rc) { |
| 539 | cFYI(1, ("cifs_mkdir returned 0x%x ", rc)); | 563 | cFYI(1, ("cifs_mkdir returned 0x%x ", rc)); |
| 540 | d_drop(direntry); | 564 | d_drop(direntry); |
| @@ -558,12 +582,16 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
| 558 | (__u64)current->euid, | 582 | (__u64)current->euid, |
| 559 | (__u64)current->egid, | 583 | (__u64)current->egid, |
| 560 | 0 /* dev_t */, | 584 | 0 /* dev_t */, |
| 561 | cifs_sb->local_nls); | 585 | cifs_sb->local_nls, |
| 586 | cifs_sb->mnt_cifs_flags & | ||
| 587 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 562 | } else { | 588 | } else { |
| 563 | CIFSSMBUnixSetPerms(xid, pTcon, full_path, | 589 | CIFSSMBUnixSetPerms(xid, pTcon, full_path, |
| 564 | mode, (__u64)-1, | 590 | mode, (__u64)-1, |
| 565 | (__u64)-1, 0 /* dev_t */, | 591 | (__u64)-1, 0 /* dev_t */, |
| 566 | cifs_sb->local_nls); | 592 | cifs_sb->local_nls, |
| 593 | cifs_sb->mnt_cifs_flags & | ||
| 594 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 567 | } | 595 | } |
| 568 | else { | 596 | else { |
| 569 | /* BB to be implemented via Windows secrty descriptors | 597 | /* BB to be implemented via Windows secrty descriptors |
| @@ -600,7 +628,8 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry) | |||
| 600 | return -ENOMEM; | 628 | return -ENOMEM; |
| 601 | } | 629 | } |
| 602 | 630 | ||
| 603 | rc = CIFSSMBRmDir(xid, pTcon, full_path, cifs_sb->local_nls); | 631 | rc = CIFSSMBRmDir(xid, pTcon, full_path, cifs_sb->local_nls, |
| 632 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 604 | 633 | ||
| 605 | if (!rc) { | 634 | if (!rc) { |
| 606 | inode->i_nlink--; | 635 | inode->i_nlink--; |
| @@ -653,7 +682,9 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, | |||
| 653 | } | 682 | } |
| 654 | 683 | ||
| 655 | rc = CIFSSMBRename(xid, pTcon, fromName, toName, | 684 | rc = CIFSSMBRename(xid, pTcon, fromName, toName, |
| 656 | cifs_sb_source->local_nls); | 685 | cifs_sb_source->local_nls, |
| 686 | cifs_sb_source->mnt_cifs_flags & | ||
| 687 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 657 | if (rc == -EEXIST) { | 688 | if (rc == -EEXIST) { |
| 658 | /* check if they are the same file because rename of hardlinked | 689 | /* check if they are the same file because rename of hardlinked |
| 659 | files is a noop */ | 690 | files is a noop */ |
| @@ -665,11 +696,16 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, | |||
| 665 | if (info_buf_source != NULL) { | 696 | if (info_buf_source != NULL) { |
| 666 | info_buf_target = info_buf_source + 1; | 697 | info_buf_target = info_buf_source + 1; |
| 667 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, fromName, | 698 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, fromName, |
| 668 | info_buf_source, cifs_sb_source->local_nls); | 699 | info_buf_source, cifs_sb_source->local_nls, |
| 700 | cifs_sb_source->mnt_cifs_flags & | ||
| 701 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 669 | if (rc == 0) { | 702 | if (rc == 0) { |
| 670 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, toName, | 703 | rc = CIFSSMBUnixQPathInfo(xid, pTcon, toName, |
| 671 | info_buf_target, | 704 | info_buf_target, |
| 672 | cifs_sb_target->local_nls); | 705 | cifs_sb_target->local_nls, |
| 706 | /* remap based on source sb */ | ||
| 707 | cifs_sb_source->mnt_cifs_flags & | ||
| 708 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 673 | } | 709 | } |
| 674 | if ((rc == 0) && | 710 | if ((rc == 0) && |
| 675 | (info_buf_source->UniqueId == | 711 | (info_buf_source->UniqueId == |
| @@ -685,7 +721,9 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, | |||
| 685 | cifs_unlink(target_inode, target_direntry); | 721 | cifs_unlink(target_inode, target_direntry); |
| 686 | rc = CIFSSMBRename(xid, pTcon, fromName, | 722 | rc = CIFSSMBRename(xid, pTcon, fromName, |
| 687 | toName, | 723 | toName, |
| 688 | cifs_sb_source->local_nls); | 724 | cifs_sb_source->local_nls, |
| 725 | cifs_sb_source->mnt_cifs_flags | ||
| 726 | & CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 689 | } | 727 | } |
| 690 | kfree(info_buf_source); | 728 | kfree(info_buf_source); |
| 691 | } /* if we can not get memory just leave rc as EEXIST */ | 729 | } /* if we can not get memory just leave rc as EEXIST */ |
| @@ -705,10 +743,14 @@ int cifs_rename(struct inode *source_inode, struct dentry *source_direntry, | |||
| 705 | might not right be right access to request */ | 743 | might not right be right access to request */ |
| 706 | rc = CIFSSMBOpen(xid, pTcon, fromName, FILE_OPEN, GENERIC_READ, | 744 | rc = CIFSSMBOpen(xid, pTcon, fromName, FILE_OPEN, GENERIC_READ, |
| 707 | CREATE_NOT_DIR, &netfid, &oplock, NULL, | 745 | CREATE_NOT_DIR, &netfid, &oplock, NULL, |
| 708 | cifs_sb_source->local_nls); | 746 | cifs_sb_source->local_nls, |
| 747 | cifs_sb_source->mnt_cifs_flags & | ||
| 748 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 709 | if (rc==0) { | 749 | if (rc==0) { |
| 710 | CIFSSMBRenameOpenFile(xid, pTcon, netfid, toName, | 750 | CIFSSMBRenameOpenFile(xid, pTcon, netfid, toName, |
| 711 | cifs_sb_source->local_nls); | 751 | cifs_sb_source->local_nls, |
| 752 | cifs_sb_source->mnt_cifs_flags & | ||
| 753 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 712 | CIFSSMBClose(xid, pTcon, netfid); | 754 | CIFSSMBClose(xid, pTcon, netfid); |
| 713 | } | 755 | } |
| 714 | } | 756 | } |
| @@ -962,7 +1004,9 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 962 | it by handle */ | 1004 | it by handle */ |
| 963 | rc = CIFSSMBSetEOF(xid, pTcon, full_path, | 1005 | rc = CIFSSMBSetEOF(xid, pTcon, full_path, |
| 964 | attrs->ia_size, FALSE, | 1006 | attrs->ia_size, FALSE, |
| 965 | cifs_sb->local_nls); | 1007 | cifs_sb->local_nls, |
| 1008 | cifs_sb->mnt_cifs_flags & | ||
| 1009 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 966 | cFYI(1, (" SetEOF by path (setattrs) rc = %d", rc)); | 1010 | cFYI(1, (" SetEOF by path (setattrs) rc = %d", rc)); |
| 967 | } | 1011 | } |
| 968 | 1012 | ||
| @@ -999,7 +1043,9 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 999 | if ((cifs_sb->tcon->ses->capabilities & CAP_UNIX) | 1043 | if ((cifs_sb->tcon->ses->capabilities & CAP_UNIX) |
| 1000 | && (attrs->ia_valid & (ATTR_MODE | ATTR_GID | ATTR_UID))) | 1044 | && (attrs->ia_valid & (ATTR_MODE | ATTR_GID | ATTR_UID))) |
| 1001 | rc = CIFSSMBUnixSetPerms(xid, pTcon, full_path, mode, uid, gid, | 1045 | rc = CIFSSMBUnixSetPerms(xid, pTcon, full_path, mode, uid, gid, |
| 1002 | 0 /* dev_t */, cifs_sb->local_nls); | 1046 | 0 /* dev_t */, cifs_sb->local_nls, |
| 1047 | cifs_sb->mnt_cifs_flags & | ||
| 1048 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 1003 | else if (attrs->ia_valid & ATTR_MODE) { | 1049 | else if (attrs->ia_valid & ATTR_MODE) { |
| 1004 | if ((mode & S_IWUGO) == 0) /* not writeable */ { | 1050 | if ((mode & S_IWUGO) == 0) /* not writeable */ { |
| 1005 | if ((cifsInode->cifsAttrs & ATTR_READONLY) == 0) | 1051 | if ((cifsInode->cifsAttrs & ATTR_READONLY) == 0) |
| @@ -1048,7 +1094,9 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 1048 | via Handle (SetFileInfo) instead of by path */ | 1094 | via Handle (SetFileInfo) instead of by path */ |
| 1049 | if (!(pTcon->ses->flags & CIFS_SES_NT4)) | 1095 | if (!(pTcon->ses->flags & CIFS_SES_NT4)) |
| 1050 | rc = CIFSSMBSetTimes(xid, pTcon, full_path, &time_buf, | 1096 | rc = CIFSSMBSetTimes(xid, pTcon, full_path, &time_buf, |
| 1051 | cifs_sb->local_nls); | 1097 | cifs_sb->local_nls, |
| 1098 | cifs_sb->mnt_cifs_flags & | ||
| 1099 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 1052 | else | 1100 | else |
| 1053 | rc = -EOPNOTSUPP; | 1101 | rc = -EOPNOTSUPP; |
| 1054 | 1102 | ||
| @@ -1063,7 +1111,9 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
| 1063 | rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, | 1111 | rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, |
| 1064 | SYNCHRONIZE | FILE_WRITE_ATTRIBUTES, | 1112 | SYNCHRONIZE | FILE_WRITE_ATTRIBUTES, |
| 1065 | CREATE_NOT_DIR, &netfid, &oplock, | 1113 | CREATE_NOT_DIR, &netfid, &oplock, |
| 1066 | NULL, cifs_sb->local_nls); | 1114 | NULL, cifs_sb->local_nls, |
| 1115 | cifs_sb->mnt_cifs_flags & | ||
| 1116 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
| 1067 | if (rc==0) { | 1117 | if (rc==0) { |
| 1068 | rc = CIFSSMBSetFileTimes(xid, pTcon, &time_buf, | 1118 | rc = CIFSSMBSetFileTimes(xid, pTcon, &time_buf, |
| 1069 | netfid); | 1119 | netfid); |
