io_uring: unify fsize with def->work_flags
This one was missed in the earlier conversion, should be included like
any of the other IO identity flags. Make sure we restore to RLIM_INIFITY
when dropping the personality again.
Fixes: 98447d65b4
("io_uring: move io identity items into separate struct")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
@@ -753,8 +753,6 @@ struct io_op_def {
|
||||
unsigned pollout : 1;
|
||||
/* op supports buffer selection */
|
||||
unsigned buffer_select : 1;
|
||||
/* needs rlimit(RLIMIT_FSIZE) assigned */
|
||||
unsigned needs_fsize : 1;
|
||||
/* must always have async data allocated */
|
||||
unsigned needs_async_data : 1;
|
||||
/* size of async data needed, if any */
|
||||
@@ -778,10 +776,10 @@ static const struct io_op_def io_op_defs[] = {
|
||||
.hash_reg_file = 1,
|
||||
.unbound_nonreg_file = 1,
|
||||
.pollout = 1,
|
||||
.needs_fsize = 1,
|
||||
.needs_async_data = 1,
|
||||
.async_size = sizeof(struct io_async_rw),
|
||||
.work_flags = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG,
|
||||
.work_flags = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
|
||||
IO_WQ_WORK_FSIZE,
|
||||
},
|
||||
[IORING_OP_FSYNC] = {
|
||||
.needs_file = 1,
|
||||
@@ -799,9 +797,8 @@ static const struct io_op_def io_op_defs[] = {
|
||||
.hash_reg_file = 1,
|
||||
.unbound_nonreg_file = 1,
|
||||
.pollout = 1,
|
||||
.needs_fsize = 1,
|
||||
.async_size = sizeof(struct io_async_rw),
|
||||
.work_flags = IO_WQ_WORK_BLKCG,
|
||||
.work_flags = IO_WQ_WORK_BLKCG | IO_WQ_WORK_FSIZE,
|
||||
},
|
||||
[IORING_OP_POLL_ADD] = {
|
||||
.needs_file = 1,
|
||||
@@ -859,8 +856,7 @@ static const struct io_op_def io_op_defs[] = {
|
||||
},
|
||||
[IORING_OP_FALLOCATE] = {
|
||||
.needs_file = 1,
|
||||
.needs_fsize = 1,
|
||||
.work_flags = IO_WQ_WORK_BLKCG,
|
||||
.work_flags = IO_WQ_WORK_BLKCG | IO_WQ_WORK_FSIZE,
|
||||
},
|
||||
[IORING_OP_OPENAT] = {
|
||||
.work_flags = IO_WQ_WORK_FILES | IO_WQ_WORK_BLKCG |
|
||||
@@ -890,9 +886,9 @@ static const struct io_op_def io_op_defs[] = {
|
||||
.needs_file = 1,
|
||||
.unbound_nonreg_file = 1,
|
||||
.pollout = 1,
|
||||
.needs_fsize = 1,
|
||||
.async_size = sizeof(struct io_async_rw),
|
||||
.work_flags = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG,
|
||||
.work_flags = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
|
||||
IO_WQ_WORK_FSIZE,
|
||||
},
|
||||
[IORING_OP_FADVISE] = {
|
||||
.needs_file = 1,
|
||||
@@ -1293,8 +1289,11 @@ static bool io_grab_identity(struct io_kiocb *req)
|
||||
struct io_identity *id = req->work.identity;
|
||||
struct io_ring_ctx *ctx = req->ctx;
|
||||
|
||||
if (def->needs_fsize && id->fsize != rlimit(RLIMIT_FSIZE))
|
||||
return false;
|
||||
if (def->work_flags & IO_WQ_WORK_FSIZE) {
|
||||
if (id->fsize != rlimit(RLIMIT_FSIZE))
|
||||
return false;
|
||||
req->work.flags |= IO_WQ_WORK_FSIZE;
|
||||
}
|
||||
|
||||
if (!(req->work.flags & IO_WQ_WORK_FILES) &&
|
||||
(def->work_flags & IO_WQ_WORK_FILES) &&
|
||||
|
Reference in New Issue
Block a user