summaryrefslogtreecommitdiffstats
path: root/drivers/nvdimm/btt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/nvdimm/btt.c')
-rw-r--r--drivers/nvdimm/btt.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
index c02065aed03d..411c7b2bb37a 100644
--- a/drivers/nvdimm/btt.c
+++ b/drivers/nvdimm/btt.c
@@ -1245,6 +1245,7 @@ static const struct block_device_operations btt_fops = {
1245 .owner = THIS_MODULE, 1245 .owner = THIS_MODULE,
1246 .rw_page = btt_rw_page, 1246 .rw_page = btt_rw_page,
1247 .getgeo = btt_getgeo, 1247 .getgeo = btt_getgeo,
1248 .revalidate_disk = nvdimm_revalidate_disk,
1248}; 1249};
1249 1250
1250static int btt_blk_init(struct btt *btt) 1251static int btt_blk_init(struct btt *btt)
@@ -1292,6 +1293,7 @@ static int btt_blk_init(struct btt *btt)
1292 } 1293 }
1293 } 1294 }
1294 set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9); 1295 set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
1296 revalidate_disk(btt->btt_disk);
1295 1297
1296 return 0; 1298 return 0;
1297} 1299}
@@ -1346,7 +1348,11 @@ static struct btt *btt_init(struct nd_btt *nd_btt, unsigned long long rawsize,
1346 goto out_free; 1348 goto out_free;
1347 } 1349 }
1348 1350
1349 if (btt->init_state != INIT_READY) { 1351 if (btt->init_state != INIT_READY && nd_region->ro) {
1352 dev_info(dev, "%s is read-only, unable to init btt metadata\n",
1353 dev_name(&nd_region->dev));
1354 goto out_free;
1355 } else if (btt->init_state != INIT_READY) {
1350 btt->num_arenas = (rawsize / ARENA_MAX_SIZE) + 1356 btt->num_arenas = (rawsize / ARENA_MAX_SIZE) +
1351 ((rawsize % ARENA_MAX_SIZE) ? 1 : 0); 1357 ((rawsize % ARENA_MAX_SIZE) ? 1 : 0);
1352 dev_dbg(dev, "init: %d arenas for %llu rawsize\n", 1358 dev_dbg(dev, "init: %d arenas for %llu rawsize\n",
@@ -1361,7 +1367,7 @@ static struct btt *btt_init(struct nd_btt *nd_btt, unsigned long long rawsize,
1361 ret = btt_meta_init(btt); 1367 ret = btt_meta_init(btt);
1362 if (ret) { 1368 if (ret) {
1363 dev_err(dev, "init: error in meta_init: %d\n", ret); 1369 dev_err(dev, "init: error in meta_init: %d\n", ret);
1364 return NULL; 1370 goto out_free;
1365 } 1371 }
1366 } 1372 }
1367 1373