[CIFS] Fallback to standard mkdir if server incorrectly claims support for
authorSteve French <sfrench@us.ibm.com>
Mon, 17 Sep 2007 02:04:21 +0000 (02:04 +0000)
committerSteve French <sfrench@us.ibm.com>
Mon, 17 Sep 2007 02:04:21 +0000 (02:04 +0000)
posix ops

Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/cifsfs.h
fs/cifs/inode.c

index dd64cec..13c53a4 100644 (file)
@@ -101,5 +101,5 @@ extern ssize_t      cifs_getxattr(struct dentry *, const char *, void *, size_t);
 extern ssize_t cifs_listxattr(struct dentry *, char *, size_t);
 extern int cifs_ioctl(struct inode *inode, struct file *filep,
                       unsigned int command, unsigned long arg);
-#define CIFS_VERSION   "1.50"
+#define CIFS_VERSION   "1.51"
 #endif                         /* _CIFSFS_H */
index 9dffa93..552d68b 100644 (file)
@@ -925,7 +925,10 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
                                full_path, cifs_sb->local_nls,
                                cifs_sb->mnt_cifs_flags &
                                        CIFS_MOUNT_MAP_SPECIAL_CHR);
-               if (rc) {
+               if (rc == -EOPNOTSUPP) {
+                       kfree(pInfo);
+                       goto mkdir_retry_old;
+               } else if (rc) {
                        cFYI(1, ("posix mkdir returned 0x%x", rc));
                        d_drop(direntry);
                } else {
@@ -977,7 +980,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
                kfree(pInfo);
                goto mkdir_out;
        }
-
+mkdir_retry_old:
        /* BB add setting the equivalent of mode via CreateX w/ACLs */
        rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls,
                          cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);