mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
pblk: fix max_io calculation
When calculating the maximun I/O size allowed into the buffer, consider the write size (ws_opt) used by the write thread in order to cover the case in which, due to flushes, the mem and subm pointers are disaligned by (ws_opt - 1). This case currently translates into a stall when an I/O of the largest possible size is submitted. Fixes: f9f9d1ae2c66 ("lightnvm: pblk: prevent stall due to wb threshold") Signed-off-by: Javier González <javier@javigon.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
05b700ba60
commit
9205e44916
@@ -233,10 +233,15 @@ void pblk_rl_init(struct pblk_rl *rl, int budget, int threshold)
|
|||||||
/* To start with, all buffer is available to user I/O writers */
|
/* To start with, all buffer is available to user I/O writers */
|
||||||
rl->rb_budget = budget;
|
rl->rb_budget = budget;
|
||||||
rl->rb_user_max = budget;
|
rl->rb_user_max = budget;
|
||||||
rl->rb_max_io = threshold ? (budget - threshold) : (budget - 1);
|
|
||||||
rl->rb_gc_max = 0;
|
rl->rb_gc_max = 0;
|
||||||
rl->rb_state = PBLK_RL_HIGH;
|
rl->rb_state = PBLK_RL_HIGH;
|
||||||
|
|
||||||
|
/* Maximize I/O size and ansure that back threshold is respected */
|
||||||
|
if (threshold)
|
||||||
|
rl->rb_max_io = budget - pblk->min_write_pgs_data - threshold;
|
||||||
|
else
|
||||||
|
rl->rb_max_io = budget - pblk->min_write_pgs_data - 1;
|
||||||
|
|
||||||
atomic_set(&rl->rb_user_cnt, 0);
|
atomic_set(&rl->rb_user_cnt, 0);
|
||||||
atomic_set(&rl->rb_gc_cnt, 0);
|
atomic_set(&rl->rb_gc_cnt, 0);
|
||||||
atomic_set(&rl->rb_space, -1);
|
atomic_set(&rl->rb_space, -1);
|
||||||
|
Reference in New Issue
Block a user