switch simple cases of fget_light to fdget
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
84
ipc/mqueue.c
84
ipc/mqueue.c
@@ -944,7 +944,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
|
||||
size_t, msg_len, unsigned int, msg_prio,
|
||||
const struct timespec __user *, u_abs_timeout)
|
||||
{
|
||||
struct file *filp;
|
||||
struct fd f;
|
||||
struct inode *inode;
|
||||
struct ext_wait_queue wait;
|
||||
struct ext_wait_queue *receiver;
|
||||
@@ -953,7 +953,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
|
||||
ktime_t expires, *timeout = NULL;
|
||||
struct timespec ts;
|
||||
struct posix_msg_tree_node *new_leaf = NULL;
|
||||
int ret = 0, fput_needed;
|
||||
int ret = 0;
|
||||
|
||||
if (u_abs_timeout) {
|
||||
int res = prepare_timeout(u_abs_timeout, &expires, &ts);
|
||||
@@ -967,21 +967,21 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
|
||||
|
||||
audit_mq_sendrecv(mqdes, msg_len, msg_prio, timeout ? &ts : NULL);
|
||||
|
||||
filp = fget_light(mqdes, &fput_needed);
|
||||
if (unlikely(!filp)) {
|
||||
f = fdget(mqdes);
|
||||
if (unlikely(!f.file)) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = filp->f_path.dentry->d_inode;
|
||||
if (unlikely(filp->f_op != &mqueue_file_operations)) {
|
||||
inode = f.file->f_path.dentry->d_inode;
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
info = MQUEUE_I(inode);
|
||||
audit_inode(NULL, filp->f_path.dentry);
|
||||
audit_inode(NULL, f.file->f_path.dentry);
|
||||
|
||||
if (unlikely(!(filp->f_mode & FMODE_WRITE))) {
|
||||
if (unlikely(!(f.file->f_mode & FMODE_WRITE))) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1023,7 +1023,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
|
||||
}
|
||||
|
||||
if (info->attr.mq_curmsgs == info->attr.mq_maxmsg) {
|
||||
if (filp->f_flags & O_NONBLOCK) {
|
||||
if (f.file->f_flags & O_NONBLOCK) {
|
||||
ret = -EAGAIN;
|
||||
} else {
|
||||
wait.task = current;
|
||||
@@ -1056,7 +1056,7 @@ out_free:
|
||||
if (ret)
|
||||
free_msg(msg_ptr);
|
||||
out_fput:
|
||||
fput_light(filp, fput_needed);
|
||||
fdput(f);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
@@ -1067,14 +1067,13 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
|
||||
{
|
||||
ssize_t ret;
|
||||
struct msg_msg *msg_ptr;
|
||||
struct file *filp;
|
||||
struct fd f;
|
||||
struct inode *inode;
|
||||
struct mqueue_inode_info *info;
|
||||
struct ext_wait_queue wait;
|
||||
ktime_t expires, *timeout = NULL;
|
||||
struct timespec ts;
|
||||
struct posix_msg_tree_node *new_leaf = NULL;
|
||||
int fput_needed;
|
||||
|
||||
if (u_abs_timeout) {
|
||||
int res = prepare_timeout(u_abs_timeout, &expires, &ts);
|
||||
@@ -1085,21 +1084,21 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
|
||||
|
||||
audit_mq_sendrecv(mqdes, msg_len, 0, timeout ? &ts : NULL);
|
||||
|
||||
filp = fget_light(mqdes, &fput_needed);
|
||||
if (unlikely(!filp)) {
|
||||
f = fdget(mqdes);
|
||||
if (unlikely(!f.file)) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = filp->f_path.dentry->d_inode;
|
||||
if (unlikely(filp->f_op != &mqueue_file_operations)) {
|
||||
inode = f.file->f_path.dentry->d_inode;
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
info = MQUEUE_I(inode);
|
||||
audit_inode(NULL, filp->f_path.dentry);
|
||||
audit_inode(NULL, f.file->f_path.dentry);
|
||||
|
||||
if (unlikely(!(filp->f_mode & FMODE_READ))) {
|
||||
if (unlikely(!(f.file->f_mode & FMODE_READ))) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1131,7 +1130,7 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
|
||||
}
|
||||
|
||||
if (info->attr.mq_curmsgs == 0) {
|
||||
if (filp->f_flags & O_NONBLOCK) {
|
||||
if (f.file->f_flags & O_NONBLOCK) {
|
||||
spin_unlock(&info->lock);
|
||||
ret = -EAGAIN;
|
||||
} else {
|
||||
@@ -1161,7 +1160,7 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
|
||||
free_msg(msg_ptr);
|
||||
}
|
||||
out_fput:
|
||||
fput_light(filp, fput_needed);
|
||||
fdput(f);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
@@ -1174,8 +1173,8 @@ out:
|
||||
SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
|
||||
const struct sigevent __user *, u_notification)
|
||||
{
|
||||
int ret, fput_needed;
|
||||
struct file *filp;
|
||||
int ret;
|
||||
struct fd f;
|
||||
struct sock *sock;
|
||||
struct inode *inode;
|
||||
struct sigevent notification;
|
||||
@@ -1221,13 +1220,13 @@ SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
|
||||
skb_put(nc, NOTIFY_COOKIE_LEN);
|
||||
/* and attach it to the socket */
|
||||
retry:
|
||||
filp = fget_light(notification.sigev_signo, &fput_needed);
|
||||
if (!filp) {
|
||||
f = fdget(notification.sigev_signo);
|
||||
if (!f.file) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
sock = netlink_getsockbyfilp(filp);
|
||||
fput_light(filp, fput_needed);
|
||||
sock = netlink_getsockbyfilp(f.file);
|
||||
fdput(f);
|
||||
if (IS_ERR(sock)) {
|
||||
ret = PTR_ERR(sock);
|
||||
sock = NULL;
|
||||
@@ -1246,14 +1245,14 @@ retry:
|
||||
}
|
||||
}
|
||||
|
||||
filp = fget_light(mqdes, &fput_needed);
|
||||
if (!filp) {
|
||||
f = fdget(mqdes);
|
||||
if (!f.file) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = filp->f_path.dentry->d_inode;
|
||||
if (unlikely(filp->f_op != &mqueue_file_operations)) {
|
||||
inode = f.file->f_path.dentry->d_inode;
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1293,7 +1292,7 @@ retry:
|
||||
}
|
||||
spin_unlock(&info->lock);
|
||||
out_fput:
|
||||
fput_light(filp, fput_needed);
|
||||
fdput(f);
|
||||
out:
|
||||
if (sock) {
|
||||
netlink_detachskb(sock, nc);
|
||||
@@ -1309,8 +1308,7 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
|
||||
{
|
||||
int ret;
|
||||
struct mq_attr mqstat, omqstat;
|
||||
int fput_needed;
|
||||
struct file *filp;
|
||||
struct fd f;
|
||||
struct inode *inode;
|
||||
struct mqueue_inode_info *info;
|
||||
|
||||
@@ -1321,14 +1319,14 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
filp = fget_light(mqdes, &fput_needed);
|
||||
if (!filp) {
|
||||
f = fdget(mqdes);
|
||||
if (!f.file) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = filp->f_path.dentry->d_inode;
|
||||
if (unlikely(filp->f_op != &mqueue_file_operations)) {
|
||||
inode = f.file->f_path.dentry->d_inode;
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1337,15 +1335,15 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
|
||||
spin_lock(&info->lock);
|
||||
|
||||
omqstat = info->attr;
|
||||
omqstat.mq_flags = filp->f_flags & O_NONBLOCK;
|
||||
omqstat.mq_flags = f.file->f_flags & O_NONBLOCK;
|
||||
if (u_mqstat) {
|
||||
audit_mq_getsetattr(mqdes, &mqstat);
|
||||
spin_lock(&filp->f_lock);
|
||||
spin_lock(&f.file->f_lock);
|
||||
if (mqstat.mq_flags & O_NONBLOCK)
|
||||
filp->f_flags |= O_NONBLOCK;
|
||||
f.file->f_flags |= O_NONBLOCK;
|
||||
else
|
||||
filp->f_flags &= ~O_NONBLOCK;
|
||||
spin_unlock(&filp->f_lock);
|
||||
f.file->f_flags &= ~O_NONBLOCK;
|
||||
spin_unlock(&f.file->f_lock);
|
||||
|
||||
inode->i_atime = inode->i_ctime = CURRENT_TIME;
|
||||
}
|
||||
@@ -1358,7 +1356,7 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
|
||||
ret = -EFAULT;
|
||||
|
||||
out_fput:
|
||||
fput_light(filp, fput_needed);
|
||||
fdput(f);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user