fix for breakage in #work.fd this window
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQqUNBr3gm4hGXdBJlZ7Krx/gZQ6wUCYpz/IQAKCRBZ7Krx/gZQ 666mAPwKOC/voemjl2m+RpSruxAbdlRvKei3IY8YxLfyv+rmUQD9HKLJJtQX2VRF QTFmQ3p7kx30ydwSbyY8Kpw3VMCDxgs= =1ZKm -----END PGP SIGNATURE----- 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
This commit is contained in:
Коммит
6684cf4290
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче