summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2014-05-22 00:23:19 +0200
committerH. Peter Anvin <hpa@linux.intel.com>2014-05-22 00:23:19 +0200
commite6ab9a20e73e790d47e6aa231fcf66f27b6ce3d4 (patch)
tree6a41361e1de2a6693ccae96b99307e79a467236f /block
parentx86, espfix: Make it possible to disable 16-bit support (diff)
parentRevert "x86-64, modify_ldt: Make support for 16-bit segments a runtime option" (diff)
downloadlinux-e6ab9a20e73e790d47e6aa231fcf66f27b6ce3d4.tar.xz
linux-e6ab9a20e73e790d47e6aa231fcf66f27b6ce3d4.zip
Merge commit '7ed6fb9b5a5510e4ef78ab27419184741169978a' into x86/espfix
Merge in Linus' tree with: fa81511bb0bb x86-64, modify_ldt: Make support for 16-bit segments a runtime option ... reverted, to avoid a conflict. This commit is no longer necessary with the proper fix in place. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'block')
-rw-r--r--block/blk-cgroup.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index e4a4145926f6..1039fb9ff5f5 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -451,7 +451,20 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css,
struct blkcg_gq *blkg;
int i;
- mutex_lock(&blkcg_pol_mutex);
+ /*
+ * XXX: We invoke cgroup_add/rm_cftypes() under blkcg_pol_mutex
+ * which ends up putting cgroup's internal cgroup_tree_mutex under
+ * it; however, cgroup_tree_mutex is nested above cgroup file
+ * active protection and grabbing blkcg_pol_mutex from a cgroup
+ * file operation creates a possible circular dependency. cgroup
+ * internal locking is planned to go through further simplification
+ * and this issue should go away soon. For now, let's trylock
+ * blkcg_pol_mutex and restart the write on failure.
+ *
+ * http://lkml.kernel.org/g/5363C04B.4010400@oracle.com
+ */
+ if (!mutex_trylock(&blkcg_pol_mutex))
+ return restart_syscall();
spin_lock_irq(&blkcg->lock);
/*