mirror of https://gitee.com/openkylin/linux.git
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: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
57f1a64958
commit
06ef3608b0
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue