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

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
...@@ -707,7 +707,6 @@ struct io_submit_state { ...@@ -707,7 +707,6 @@ struct io_submit_state {
struct file *file; struct file *file;
unsigned int fd; unsigned int fd;
unsigned int has_refs; unsigned int has_refs;
unsigned int used_refs;
unsigned int ios_left; unsigned int ios_left;
}; };
...@@ -2327,10 +2326,8 @@ static void io_iopoll_req_issued(struct io_kiocb *req) ...@@ -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) static void __io_state_file_put(struct io_submit_state *state)
{ {
int diff = state->has_refs - state->used_refs; if (state->has_refs)
fput_many(state->file, state->has_refs);
if (diff)
fput_many(state->file, diff);
state->file = NULL; state->file = NULL;
} }
...@@ -2352,7 +2349,7 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd) ...@@ -2352,7 +2349,7 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd)
if (state->file) { if (state->file) {
if (state->fd == fd) { if (state->fd == fd) {
state->used_refs++; state->has_refs--;
state->ios_left--; state->ios_left--;
return state->file; return state->file;
} }
...@@ -2363,9 +2360,8 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd) ...@@ -2363,9 +2360,8 @@ static struct file *__io_file_get(struct io_submit_state *state, int fd)
return NULL; return NULL;
state->fd = fd; state->fd = fd;
state->has_refs = state->ios_left;
state->used_refs = 1;
state->ios_left--; state->ios_left--;
state->has_refs = state->ios_left;
return state->file; return state->file;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment