mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 12:14:01 +08:00
io-wq: fix max-workers not correctly set on multi-node system
In io-wq.c:io_wq_max_workers(), new_count[] was changed right after each
node's value was set. This caused the following node getting the setting
of the previous one.
Returned values are copied from node 0.
Fixes: 2e480058dd
("io-wq: provide a way to limit max number of workers")
Signed-off-by: Beld Zhang <beldzhang@gmail.com>
[axboe: minor fixups]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
9881024aab
commit
71c9ce27bb
16
fs/io-wq.c
16
fs/io-wq.c
@ -1308,7 +1308,9 @@ int io_wq_cpu_affinity(struct io_wq *wq, cpumask_var_t mask)
|
||||
*/
|
||||
int io_wq_max_workers(struct io_wq *wq, int *new_count)
|
||||
{
|
||||
int i, node, prev = 0;
|
||||
int prev[IO_WQ_ACCT_NR];
|
||||
bool first_node = true;
|
||||
int i, node;
|
||||
|
||||
BUILD_BUG_ON((int) IO_WQ_ACCT_BOUND != (int) IO_WQ_BOUND);
|
||||
BUILD_BUG_ON((int) IO_WQ_ACCT_UNBOUND != (int) IO_WQ_UNBOUND);
|
||||
@ -1319,6 +1321,9 @@ int io_wq_max_workers(struct io_wq *wq, int *new_count)
|
||||
new_count[i] = task_rlimit(current, RLIMIT_NPROC);
|
||||
}
|
||||
|
||||
for (i = 0; i < IO_WQ_ACCT_NR; i++)
|
||||
prev[i] = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
for_each_node(node) {
|
||||
struct io_wqe *wqe = wq->wqes[node];
|
||||
@ -1327,14 +1332,19 @@ int io_wq_max_workers(struct io_wq *wq, int *new_count)
|
||||
raw_spin_lock(&wqe->lock);
|
||||
for (i = 0; i < IO_WQ_ACCT_NR; i++) {
|
||||
acct = &wqe->acct[i];
|
||||
prev = max_t(int, acct->max_workers, prev);
|
||||
if (first_node)
|
||||
prev[i] = max_t(int, acct->max_workers, prev[i]);
|
||||
if (new_count[i])
|
||||
acct->max_workers = new_count[i];
|
||||
new_count[i] = prev;
|
||||
}
|
||||
raw_spin_unlock(&wqe->lock);
|
||||
first_node = false;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
for (i = 0; i < IO_WQ_ACCT_NR; i++)
|
||||
new_count[i] = prev[i];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user