diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2024-06-01 00:48:50 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2024-11-03 01:28:06 -0500 |
commit | 54dac3dacc86e388e0cd3934cf2a0b6fc7a06323 (patch) | |
tree | 88678fadbc4b1d63c77fd0940038c41938a7fe11 | |
parent | 1aaf6a7e7520ea4d2d24406fb695195f554d1572 (diff) | |
download | lwn-54dac3dacc86e388e0cd3934cf2a0b6fc7a06323.tar.gz lwn-54dac3dacc86e388e0cd3934cf2a0b6fc7a06323.zip |
do_mq_notify(): switch to CLASS(fd)
The only failure exit before fdget() is a return, the only thing done
after fdput() is transposable with it.
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | ipc/mqueue.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 48640a362637..4f1dec518fae 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -1317,7 +1317,6 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr, static int do_mq_notify(mqd_t mqdes, const struct sigevent *notification) { int ret; - struct fd f; struct sock *sock; struct inode *inode; struct mqueue_inode_info *info; @@ -1370,8 +1369,8 @@ retry: } } - f = fdget(mqdes); - if (!fd_file(f)) { + CLASS(fd, f)(mqdes); + if (fd_empty(f)) { ret = -EBADF; goto out; } @@ -1379,7 +1378,7 @@ retry: inode = file_inode(fd_file(f)); if (unlikely(fd_file(f)->f_op != &mqueue_file_operations)) { ret = -EBADF; - goto out_fput; + goto out; } info = MQUEUE_I(inode); @@ -1418,8 +1417,6 @@ retry: inode_set_atime_to_ts(inode, inode_set_ctime_current(inode)); } spin_unlock(&info->lock); -out_fput: - fdput(f); out: if (sock) netlink_detachskb(sock, nc); |