md_do_sync() \_ md_wakeup_thread() /* raid5d */ \_ raid5d()\_ md_check_recovery()\_ md_reap_sync_thread()\_ raid5_spare_active()
代码逻辑如下:
static int raid5_spare_active(struct mddev *mddev){ int i; struct r5conf *conf = mddev->private; struct disk_info *tmp; int count = 0; unsigned long flags; for (i = 0; i < conf->raid_disks; i++) {tmp = conf->disks + i;/* test_and_set_bit中设置成员磁盘状态为In_sync,即处于同步状态 */if (tmp->rdev&& tmp->rdev->recovery_offset == MaxSector&& !test_bit(Faulty, &tmp->rdev->flags)&& !test_and_set_bit(In_sync, &tmp->rdev->flags)) {count++;sysfs_notify_dirent_safe(tmp->rdev->sysfs_state);} } /* 计算md降级状态 */ spin_lock_irqsave(&conf->device_lock, flags); mddev->degraded = calc_degraded(conf); spin_unlock_irqrestore(&conf->device_lock, flags); return count;}
推荐阅读
- RAID5 IO处理之写请求代码详解
- RAID5 IO处理之replace代码详解
- Linux Block模块之deadline调度算法代码解析
- Linux Block模块之IO合并代码解析
- 【强烈推荐】用glob库的一行命令显著加速批量读取处理数据
- redis bitmap数据结构之java对等操作
- 一加9r参数_一加9r搭载什么处理器
- 苹果处理器a11a12区别_苹果处理器a11和a12区别大吗
- 奔腾处理器和i5哪个好-英特尔奔腾处理器和酷睿i5处理器哪个好
- 云原生时代的DevOps平台设计之道