summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishal Verma <vishal.l.verma@intel.com>2018-03-05 18:56:13 -0500
committerDan Williams <dan.j.williams@intel.com>2018-03-07 16:50:09 -0500
commit3ffb0ba9b567a8efb9a04ed3d1ec15ff333ada22 (patch)
tree7376fdac1871e04829439c00cbd2ad83ce88dc6b
parent167f5594b5efa20a26ff03b3424f793887e6b448 (diff)
libnvdimm, {btt, blk}: do integrity setup before add_disk()
Prior to 25520d55cdb6 ("block: Inline blk_integrity in struct gendisk") we needed to temporarily add a zero-capacity disk before registering for blk-integrity. But adding a zero-capacity disk caused the partition table scanning to bail early, and this resulted in partitions not coming up after a probe of the BTT or blk namespaces. We can now register for integrity before the disk has been added, and this fixes the rescan problems. Fixes: 25520d55cdb6 ("block: Inline blk_integrity in struct gendisk") Reported-by: Dariusz Dokupil <dariusz.dokupil@intel.com> Cc: <stable@vger.kernel.org> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/nvdimm/blk.c3
-rw-r--r--drivers/nvdimm/btt.c3
2 files changed, 2 insertions, 4 deletions
diff --git a/drivers/nvdimm/blk.c b/drivers/nvdimm/blk.c
index 345acca576b3..1bd7b3734751 100644
--- a/drivers/nvdimm/blk.c
+++ b/drivers/nvdimm/blk.c
@@ -278,8 +278,6 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
278 disk->queue = q; 278 disk->queue = q;
279 disk->flags = GENHD_FL_EXT_DEVT; 279 disk->flags = GENHD_FL_EXT_DEVT;
280 nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name); 280 nvdimm_namespace_disk_name(&nsblk->common, disk->disk_name);
281 set_capacity(disk, 0);
282 device_add_disk(dev, disk);
283 281
284 if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk)) 282 if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk))
285 return -ENOMEM; 283 return -ENOMEM;
@@ -292,6 +290,7 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
292 } 290 }
293 291
294 set_capacity(disk, available_disk_size >> SECTOR_SHIFT); 292 set_capacity(disk, available_disk_size >> SECTOR_SHIFT);
293 device_add_disk(dev, disk);
295 revalidate_disk(disk); 294 revalidate_disk(disk);
296 return 0; 295 return 0;
297} 296}
diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
index 2ef544f10ec8..4b95ac513de2 100644
--- a/drivers/nvdimm/btt.c
+++ b/drivers/nvdimm/btt.c
@@ -1545,8 +1545,6 @@ static int btt_blk_init(struct btt *btt)
1545 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, btt->btt_queue); 1545 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, btt->btt_queue);
1546 btt->btt_queue->queuedata = btt; 1546 btt->btt_queue->queuedata = btt;
1547 1547
1548 set_capacity(btt->btt_disk, 0);
1549 device_add_disk(&btt->nd_btt->dev, btt->btt_disk);
1550 if (btt_meta_size(btt)) { 1548 if (btt_meta_size(btt)) {
1551 int rc = nd_integrity_init(btt->btt_disk, btt_meta_size(btt)); 1549 int rc = nd_integrity_init(btt->btt_disk, btt_meta_size(btt));
1552 1550
@@ -1558,6 +1556,7 @@ static int btt_blk_init(struct btt *btt)
1558 } 1556 }
1559 } 1557 }
1560 set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9); 1558 set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
1559 device_add_disk(&btt->nd_btt->dev, btt->btt_disk);
1561 btt->nd_btt->size = btt->nlba * (u64)btt->sector_size; 1560 btt->nd_btt->size = btt->nlba * (u64)btt->sector_size;
1562 revalidate_disk(btt->btt_disk); 1561 revalidate_disk(btt->btt_disk);
1563 1562