summaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2016-08-25 19:09:39 +0200
committerShaohua Li <shli@fb.com>2016-08-31 18:05:18 +0200
commit8e018c21da3febb558586b48c8db0d6d66cb6593 (patch)
tree70d8d62900570c7cade6a7554236f0014ee1e43e /drivers/gpio
parentMerge tag 'md/4.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md (diff)
downloadlinux-8e018c21da3febb558586b48c8db0d6d66cb6593.tar.xz
linux-8e018c21da3febb558586b48c8db0d6d66cb6593.zip
raid5-cache: fix a deadlock in superblock write
There is a potential deadlock in superblock write. Discard could zero data, so before discard we must make sure 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 there is a deadlock. We workaround this issue with a trylock. The downside of the solution is we could miss discard if we can't take reconfig mutex. But this should happen rarely (mainly in raid array stop), so miss discard shouldn't be a big problem. Cc: NeilBrown <neilb@suse.com> Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/gpio')
0 files changed, 0 insertions, 0 deletions