1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-23 16:01:42 +00:00

cam iosched: Enforce iop limits below the quanta value

Previously the iops limiter would always allow at least
quanta ios per second as cam_iosched_iops_tick() never set
ios->l_value1 below 1.

Submitted by: Fabian Keil <fk@fabiankeil.de>
Obtained from: ElectroBSD
PR: 221974
This commit is contained in:
Warner Losh 2017-09-22 02:36:32 +00:00
parent cc05c7d256
commit f777123b83
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323893

View File

@ -415,6 +415,7 @@ cam_iosched_iops_init(struct iop_stats *ios)
ios->l_value1 = ios->current / ios->softc->quanta;
if (ios->l_value1 <= 0)
ios->l_value1 = 1;
ios->l_value2 = 0;
return 0;
}
@ -423,9 +424,18 @@ static int
cam_iosched_iops_tick(struct iop_stats *ios)
{
if ((ios->softc->total_ticks % ios->softc->quanta) == 0)
ios->l_value2 = 0;
ios->l_value1 = (int)((ios->current * (uint64_t)ios->softc->this_frac) >> 16);
if (ios->l_value1 <= 0)
/*
* Allow at least one IO per tick until all
* the IOs for this interval have been spent.
*/
if (ios->l_value1 <= 0 && ios->l_value2 < ios->current) {
ios->l_value1 = 1;
ios->l_value2++;
}
return 0;
}