mirror of
https://github.com/torvalds/linux.git
synced 2025-12-01 07:26:02 +07:00
introduce fd_file(), convert all accessors to it.
For any changes of struct fd representation we need to
turn existing accesses to fields into calls of wrappers.
Accesses to struct fd::flags are very few (3 in linux/file.h,
1 in net/socket.c, 3 in fs/overlayfs/file.c and 3 more in
explicit initializers).
Those can be dealt with in the commit converting to
new layout; accesses to struct fd::file are too many for that.
This commit converts (almost) all of f.file to
fd_file(f). It's not entirely mechanical ('file' is used as
a member name more than just in struct fd) and it does not
even attempt to distinguish the uses in pointer context from
those in boolean context; the latter will be eventually turned
into a separate helper (fd_empty()).
NOTE: mass conversion to fd_empty(), tempting as it
might be, is a bad idea; better do that piecewise in commit
that convert from fdget...() to CLASS(...).
[conflicts in fs/fhandle.c, kernel/bpf/syscall.c, mm/memcontrol.c
caught by git; fs/stat.c one got caught by git grep]
[fs/xattr.c conflict]
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
50
ipc/mqueue.c
50
ipc/mqueue.c
@@ -1085,20 +1085,20 @@ static int do_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
|
||||
audit_mq_sendrecv(mqdes, msg_len, msg_prio, ts);
|
||||
|
||||
f = fdget(mqdes);
|
||||
if (unlikely(!f.file)) {
|
||||
if (unlikely(!fd_file(f))) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = file_inode(f.file);
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
inode = file_inode(fd_file(f));
|
||||
if (unlikely(fd_file(f)->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
info = MQUEUE_I(inode);
|
||||
audit_file(f.file);
|
||||
audit_file(fd_file(f));
|
||||
|
||||
if (unlikely(!(f.file->f_mode & FMODE_WRITE))) {
|
||||
if (unlikely(!(fd_file(f)->f_mode & FMODE_WRITE))) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1138,7 +1138,7 @@ static int do_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
|
||||
}
|
||||
|
||||
if (info->attr.mq_curmsgs == info->attr.mq_maxmsg) {
|
||||
if (f.file->f_flags & O_NONBLOCK) {
|
||||
if (fd_file(f)->f_flags & O_NONBLOCK) {
|
||||
ret = -EAGAIN;
|
||||
} else {
|
||||
wait.task = current;
|
||||
@@ -1199,20 +1199,20 @@ static int do_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
|
||||
audit_mq_sendrecv(mqdes, msg_len, 0, ts);
|
||||
|
||||
f = fdget(mqdes);
|
||||
if (unlikely(!f.file)) {
|
||||
if (unlikely(!fd_file(f))) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = file_inode(f.file);
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
inode = file_inode(fd_file(f));
|
||||
if (unlikely(fd_file(f)->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
info = MQUEUE_I(inode);
|
||||
audit_file(f.file);
|
||||
audit_file(fd_file(f));
|
||||
|
||||
if (unlikely(!(f.file->f_mode & FMODE_READ))) {
|
||||
if (unlikely(!(fd_file(f)->f_mode & FMODE_READ))) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1242,7 +1242,7 @@ static int do_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
|
||||
}
|
||||
|
||||
if (info->attr.mq_curmsgs == 0) {
|
||||
if (f.file->f_flags & O_NONBLOCK) {
|
||||
if (fd_file(f)->f_flags & O_NONBLOCK) {
|
||||
spin_unlock(&info->lock);
|
||||
ret = -EAGAIN;
|
||||
} else {
|
||||
@@ -1356,11 +1356,11 @@ static int do_mq_notify(mqd_t mqdes, const struct sigevent *notification)
|
||||
/* and attach it to the socket */
|
||||
retry:
|
||||
f = fdget(notification->sigev_signo);
|
||||
if (!f.file) {
|
||||
if (!fd_file(f)) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
sock = netlink_getsockbyfilp(f.file);
|
||||
sock = netlink_getsockbyfilp(fd_file(f));
|
||||
fdput(f);
|
||||
if (IS_ERR(sock)) {
|
||||
ret = PTR_ERR(sock);
|
||||
@@ -1379,13 +1379,13 @@ retry:
|
||||
}
|
||||
|
||||
f = fdget(mqdes);
|
||||
if (!f.file) {
|
||||
if (!fd_file(f)) {
|
||||
ret = -EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = file_inode(f.file);
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
inode = file_inode(fd_file(f));
|
||||
if (unlikely(fd_file(f)->f_op != &mqueue_file_operations)) {
|
||||
ret = -EBADF;
|
||||
goto out_fput;
|
||||
}
|
||||
@@ -1460,31 +1460,31 @@ static int do_mq_getsetattr(int mqdes, struct mq_attr *new, struct mq_attr *old)
|
||||
return -EINVAL;
|
||||
|
||||
f = fdget(mqdes);
|
||||
if (!f.file)
|
||||
if (!fd_file(f))
|
||||
return -EBADF;
|
||||
|
||||
if (unlikely(f.file->f_op != &mqueue_file_operations)) {
|
||||
if (unlikely(fd_file(f)->f_op != &mqueue_file_operations)) {
|
||||
fdput(f);
|
||||
return -EBADF;
|
||||
}
|
||||
|
||||
inode = file_inode(f.file);
|
||||
inode = file_inode(fd_file(f));
|
||||
info = MQUEUE_I(inode);
|
||||
|
||||
spin_lock(&info->lock);
|
||||
|
||||
if (old) {
|
||||
*old = info->attr;
|
||||
old->mq_flags = f.file->f_flags & O_NONBLOCK;
|
||||
old->mq_flags = fd_file(f)->f_flags & O_NONBLOCK;
|
||||
}
|
||||
if (new) {
|
||||
audit_mq_getsetattr(mqdes, new);
|
||||
spin_lock(&f.file->f_lock);
|
||||
spin_lock(&fd_file(f)->f_lock);
|
||||
if (new->mq_flags & O_NONBLOCK)
|
||||
f.file->f_flags |= O_NONBLOCK;
|
||||
fd_file(f)->f_flags |= O_NONBLOCK;
|
||||
else
|
||||
f.file->f_flags &= ~O_NONBLOCK;
|
||||
spin_unlock(&f.file->f_lock);
|
||||
fd_file(f)->f_flags &= ~O_NONBLOCK;
|
||||
spin_unlock(&fd_file(f)->f_lock);
|
||||
|
||||
inode_set_atime_to_ts(inode, inode_set_ctime_current(inode));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user