diff options
-rw-r--r-- | drivers/nvdimm/claim.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/nvdimm/claim.c b/drivers/nvdimm/claim.c index b3323c0697f6..ca6d572c48fc 100644 --- a/drivers/nvdimm/claim.c +++ b/drivers/nvdimm/claim.c | |||
@@ -243,7 +243,15 @@ static int nsio_rw_bytes(struct nd_namespace_common *ndns, | |||
243 | } | 243 | } |
244 | 244 | ||
245 | if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align))) { | 245 | if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align))) { |
246 | if (IS_ALIGNED(offset, 512) && IS_ALIGNED(size, 512)) { | 246 | /* |
247 | * FIXME: nsio_rw_bytes() may be called from atomic | ||
248 | * context in the btt case and nvdimm_clear_poison() | ||
249 | * takes a sleeping lock. Until the locking can be | ||
250 | * reworked this capability requires that the namespace | ||
251 | * is not claimed by btt. | ||
252 | */ | ||
253 | if (IS_ALIGNED(offset, 512) && IS_ALIGNED(size, 512) | ||
254 | && (!ndns->claim || !is_nd_btt(ndns->claim))) { | ||
247 | long cleared; | 255 | long cleared; |
248 | 256 | ||
249 | cleared = nvdimm_clear_poison(&ndns->dev, offset, size); | 257 | cleared = nvdimm_clear_poison(&ndns->dev, offset, size); |