Commit 50bd3774 authored by Chao Yu's avatar Chao Yu Committed by NeilBrown

md: avoid potential long delay under pers_lock

printk may cause long time lapse if value of printk_delay in sysctl is
configured large by user. If register_md_personality takes long time to print in
spinlock pers_lock, we may encounter high CPU usage rate when there are other
pers_lock competitors who may be blocked to spin.
We can avoid this condition by moving printk out of coverage of pers_lock
spinlock.
Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 0638bb0e
...@@ -7187,9 +7187,10 @@ static const struct file_operations md_seq_fops = { ...@@ -7187,9 +7187,10 @@ static const struct file_operations md_seq_fops = {
int register_md_personality(struct md_personality *p) int register_md_personality(struct md_personality *p)
{ {
printk(KERN_INFO "md: %s personality registered for level %d\n",
p->name, p->level);
spin_lock(&pers_lock); spin_lock(&pers_lock);
list_add_tail(&p->list, &pers_list); list_add_tail(&p->list, &pers_list);
printk(KERN_INFO "md: %s personality registered for level %d\n", p->name, p->level);
spin_unlock(&pers_lock); spin_unlock(&pers_lock);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment