Commit 6684cf42 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'pull-work.fd-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull file descriptor fix from Al Viro:
 "Fix for breakage in #work.fd this window"

* tag 'pull-work.fd-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  fix the breakage in close_fd_get_file() calling conventions change
parents 815b196c 40a19260
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1886,6 +1886,8 @@ static void binder_deferred_fd_close(int fd)
	init_task_work(&twcb->twork, binder_do_fd_close);
	twcb->file = close_fd_get_file(fd);
	if (twcb->file) {
		// pin it until binder_do_fd_close(); see comments there
		get_file(twcb->file);
		filp_close(twcb->file, current->files);
		task_work_add(current, &twcb->twork, TWA_RESUME);
	} else {
+1 −2
Original line number Diff line number Diff line
@@ -800,8 +800,7 @@ struct file *__close_fd_get_file(unsigned int fd)

/*
 * variant of close_fd that gets a ref on the file for later fput.
 * The caller must ensure that filp_close() called on the file, and then
 * an fput().
 * The caller must ensure that filp_close() called on the file.
 */
struct file *close_fd_get_file(unsigned int fd)
{
+1 −4
Original line number Diff line number Diff line
@@ -6010,7 +6010,7 @@ static int io_close(struct io_kiocb *req, unsigned int issue_flags)
	struct files_struct *files = current->files;
	struct io_close *close = &req->close;
	struct fdtable *fdt;
	struct file *file = NULL;
	struct file *file;
	int ret = -EBADF;

	if (req->close.file_slot) {
@@ -6029,7 +6029,6 @@ static int io_close(struct io_kiocb *req, unsigned int issue_flags)
			lockdep_is_held(&files->file_lock));
	if (!file || file->f_op == &io_uring_fops) {
		spin_unlock(&files->file_lock);
		file = NULL;
		goto err;
	}

@@ -6049,8 +6048,6 @@ static int io_close(struct io_kiocb *req, unsigned int issue_flags)
err:
	if (ret < 0)
		req_set_fail(req);
	if (file)
		fput(file);
	__io_req_complete(req, issue_flags, ret, 0);
	return 0;
}