diff options
Diffstat (limited to 'arch/sparc64/solaris/ioctl.c')
| -rw-r--r-- | arch/sparc64/solaris/ioctl.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/sparc64/solaris/ioctl.c b/arch/sparc64/solaris/ioctl.c index cac0a1cf0050..be0a054e3ed6 100644 --- a/arch/sparc64/solaris/ioctl.c +++ b/arch/sparc64/solaris/ioctl.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/netdevice.h> | 24 | #include <linux/netdevice.h> |
| 25 | #include <linux/mtio.h> | 25 | #include <linux/mtio.h> |
| 26 | #include <linux/time.h> | 26 | #include <linux/time.h> |
| 27 | #include <linux/rcupdate.h> | ||
| 27 | #include <linux/compat.h> | 28 | #include <linux/compat.h> |
| 28 | 29 | ||
| 29 | #include <net/sock.h> | 30 | #include <net/sock.h> |
| @@ -293,16 +294,18 @@ static struct module_info { | |||
| 293 | static inline int solaris_sockmod(unsigned int fd, unsigned int cmd, u32 arg) | 294 | static inline int solaris_sockmod(unsigned int fd, unsigned int cmd, u32 arg) |
| 294 | { | 295 | { |
| 295 | struct inode *ino; | 296 | struct inode *ino; |
| 297 | struct fdtable *fdt; | ||
| 296 | /* I wonder which of these tests are superfluous... --patrik */ | 298 | /* I wonder which of these tests are superfluous... --patrik */ |
| 297 | spin_lock(¤t->files->file_lock); | 299 | rcu_read_lock(); |
| 298 | if (! current->files->fd[fd] || | 300 | fdt = files_fdtable(current->files); |
| 299 | ! current->files->fd[fd]->f_dentry || | 301 | if (! fdt->fd[fd] || |
| 300 | ! (ino = current->files->fd[fd]->f_dentry->d_inode) || | 302 | ! fdt->fd[fd]->f_dentry || |
| 303 | ! (ino = fdt->fd[fd]->f_dentry->d_inode) || | ||
| 301 | ! S_ISSOCK(ino->i_mode)) { | 304 | ! S_ISSOCK(ino->i_mode)) { |
| 302 | spin_unlock(¤t->files->file_lock); | 305 | rcu_read_unlock(); |
| 303 | return TBADF; | 306 | return TBADF; |
| 304 | } | 307 | } |
| 305 | spin_unlock(¤t->files->file_lock); | 308 | rcu_read_unlock(); |
| 306 | 309 | ||
| 307 | switch (cmd & 0xff) { | 310 | switch (cmd & 0xff) { |
| 308 | case 109: /* SI_SOCKPARAMS */ | 311 | case 109: /* SI_SOCKPARAMS */ |
