Commit 06ef3608 authored by Pavel Begunkov's avatar Pavel Begunkov Committed by Jens Axboe
Browse files

io_uring: simplify file ref tracking in submission state



Currently, file refs in struct io_submit_state are tracked with 2 vars:
@has_refs -- how many refs were initially taken
@used_refs -- number of refs used

Replace it with a single variable counting how many refs left at the
current moment.

Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 57f1a649
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -707,7 +707,6 @@ struct io_submit_state {
	struct file		*file;
	unsigned int		fd;
	unsigned int		has_refs;
	unsigned int		used_refs;
	unsigned int		ios_left;
};

@@ -2327,10 +2326,8 @@ static void io_iopoll_req_issued(struct io_kiocb *req)

static void __io_state_file_put(struct io_submit_state *state)
{
	int diff = state->has_refs - state->used_refs;

	if (diff)
		fput_many(state->file, diff);
	if (state->has_refs)
		fput_many(state->file, state->has_refs);
	state->file = NULL;
}

@@ -2352,7 +2349,7 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd)

	if (state->file) {
		if (state->fd == fd) {
			state->used_refs++;
			state->has_refs--;
			state->ios_left--;
			return state->file;
		}
@@ -2363,9 +2360,8 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd)
		return NULL;

	state->fd = fd;
	state->has_refs = state->ios_left;
	state->used_refs = 1;
	state->ios_left--;
	state->has_refs = state->ios_left;
	return state->file;
}