提交 c67593a0 编写于 作者: S Steve French 提交者: Linus Torvalds

[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: NLinus Torvalds <torvalds@osdl.org>
上级 75cf6bdc
...@@ -559,6 +559,10 @@ struct file_operations cifs_file_ops = { ...@@ -559,6 +559,10 @@ struct file_operations cifs_file_ops = {
.flush = cifs_flush, .flush = cifs_flush,
.mmap = cifs_file_mmap, .mmap = cifs_file_mmap,
.sendfile = generic_file_sendfile, .sendfile = generic_file_sendfile,
#ifdef CONFIG_CIFS_POSIX
.ioctl = cifs_ioctl,
#endif /* CONFIG_CIFS_POSIX */
#ifdef CONFIG_CIFS_EXPERIMENTAL #ifdef CONFIG_CIFS_EXPERIMENTAL
.readv = generic_file_readv, .readv = generic_file_readv,
.writev = generic_file_writev, .writev = generic_file_writev,
...@@ -579,6 +583,10 @@ struct file_operations cifs_file_direct_ops = { ...@@ -579,6 +583,10 @@ struct file_operations cifs_file_direct_ops = {
.fsync = cifs_fsync, .fsync = cifs_fsync,
.flush = cifs_flush, .flush = cifs_flush,
.sendfile = generic_file_sendfile, /* BB removeme BB */ .sendfile = generic_file_sendfile, /* BB removeme BB */
#ifdef CONFIG_CIFS_POSIX
.ioctl = cifs_ioctl,
#endif /* CONFIG_CIFS_POSIX */
#ifdef CONFIG_CIFS_EXPERIMENTAL #ifdef CONFIG_CIFS_EXPERIMENTAL
.dir_notify = cifs_dir_notify, .dir_notify = cifs_dir_notify,
#endif /* CONFIG_CIFS_EXPERIMENTAL */ #endif /* CONFIG_CIFS_EXPERIMENTAL */
......
...@@ -1258,10 +1258,8 @@ struct smb_t2_qfi_req { ...@@ -1258,10 +1258,8 @@ struct smb_t2_qfi_req {
struct smb_hdr hdr; struct smb_hdr hdr;
struct trans2_req t2; struct trans2_req t2;
__u8 Pad; __u8 Pad;
__u16 Pad1;
__u16 Fid; __u16 Fid;
__le16 InformationLevel; __le16 InformationLevel;
__u16 Pad2;
}; };
struct smb_t2_qfi_rsp { struct smb_t2_qfi_rsp {
......
...@@ -266,6 +266,4 @@ extern int CIFSSMBSetPosixACL(const int xid, struct cifsTconInfo *tcon, ...@@ -266,6 +266,4 @@ extern int CIFSSMBSetPosixACL(const int xid, struct cifsTconInfo *tcon,
const struct nls_table *nls_codepage); const struct nls_table *nls_codepage);
extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon, extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
const int netfid, __u64 * pExtAttrBits, __u64 *pMask); 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 */ #endif /* _CIFSPROTO_H */
...@@ -2093,9 +2093,9 @@ CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon, ...@@ -2093,9 +2093,9 @@ CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
if (rc) if (rc)
return rc; return rc;
params = 2 /* level */ +2 /* fid */ + 2 /* rsrvd */; params = 2 /* level */ +2 /* fid */;
pSMB->t2.TotalDataCount = 0; 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 */ /* BB find exact max data count below from sess structure BB */
pSMB->t2.MaxDataCount = cpu_to_le16(4000); pSMB->t2.MaxDataCount = cpu_to_le16(4000);
pSMB->t2.MaxSetupCount = 0; pSMB->t2.MaxSetupCount = 0;
...@@ -2103,19 +2103,18 @@ CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon, ...@@ -2103,19 +2103,18 @@ CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
pSMB->t2.Flags = 0; pSMB->t2.Flags = 0;
pSMB->t2.Timeout = 0; pSMB->t2.Timeout = 0;
pSMB->t2.Reserved2 = 0; pSMB->t2.Reserved2 = 0;
pSMB->t2.ParameterOffset = cpu_to_le16(offsetof( pSMB->t2.ParameterOffset = cpu_to_le16(offsetof(struct smb_t2_qfi_req,
struct smb_com_transaction2_qpi_req ,InformationLevel) - 4); Fid) - 4);
pSMB->t2.DataCount = 0; pSMB->t2.DataCount = 0;
pSMB->t2.DataOffset = 0; pSMB->t2.DataOffset = 0;
pSMB->t2.SetupCount = 1; pSMB->t2.SetupCount = 1;
pSMB->t2.Reserved3 = 0; pSMB->t2.Reserved3 = 0;
pSMB->t2.SubCommand = cpu_to_le16(TRANS2_QUERY_FILE_INFORMATION); 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.TotalParameterCount = cpu_to_le16(params);
pSMB->t2.ParameterCount = pSMB->t2.TotalParameterCount; pSMB->t2.ParameterCount = pSMB->t2.TotalParameterCount;
pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_ATTR_FLAGS); pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_ATTR_FLAGS);
pSMB->Pad1 = 0; pSMB->Pad = 0;
pSMB->Pad2 = 0;
pSMB->Fid = netfid; pSMB->Fid = netfid;
pSMB->hdr.smb_buf_length += byte_count; pSMB->hdr.smb_buf_length += byte_count;
pSMB->t2.ByteCount = cpu_to_le16(byte_count); pSMB->t2.ByteCount = cpu_to_le16(byte_count);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "cifsglob.h" #include "cifsglob.h"
#include "cifsproto.h" #include "cifsproto.h"
#include "cifs_debug.h" #include "cifs_debug.h"
#include "cifsfs.h"
int cifs_ioctl (struct inode * inode, struct file * filep, int cifs_ioctl (struct inode * inode, struct file * filep,
unsigned int command, unsigned long arg) unsigned int command, unsigned long arg)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册