Loading drivers/md/raid5-cache.c +3 −3 Original line number Diff line number Diff line Loading @@ -1327,9 +1327,9 @@ static void r5l_write_super_and_discard_space(struct r5l_log *log, * superblock is updated to new log tail. Updating superblock (either * directly call md_update_sb() or depend on md thread) must hold * reconfig mutex. On the other hand, raid5_quiesce is called with * reconfig_mutex hold. The first step of raid5_quiesce() is waitting * for all IO finish, hence waitting for reclaim thread, while reclaim * thread is calling this function and waitting for reconfig mutex. So * reconfig_mutex hold. The first step of raid5_quiesce() is waiting * for all IO finish, hence waiting for reclaim thread, while reclaim * thread is calling this function and waiting for reconfig mutex. So * there is a deadlock. We workaround this issue with a trylock. * FIXME: we could miss discard if we can't take reconfig mutex */ Loading Loading
drivers/md/raid5-cache.c +3 −3 Original line number Diff line number Diff line Loading @@ -1327,9 +1327,9 @@ static void r5l_write_super_and_discard_space(struct r5l_log *log, * superblock is updated to new log tail. Updating superblock (either * directly call md_update_sb() or depend on md thread) must hold * reconfig mutex. On the other hand, raid5_quiesce is called with * reconfig_mutex hold. The first step of raid5_quiesce() is waitting * for all IO finish, hence waitting for reclaim thread, while reclaim * thread is calling this function and waitting for reconfig mutex. So * reconfig_mutex hold. The first step of raid5_quiesce() is waiting * for all IO finish, hence waiting for reclaim thread, while reclaim * thread is calling this function and waiting for reconfig mutex. So * there is a deadlock. We workaround this issue with a trylock. * FIXME: we could miss discard if we can't take reconfig mutex */ Loading