cifs: when ATTR_READONLY is set, only clear write bits on non-directories
authorJeff Layton <jlayton@redhat.com>
Thu, 9 Jul 2009 05:46:44 +0000 (01:46 -0400)
committerSteve French <sfrench@us.ibm.com>
Thu, 9 Jul 2009 23:06:04 +0000 (23:06 +0000)
cifs: when ATTR_READONLY is set, only clear write bits on non-directories

On windows servers, ATTR_READONLY apparently either has no meaning or
serves as some sort of queue to certain applications for unrelated
behavior. This MS kbase article has details:

http://support.microsoft.com/kb/326549/

Don't clear the write bits directory mode when ATTR_READONLY is set.

Reported-by: pouchat@peewiki.net
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/inode.c

index a807397..18afe57 100644 (file)
@@ -419,11 +419,11 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info,
        } else {
                fattr->cf_mode = S_IFREG | cifs_sb->mnt_file_mode;
                fattr->cf_dtype = DT_REG;
-       }
 
-       /* clear write bits if ATTR_READONLY is set */
-       if (fattr->cf_cifsattrs & ATTR_READONLY)
-               fattr->cf_mode &= ~(S_IWUGO);
+               /* clear write bits if ATTR_READONLY is set */
+               if (fattr->cf_cifsattrs & ATTR_READONLY)
+                       fattr->cf_mode &= ~(S_IWUGO);
+       }
 
        fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);