Commit 6e72ad2c authored by Dipankar Sarma's avatar Dipankar Sarma Committed by Linus Torvalds

[PATCH] files-sparc64-fix 2

Fix sparc64 timod to use the new files_fdtable() api to get the fd table.
This is necessary for RCUification.
Signed-off-by: default avatarDipankar Sarma <dipankar@in.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent badf1662
...@@ -143,9 +143,11 @@ static struct T_primsg *timod_mkctl(int size) ...@@ -143,9 +143,11 @@ static struct T_primsg *timod_mkctl(int size)
static void timod_wake_socket(unsigned int fd) static void timod_wake_socket(unsigned int fd)
{ {
struct socket *sock; struct socket *sock;
struct fdtable *fdt;
SOLD("wakeing socket"); SOLD("wakeing socket");
sock = SOCKET_I(current->files->fd[fd]->f_dentry->d_inode); fdt = files_fdtable(current->files);
sock = SOCKET_I(fdt->fd[fd]->f_dentry->d_inode);
wake_up_interruptible(&sock->wait); wake_up_interruptible(&sock->wait);
read_lock(&sock->sk->sk_callback_lock); read_lock(&sock->sk->sk_callback_lock);
if (sock->fasync_list && !test_bit(SOCK_ASYNC_WAITDATA, &sock->flags)) if (sock->fasync_list && !test_bit(SOCK_ASYNC_WAITDATA, &sock->flags))
...@@ -157,9 +159,11 @@ static void timod_wake_socket(unsigned int fd) ...@@ -157,9 +159,11 @@ static void timod_wake_socket(unsigned int fd)
static void timod_queue(unsigned int fd, struct T_primsg *it) static void timod_queue(unsigned int fd, struct T_primsg *it)
{ {
struct sol_socket_struct *sock; struct sol_socket_struct *sock;
struct fdtable *fdt;
SOLD("queuing primsg"); SOLD("queuing primsg");
sock = (struct sol_socket_struct *)current->files->fd[fd]->private_data; fdt = files_fdtable(current->files);
sock = (struct sol_socket_struct *)fdt->fd[fd]->private_data;
it->next = sock->pfirst; it->next = sock->pfirst;
sock->pfirst = it; sock->pfirst = it;
if (!sock->plast) if (!sock->plast)
...@@ -171,9 +175,11 @@ static void timod_queue(unsigned int fd, struct T_primsg *it) ...@@ -171,9 +175,11 @@ static void timod_queue(unsigned int fd, struct T_primsg *it)
static void timod_queue_end(unsigned int fd, struct T_primsg *it) static void timod_queue_end(unsigned int fd, struct T_primsg *it)
{ {
struct sol_socket_struct *sock; struct sol_socket_struct *sock;
struct fdtable *fdt;
SOLD("queuing primsg at end"); SOLD("queuing primsg at end");
sock = (struct sol_socket_struct *)current->files->fd[fd]->private_data; fdt = files_fdtable(current->files);
sock = (struct sol_socket_struct *)fdt->fd[fd]->private_data;
it->next = NULL; it->next = NULL;
if (sock->plast) if (sock->plast)
sock->plast->next = it; sock->plast->next = it;
...@@ -344,6 +350,7 @@ int timod_putmsg(unsigned int fd, char __user *ctl_buf, int ctl_len, ...@@ -344,6 +350,7 @@ int timod_putmsg(unsigned int fd, char __user *ctl_buf, int ctl_len,
char *buf; char *buf;
struct file *filp; struct file *filp;
struct inode *ino; struct inode *ino;
struct fdtable *fdt;
struct sol_socket_struct *sock; struct sol_socket_struct *sock;
mm_segment_t old_fs = get_fs(); mm_segment_t old_fs = get_fs();
long args[6]; long args[6];
...@@ -351,7 +358,9 @@ int timod_putmsg(unsigned int fd, char __user *ctl_buf, int ctl_len, ...@@ -351,7 +358,9 @@ int timod_putmsg(unsigned int fd, char __user *ctl_buf, int ctl_len,
(int (*)(int, unsigned long __user *))SYS(socketcall); (int (*)(int, unsigned long __user *))SYS(socketcall);
int (*sys_sendto)(int, void __user *, size_t, unsigned, struct sockaddr __user *, int) = int (*sys_sendto)(int, void __user *, size_t, unsigned, struct sockaddr __user *, int) =
(int (*)(int, void __user *, size_t, unsigned, struct sockaddr __user *, int))SYS(sendto); (int (*)(int, void __user *, size_t, unsigned, struct sockaddr __user *, int))SYS(sendto);
filp = current->files->fd[fd];
fdt = files_fdtable(current->files);
filp = fdt->fd[fd];
ino = filp->f_dentry->d_inode; ino = filp->f_dentry->d_inode;
sock = (struct sol_socket_struct *)filp->private_data; sock = (struct sol_socket_struct *)filp->private_data;
SOLD("entry"); SOLD("entry");
...@@ -620,6 +629,7 @@ int timod_getmsg(unsigned int fd, char __user *ctl_buf, int ctl_maxlen, s32 __us ...@@ -620,6 +629,7 @@ int timod_getmsg(unsigned int fd, char __user *ctl_buf, int ctl_maxlen, s32 __us
int oldflags; int oldflags;
struct file *filp; struct file *filp;
struct inode *ino; struct inode *ino;
struct fdtable *fdt;
struct sol_socket_struct *sock; struct sol_socket_struct *sock;
struct T_unitdata_ind udi; struct T_unitdata_ind udi;
mm_segment_t old_fs = get_fs(); mm_segment_t old_fs = get_fs();
...@@ -632,7 +642,8 @@ int timod_getmsg(unsigned int fd, char __user *ctl_buf, int ctl_maxlen, s32 __us ...@@ -632,7 +642,8 @@ int timod_getmsg(unsigned int fd, char __user *ctl_buf, int ctl_maxlen, s32 __us
SOLD("entry"); SOLD("entry");
SOLDD(("%u %p %d %p %p %d %p %d\n", fd, ctl_buf, ctl_maxlen, ctl_len, data_buf, data_maxlen, data_len, *flags_p)); SOLDD(("%u %p %d %p %p %d %p %d\n", fd, ctl_buf, ctl_maxlen, ctl_len, data_buf, data_maxlen, data_len, *flags_p));
filp = current->files->fd[fd]; fdt = files_fdtable(current->files);
filp = fdt->fd[fd];
ino = filp->f_dentry->d_inode; ino = filp->f_dentry->d_inode;
sock = (struct sol_socket_struct *)filp->private_data; sock = (struct sol_socket_struct *)filp->private_data;
SOLDD(("%p %p\n", sock->pfirst, sock->pfirst ? sock->pfirst->next : NULL)); SOLDD(("%p %p\n", sock->pfirst, sock->pfirst ? sock->pfirst->next : NULL));
...@@ -844,12 +855,14 @@ asmlinkage int solaris_getmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3) ...@@ -844,12 +855,14 @@ asmlinkage int solaris_getmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3)
int __user *flgptr; int __user *flgptr;
int flags; int flags;
int error = -EBADF; int error = -EBADF;
struct fdtable *fdt;
SOLD("entry"); SOLD("entry");
lock_kernel(); lock_kernel();
if(fd >= NR_OPEN) goto out; if(fd >= NR_OPEN) goto out;
filp = current->files->fd[fd]; fdt = files_fdtable(current->files);
filp = fdt->fd[fd];
if(!filp) goto out; if(!filp) goto out;
ino = filp->f_dentry->d_inode; ino = filp->f_dentry->d_inode;
...@@ -910,12 +923,14 @@ asmlinkage int solaris_putmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3) ...@@ -910,12 +923,14 @@ asmlinkage int solaris_putmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3)
struct strbuf ctl, dat; struct strbuf ctl, dat;
int flags = (int) arg3; int flags = (int) arg3;
int error = -EBADF; int error = -EBADF;
struct fdtable *fdt;
SOLD("entry"); SOLD("entry");
lock_kernel(); lock_kernel();
if(fd >= NR_OPEN) goto out; if(fd >= NR_OPEN) goto out;
filp = current->files->fd[fd]; fdt = files_fdtable(current->files);
filp = fdt->fd[fd];
if(!filp) goto out; if(!filp) goto out;
ino = filp->f_dentry->d_inode; ino = filp->f_dentry->d_inode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment