diff options
Diffstat (limited to 'fs/cifs/ioctl.c')
-rw-r--r-- | fs/cifs/ioctl.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/fs/cifs/ioctl.c b/fs/cifs/ioctl.c index 9d38a71c8e14..4221b5e48a42 100644 --- a/fs/cifs/ioctl.c +++ b/fs/cifs/ioctl.c | |||
@@ -37,11 +37,11 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
37 | int xid; | 37 | int xid; |
38 | struct cifs_sb_info *cifs_sb; | 38 | struct cifs_sb_info *cifs_sb; |
39 | #ifdef CONFIG_CIFS_POSIX | 39 | #ifdef CONFIG_CIFS_POSIX |
40 | struct cifsFileInfo *pSMBFile = filep->private_data; | ||
41 | struct cifs_tcon *tcon; | ||
40 | __u64 ExtAttrBits = 0; | 42 | __u64 ExtAttrBits = 0; |
41 | __u64 ExtAttrMask = 0; | 43 | __u64 ExtAttrMask = 0; |
42 | __u64 caps; | 44 | __u64 caps; |
43 | struct cifsTconInfo *tcon; | ||
44 | struct cifsFileInfo *pSMBFile = filep->private_data; | ||
45 | #endif /* CONFIG_CIFS_POSIX */ | 45 | #endif /* CONFIG_CIFS_POSIX */ |
46 | 46 | ||
47 | xid = GetXid(); | 47 | xid = GetXid(); |
@@ -50,17 +50,6 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
50 | 50 | ||
51 | cifs_sb = CIFS_SB(inode->i_sb); | 51 | cifs_sb = CIFS_SB(inode->i_sb); |
52 | 52 | ||
53 | #ifdef CONFIG_CIFS_POSIX | ||
54 | tcon = cifs_sb->tcon; | ||
55 | if (tcon) | ||
56 | caps = le64_to_cpu(tcon->fsUnixInfo.Capability); | ||
57 | else { | ||
58 | rc = -EIO; | ||
59 | FreeXid(xid); | ||
60 | return -EIO; | ||
61 | } | ||
62 | #endif /* CONFIG_CIFS_POSIX */ | ||
63 | |||
64 | switch (command) { | 53 | switch (command) { |
65 | case CIFS_IOC_CHECKUMOUNT: | 54 | case CIFS_IOC_CHECKUMOUNT: |
66 | cFYI(1, "User unmount attempted"); | 55 | cFYI(1, "User unmount attempted"); |
@@ -73,9 +62,11 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
73 | break; | 62 | break; |
74 | #ifdef CONFIG_CIFS_POSIX | 63 | #ifdef CONFIG_CIFS_POSIX |
75 | case FS_IOC_GETFLAGS: | 64 | case FS_IOC_GETFLAGS: |
65 | if (pSMBFile == NULL) | ||
66 | break; | ||
67 | tcon = tlink_tcon(pSMBFile->tlink); | ||
68 | caps = le64_to_cpu(tcon->fsUnixInfo.Capability); | ||
76 | if (CIFS_UNIX_EXTATTR_CAP & caps) { | 69 | if (CIFS_UNIX_EXTATTR_CAP & caps) { |
77 | if (pSMBFile == NULL) | ||
78 | break; | ||
79 | rc = CIFSGetExtAttr(xid, tcon, pSMBFile->netfid, | 70 | rc = CIFSGetExtAttr(xid, tcon, pSMBFile->netfid, |
80 | &ExtAttrBits, &ExtAttrMask); | 71 | &ExtAttrBits, &ExtAttrMask); |
81 | if (rc == 0) | 72 | if (rc == 0) |
@@ -86,13 +77,15 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
86 | break; | 77 | break; |
87 | 78 | ||
88 | case FS_IOC_SETFLAGS: | 79 | case FS_IOC_SETFLAGS: |
80 | if (pSMBFile == NULL) | ||
81 | break; | ||
82 | tcon = tlink_tcon(pSMBFile->tlink); | ||
83 | caps = le64_to_cpu(tcon->fsUnixInfo.Capability); | ||
89 | if (CIFS_UNIX_EXTATTR_CAP & caps) { | 84 | if (CIFS_UNIX_EXTATTR_CAP & caps) { |
90 | if (get_user(ExtAttrBits, (int __user *)arg)) { | 85 | if (get_user(ExtAttrBits, (int __user *)arg)) { |
91 | rc = -EFAULT; | 86 | rc = -EFAULT; |
92 | break; | 87 | break; |
93 | } | 88 | } |
94 | if (pSMBFile == NULL) | ||
95 | break; | ||
96 | /* rc= CIFSGetExtAttr(xid,tcon,pSMBFile->netfid, | 89 | /* rc= CIFSGetExtAttr(xid,tcon,pSMBFile->netfid, |
97 | extAttrBits, &ExtAttrMask);*/ | 90 | extAttrBits, &ExtAttrMask);*/ |
98 | } | 91 | } |