--- /dev/null
+From 42274bb22afc3e877ae5abed787b0b09d7dede52 Mon Sep 17 00:00:00 2001
+From: Pavel Shilovsky <piastry@etersoft.ru>
+Date: Sat, 22 Oct 2011 14:37:50 +0400
+Subject: CIFS: Fix DFS handling in cifs_get_file_info
+
+From: Pavel Shilovsky <piastry@etersoft.ru>
+
+commit 42274bb22afc3e877ae5abed787b0b09d7dede52 upstream.
+
+We should call cifs_all_info_to_fattr in rc == 0 case only.
+
+Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
+Reviewed-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <smfrench@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/inode.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+--- a/fs/cifs/inode.c
++++ b/fs/cifs/inode.c
+@@ -562,7 +562,16 @@ int cifs_get_file_info(struct file *filp
+
+ xid = GetXid();
+ rc = CIFSSMBQFileInfo(xid, tcon, cfile->netfid, &find_data);
+- if (rc == -EOPNOTSUPP || rc == -EINVAL) {
++ switch (rc) {
++ case 0:
++ cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false);
++ break;
++ case -EREMOTE:
++ cifs_create_dfs_fattr(&fattr, inode->i_sb);
++ rc = 0;
++ break;
++ case -EOPNOTSUPP:
++ case -EINVAL:
+ /*
+ * FIXME: legacy server -- fall back to path-based call?
+ * for now, just skip revalidating and mark inode for
+@@ -570,18 +579,14 @@ int cifs_get_file_info(struct file *filp
+ */
+ rc = 0;
+ CIFS_I(inode)->time = 0;
++ default:
+ goto cgfi_exit;
+- } else if (rc == -EREMOTE) {
+- cifs_create_dfs_fattr(&fattr, inode->i_sb);
+- rc = 0;
+- } else if (rc)
+- goto cgfi_exit;
++ }
+
+ /*
+ * don't bother with SFU junk here -- just mark inode as needing
+ * revalidation.
+ */
+- cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false);
+ fattr.cf_uniqueid = CIFS_I(inode)->uniqueid;
+ fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
+ cifs_fattr_to_inode(inode, &fattr);
--- /dev/null
+From 94443f43404239c2a6dc4252a7cb9e77f5b1eb6e Mon Sep 17 00:00:00 2001
+From: Pavel Shilovsky <piastry@etersoft.ru>
+Date: Fri, 7 Oct 2011 18:57:45 +0400
+Subject: CIFS: Fix incorrect max RFC1002 write size value
+
+From: Pavel Shilovsky <piastry@etersoft.ru>
+
+commit 94443f43404239c2a6dc4252a7cb9e77f5b1eb6e upstream.
+
+..the length field has only 17 bits.
+
+Acked-by: Jeff Layton <jlayton@samba.org>
+Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
+Signed-off-by: Steve French <smfrench@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/connect.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/cifs/connect.c
++++ b/fs/cifs/connect.c
+@@ -2807,10 +2807,10 @@ void cifs_setup_cifs_sb(struct smb_vol *
+
+ /*
+ * When the server doesn't allow large posix writes, only allow a wsize of
+- * 128k minus the size of the WRITE_AND_X header. That allows for a write up
++ * 2^17-1 minus the size of the WRITE_AND_X header. That allows for a write up
+ * to the maximum size described by RFC1002.
+ */
+-#define CIFS_MAX_RFC1002_WSIZE (128 * 1024 - sizeof(WRITE_REQ) + 4)
++#define CIFS_MAX_RFC1002_WSIZE ((1<<17) - 1 - sizeof(WRITE_REQ) + 4)
+
+ /*
+ * The default wsize is 1M. find_get_pages seems to return a maximum of 256