On Sat 18-01-25 01:44:34, Al Viro wrote: > ["fallen through the cracks" misc stuff] > > A bunch of anon_inode_getfile() callers follow it with adjusting > ->f_mode; we have a helper doing that now, so let's make use > of it. > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Looks good to me. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > diff --git a/arch/powerpc/platforms/pseries/papr-vpd.c b/arch/powerpc/platforms/pseries/papr-vpd.c > index 1574176e3ffc..c86950d7105a 100644 > --- a/arch/powerpc/platforms/pseries/papr-vpd.c > +++ b/arch/powerpc/platforms/pseries/papr-vpd.c > @@ -482,14 +482,13 @@ static long papr_vpd_create_handle(struct papr_location_code __user *ulc) > goto free_blob; > } > > - file = anon_inode_getfile("[papr-vpd]", &papr_vpd_handle_ops, > - (void *)blob, O_RDONLY); > + file = anon_inode_getfile_fmode("[papr-vpd]", &papr_vpd_handle_ops, > + (void *)blob, O_RDONLY, > + FMODE_LSEEK | FMODE_PREAD); > if (IS_ERR(file)) { > err = PTR_ERR(file); > goto put_fd; > } > - > - file->f_mode |= FMODE_LSEEK | FMODE_PREAD; > fd_install(fd, file); > return fd; > put_fd: > diff --git a/drivers/vfio/group.c b/drivers/vfio/group.c > index 49559605177e..c321d442f0da 100644 > --- a/drivers/vfio/group.c > +++ b/drivers/vfio/group.c > @@ -266,24 +266,12 @@ static struct file *vfio_device_open_file(struct vfio_device *device) > if (ret) > goto err_free; > > - /* > - * We can't use anon_inode_getfd() because we need to modify > - * the f_mode flags directly to allow more than just ioctls > - */ > - filep = anon_inode_getfile("[vfio-device]", &vfio_device_fops, > - df, O_RDWR); > + filep = anon_inode_getfile_fmode("[vfio-device]", &vfio_device_fops, > + df, O_RDWR, FMODE_PREAD | FMODE_PWRITE); > if (IS_ERR(filep)) { > ret = PTR_ERR(filep); > goto err_close_device; > } > - > - /* > - * TODO: add an anon_inode interface to do this. > - * Appears to be missing by lack of need rather than > - * explicitly prevented. Now there's need. > - */ > - filep->f_mode |= (FMODE_PREAD | FMODE_PWRITE); > - > /* > * Use the pseudo fs inode on the device to link all mmaps > * to the same address space, allowing us to unmap all vmas > diff --git a/fs/cachefiles/ondemand.c b/fs/cachefiles/ondemand.c > index fe3de9ad57bf..d9bc67176128 100644 > --- a/fs/cachefiles/ondemand.c > +++ b/fs/cachefiles/ondemand.c > @@ -317,8 +317,9 @@ static int cachefiles_ondemand_get_fd(struct cachefiles_req *req, > goto err_free_id; > } > > - anon_file->file = anon_inode_getfile("[cachefiles]", > - &cachefiles_ondemand_fd_fops, object, O_WRONLY); > + anon_file->file = anon_inode_getfile_fmode("[cachefiles]", > + &cachefiles_ondemand_fd_fops, object, > + O_WRONLY, FMODE_PWRITE | FMODE_LSEEK); > if (IS_ERR(anon_file->file)) { > ret = PTR_ERR(anon_file->file); > goto err_put_fd; > @@ -333,8 +334,6 @@ static int cachefiles_ondemand_get_fd(struct cachefiles_req *req, > goto err_put_file; > } > > - anon_file->file->f_mode |= FMODE_PWRITE | FMODE_LSEEK; > - > load = (void *)req->msg.data; > load->fd = anon_file->fd; > object->ondemand->ondemand_id = object_id; > diff --git a/fs/eventfd.c b/fs/eventfd.c > index 76129bfcd663..af42b2c7d235 100644 > --- a/fs/eventfd.c > +++ b/fs/eventfd.c > @@ -406,14 +406,13 @@ static int do_eventfd(unsigned int count, int flags) > if (fd < 0) > goto err; > > - file = anon_inode_getfile("[eventfd]", &eventfd_fops, ctx, flags); > + file = anon_inode_getfile_fmode("[eventfd]", &eventfd_fops, > + ctx, flags, FMODE_NOWAIT); > if (IS_ERR(file)) { > put_unused_fd(fd); > fd = PTR_ERR(file); > goto err; > } > - > - file->f_mode |= FMODE_NOWAIT; > fd_install(fd, file); > return fd; > err: > diff --git a/fs/signalfd.c b/fs/signalfd.c > index d1a5f43ce466..d469782f97f4 100644 > --- a/fs/signalfd.c > +++ b/fs/signalfd.c > @@ -277,15 +277,14 @@ static int do_signalfd4(int ufd, sigset_t *mask, int flags) > return ufd; > } > > - file = anon_inode_getfile("[signalfd]", &signalfd_fops, ctx, > - O_RDWR | (flags & O_NONBLOCK)); > + file = anon_inode_getfile_fmode("[signalfd]", &signalfd_fops, > + ctx, O_RDWR | (flags & O_NONBLOCK), > + FMODE_NOWAIT); > if (IS_ERR(file)) { > put_unused_fd(ufd); > kfree(ctx); > return PTR_ERR(file); > } > - file->f_mode |= FMODE_NOWAIT; > - > fd_install(ufd, file); > } else { > CLASS(fd, f)(ufd); > diff --git a/fs/timerfd.c b/fs/timerfd.c > index 9f7eb451a60f..753e22e83e0f 100644 > --- a/fs/timerfd.c > +++ b/fs/timerfd.c > @@ -439,15 +439,15 @@ SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags) > return ufd; > } > > - file = anon_inode_getfile("[timerfd]", &timerfd_fops, ctx, > - O_RDWR | (flags & TFD_SHARED_FCNTL_FLAGS)); > + file = anon_inode_getfile_fmode("[timerfd]", &timerfd_fops, ctx, > + O_RDWR | (flags & TFD_SHARED_FCNTL_FLAGS), > + FMODE_NOWAIT); > if (IS_ERR(file)) { > put_unused_fd(ufd); > kfree(ctx); > return PTR_ERR(file); > } > > - file->f_mode |= FMODE_NOWAIT; > fd_install(ufd, file); > return ufd; > } > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index de2c11dae231..0ba0ffc4abc9 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -4222,15 +4222,14 @@ static int kvm_vcpu_ioctl_get_stats_fd(struct kvm_vcpu *vcpu) > if (fd < 0) > return fd; > > - file = anon_inode_getfile(name, &kvm_vcpu_stats_fops, vcpu, O_RDONLY); > + file = anon_inode_getfile_fmode(name, &kvm_vcpu_stats_fops, vcpu, > + O_RDONLY, FMODE_PREAD); > if (IS_ERR(file)) { > put_unused_fd(fd); > return PTR_ERR(file); > } > > kvm_get_kvm(vcpu->kvm); > - > - file->f_mode |= FMODE_PREAD; > fd_install(fd, file); > > return fd; > @@ -4982,16 +4981,14 @@ static int kvm_vm_ioctl_get_stats_fd(struct kvm *kvm) > if (fd < 0) > return fd; > > - file = anon_inode_getfile("kvm-vm-stats", > - &kvm_vm_stats_fops, kvm, O_RDONLY); > + file = anon_inode_getfile_fmode("kvm-vm-stats", > + &kvm_vm_stats_fops, kvm, O_RDONLY, FMODE_PREAD); > if (IS_ERR(file)) { > put_unused_fd(fd); > return PTR_ERR(file); > } > > kvm_get_kvm(kvm); > - > - file->f_mode |= FMODE_PREAD; > fd_install(fd, file); > > return fd; -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR