[PATCH] cifs: Enable ioctl support in POSIX extensions to handle lsattr

remove sparse warnings, unnecessary pad in QueryFileInfo and redundant
function define.

Signed-off-by: Steve French (sfrench@us.ibm.com)
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index 5082fce..ae48ef0 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -559,6 +559,10 @@
 	.flush = cifs_flush,
 	.mmap  = cifs_file_mmap,
 	.sendfile = generic_file_sendfile,
+#ifdef CONFIG_CIFS_POSIX
+	.ioctl	= cifs_ioctl,
+#endif /* CONFIG_CIFS_POSIX */
+
 #ifdef CONFIG_CIFS_EXPERIMENTAL
 	.readv = generic_file_readv,
 	.writev = generic_file_writev,
@@ -579,6 +583,10 @@
 	.fsync = cifs_fsync,
 	.flush = cifs_flush,
 	.sendfile = generic_file_sendfile, /* BB removeme BB */
+#ifdef CONFIG_CIFS_POSIX
+	.ioctl  = cifs_ioctl,
+#endif /* CONFIG_CIFS_POSIX */
+
 #ifdef CONFIG_CIFS_EXPERIMENTAL
 	.dir_notify = cifs_dir_notify,
 #endif /* CONFIG_CIFS_EXPERIMENTAL */
diff --git a/fs/cifs/cifspdu.h b/fs/cifs/cifspdu.h
index 085109d..5b35289 100644
--- a/fs/cifs/cifspdu.h
+++ b/fs/cifs/cifspdu.h
@@ -1258,10 +1258,8 @@
         struct	smb_hdr hdr;
         struct	trans2_req t2;
 	__u8	Pad;
-	__u16	Pad1;
 	__u16	Fid;
 	__le16	InformationLevel;
-	__u16	Pad2;
 };
 
 struct smb_t2_qfi_rsp {
diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
index 82ae59d..1b0070d 100644
--- a/fs/cifs/cifsproto.h
+++ b/fs/cifs/cifsproto.h
@@ -266,6 +266,4 @@
 		const struct nls_table *nls_codepage);
 extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
                 const int netfid, __u64 * pExtAttrBits, __u64 *pMask);
-extern int cifs_ioctl (struct inode * inode, struct file * filep,
-                unsigned int command, unsigned long arg);
 #endif			/* _CIFSPROTO_H */
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
index 36d3c12..237e3bf 100644
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -2093,9 +2093,9 @@
         if (rc)
                 return rc;
 
-        params = 2 /* level */ +2 /* fid */ + 2 /* rsrvd */;
+        params = 2 /* level */ +2 /* fid */;
         pSMB->t2.TotalDataCount = 0;
-        pSMB->t2.MaxParameterCount = cpu_to_le16(2);
+        pSMB->t2.MaxParameterCount = cpu_to_le16(4);
         /* BB find exact max data count below from sess structure BB */
         pSMB->t2.MaxDataCount = cpu_to_le16(4000);
         pSMB->t2.MaxSetupCount = 0;
@@ -2103,19 +2103,18 @@
         pSMB->t2.Flags = 0;
         pSMB->t2.Timeout = 0;
         pSMB->t2.Reserved2 = 0;
-        pSMB->t2.ParameterOffset = cpu_to_le16(offsetof(
-                struct smb_com_transaction2_qpi_req ,InformationLevel) - 4);
+        pSMB->t2.ParameterOffset = cpu_to_le16(offsetof(struct smb_t2_qfi_req,
+			Fid) - 4);
         pSMB->t2.DataCount = 0;
         pSMB->t2.DataOffset = 0;
         pSMB->t2.SetupCount = 1;
         pSMB->t2.Reserved3 = 0;
         pSMB->t2.SubCommand = cpu_to_le16(TRANS2_QUERY_FILE_INFORMATION);
-        byte_count = params + 3 /* pad */ ;
+        byte_count = params + 1 /* pad */ ;
         pSMB->t2.TotalParameterCount = cpu_to_le16(params);
         pSMB->t2.ParameterCount = pSMB->t2.TotalParameterCount;
         pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_ATTR_FLAGS);
-        pSMB->Pad1 = 0;
-	pSMB->Pad2 = 0;
+        pSMB->Pad = 0;
 	pSMB->Fid = netfid;
         pSMB->hdr.smb_buf_length += byte_count;
         pSMB->t2.ByteCount = cpu_to_le16(byte_count);
diff --git a/fs/cifs/ioctl.c b/fs/cifs/ioctl.c
index 7b84b2b..a4f1c34a 100644
--- a/fs/cifs/ioctl.c
+++ b/fs/cifs/ioctl.c
@@ -27,6 +27,7 @@
 #include "cifsglob.h"
 #include "cifsproto.h"
 #include "cifs_debug.h"
+#include "cifsfs.h"
 
 int cifs_ioctl (struct inode * inode, struct file * filep, 
 		unsigned int command, unsigned long arg)