diff options
author | Steve French <sfrench@us.ibm.com> | 2007-09-16 22:04:21 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2007-09-16 22:04:21 -0400 |
commit | c45d707f67b82236fcf9ca2af31c264669368b9b (patch) | |
tree | fde8fda767542a70cad4e86be74eff172be2359c | |
parent | 5a07cdf86c1485b570789fb660c8ada7c2635b23 (diff) |
[CIFS] Fallback to standard mkdir if server incorrectly claims support for
posix ops
Signed-off-by: Steve French <sfrench@us.ibm.com>
-rw-r--r-- | fs/cifs/cifsfs.h | 2 | ||||
-rw-r--r-- | fs/cifs/inode.c | 7 |
2 files changed, 6 insertions, 3 deletions
diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h index dd64cecd923b..13c53a4ee0f7 100644 --- a/fs/cifs/cifsfs.h +++ b/fs/cifs/cifsfs.h | |||
@@ -101,5 +101,5 @@ extern ssize_t cifs_getxattr(struct dentry *, const char *, void *, size_t); | |||
101 | extern ssize_t cifs_listxattr(struct dentry *, char *, size_t); | 101 | extern ssize_t cifs_listxattr(struct dentry *, char *, size_t); |
102 | extern int cifs_ioctl(struct inode *inode, struct file *filep, | 102 | extern int cifs_ioctl(struct inode *inode, struct file *filep, |
103 | unsigned int command, unsigned long arg); | 103 | unsigned int command, unsigned long arg); |
104 | #define CIFS_VERSION "1.50" | 104 | #define CIFS_VERSION "1.51" |
105 | #endif /* _CIFSFS_H */ | 105 | #endif /* _CIFSFS_H */ |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 9dffa93d6bdd..552d68b9d6f4 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -925,7 +925,10 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
925 | full_path, cifs_sb->local_nls, | 925 | full_path, cifs_sb->local_nls, |
926 | cifs_sb->mnt_cifs_flags & | 926 | cifs_sb->mnt_cifs_flags & |
927 | CIFS_MOUNT_MAP_SPECIAL_CHR); | 927 | CIFS_MOUNT_MAP_SPECIAL_CHR); |
928 | if (rc) { | 928 | if (rc == -EOPNOTSUPP) { |
929 | kfree(pInfo); | ||
930 | goto mkdir_retry_old; | ||
931 | } else if (rc) { | ||
929 | cFYI(1, ("posix mkdir returned 0x%x", rc)); | 932 | cFYI(1, ("posix mkdir returned 0x%x", rc)); |
930 | d_drop(direntry); | 933 | d_drop(direntry); |
931 | } else { | 934 | } else { |
@@ -977,7 +980,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
977 | kfree(pInfo); | 980 | kfree(pInfo); |
978 | goto mkdir_out; | 981 | goto mkdir_out; |
979 | } | 982 | } |
980 | 983 | mkdir_retry_old: | |
981 | /* BB add setting the equivalent of mode via CreateX w/ACLs */ | 984 | /* BB add setting the equivalent of mode via CreateX w/ACLs */ |
982 | rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls, | 985 | rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls, |
983 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); | 986 | cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); |