如"Linux IO并发拥塞控制机制分析-1"所述,在__get_request函数值中判断若符合拥塞条件则调用blk_set_congested 设置拥塞标志(同步与异步),这里所说的拥塞控制是指对单个磁盘的拥塞控制(单盘对应一个request_queue):
除了在_get_request函数中会判断是否设置拥塞标志,当用户在调整单盘并发IO个数(/sys/block/sda/queue/nr_requests)时,会根据所调整的值设置(或解除)拥塞状态:
清除拥塞标志的时机是在request处理完毕释放时,清除拥塞标志时,会判断如果有提交IO的线程因拥塞控制而睡眠会将其唤醒: