diff options
Diffstat (limited to 'drivers/nvdimm/btt.c')
-rw-r--r-- | drivers/nvdimm/btt.c | 10 |
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 | ||
1250 | static int btt_blk_init(struct btt *btt) | 1251 | static 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 | ||