fattr->cf_mode = S_IFREG | cifs_sb->ctx->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);
-
                /*
                 * Don't accept zero nlink from non-unix servers unless
                 * delete is pending.  Instead mark it as unknown.
                }
        }
 
+       /* clear write bits if ATTR_READONLY is set */
+       if (fattr->cf_cifsattrs & ATTR_READONLY)
+               fattr->cf_mode &= ~(S_IWUGO);
+
 out_reparse:
        if (S_ISLNK(fattr->cf_mode)) {
                if (likely(data->symlink_target))
                                 __func__, rc);
                        goto out;
                }
-       }
-
-       /* fill in remaining high mode bits e.g. SUID, VTX */
-       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
+       } else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
+               /* fill in remaining high mode bits e.g. SUID, VTX */
                cifs_sfu_mode(fattr, full_path, cifs_sb, xid);
+       else if (!(tcon->posix_extensions))
+               /* clear write bits if ATTR_READONLY is set */
+               if (fattr->cf_cifsattrs & ATTR_READONLY)
+                       fattr->cf_mode &= ~(S_IWUGO);
+
 
        /* check for Minshall+French symlinks */
        if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS) {