Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- sound/core/compress_offload.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index 23d62fede06e..94bc226f8db9 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c @@ -1065,7 +1065,8 @@ static u64 snd_compr_seqno_next(struct snd_compr_stream *stream) static int snd_compr_task_new(struct snd_compr_stream *stream, struct snd_compr_task *utask) { struct snd_compr_task_runtime *task; - int retval, fd_i, fd_o; + int retval; + const struct fd_slot *fd_i, *fd_o; if (stream->runtime->total_tasks >= stream->runtime->fragments) return -EBUSY; @@ -1080,29 +1081,26 @@ static int snd_compr_task_new(struct snd_compr_stream *stream, struct snd_compr_ if (retval < 0) goto cleanup; /* similar functionality as in dma_buf_fd(), but ensure that both - file descriptors are allocated before fd_install() */ + file descriptors are reserved before either is staged */ if (!task->input || !task->input->file || !task->output || !task->output->file) { retval = -EINVAL; goto free_driver_task; } - fd_i = get_unused_fd_flags(O_WRONLY|O_CLOEXEC); - if (fd_i < 0) { - retval = fd_i; + fd_i = fd_prepare(O_WRONLY|O_CLOEXEC); + if (IS_ERR(fd_i)) { + retval = PTR_ERR(fd_i); goto free_driver_task; } - fd_o = get_unused_fd_flags(O_RDONLY|O_CLOEXEC); - if (fd_o < 0) { - retval = fd_o; - put_unused_fd(fd_i); + fd_o = fd_prepare(O_RDONLY|O_CLOEXEC); + if (IS_ERR(fd_o)) { + retval = PTR_ERR(fd_o); goto free_driver_task; } /* keep dmabuf reference until freed with task free ioctl */ get_dma_buf(task->input); get_dma_buf(task->output); - fd_install(fd_i, task->input->file); - fd_install(fd_o, task->output->file); - utask->input_fd = fd_i; - utask->output_fd = fd_o; + utask->input_fd = fd_stage(fd_i, task->input->file); + utask->output_fd = fd_stage(fd_o, task->output->file); list_add_tail(&task->list, &stream->runtime->tasks); stream->runtime->total_tasks++; return 0; -- 2.53.0