diff options
| -rw-r--r-- | drivers/block/rbd.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index bb3d9be3b1b4..b64125d1d7bd 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
| @@ -1716,6 +1716,19 @@ static void __rbd_remove_all_snaps(struct rbd_device *rbd_dev) | |||
| 1716 | __rbd_remove_snap_dev(snap); | 1716 | __rbd_remove_snap_dev(snap); |
| 1717 | } | 1717 | } |
| 1718 | 1718 | ||
| 1719 | static void rbd_update_mapping_size(struct rbd_device *rbd_dev) | ||
| 1720 | { | ||
| 1721 | sector_t size; | ||
| 1722 | |||
| 1723 | if (rbd_dev->mapping.snap_id != CEPH_NOSNAP) | ||
| 1724 | return; | ||
| 1725 | |||
| 1726 | size = (sector_t) rbd_dev->header.image_size / SECTOR_SIZE; | ||
| 1727 | dout("setting size to %llu sectors", (unsigned long long) size); | ||
| 1728 | rbd_dev->mapping.size = (u64) size; | ||
| 1729 | set_capacity(rbd_dev->disk, size); | ||
| 1730 | } | ||
| 1731 | |||
| 1719 | /* | 1732 | /* |
| 1720 | * only read the first part of the ondisk header, without the snaps info | 1733 | * only read the first part of the ondisk header, without the snaps info |
| 1721 | */ | 1734 | */ |
| @@ -1730,17 +1743,9 @@ static int __rbd_refresh_header(struct rbd_device *rbd_dev, u64 *hver) | |||
| 1730 | 1743 | ||
| 1731 | down_write(&rbd_dev->header_rwsem); | 1744 | down_write(&rbd_dev->header_rwsem); |
| 1732 | 1745 | ||
| 1733 | /* resized? */ | 1746 | /* Update image size, and check for resize of mapped image */ |
| 1734 | if (rbd_dev->mapping.snap_id == CEPH_NOSNAP) { | 1747 | rbd_dev->header.image_size = h.image_size; |
| 1735 | sector_t size = (sector_t) h.image_size / SECTOR_SIZE; | 1748 | rbd_update_mapping_size(rbd_dev); |
| 1736 | |||
| 1737 | if (size != (sector_t) rbd_dev->mapping.size) { | ||
| 1738 | dout("setting size to %llu sectors", | ||
| 1739 | (unsigned long long) size); | ||
| 1740 | rbd_dev->mapping.size = (u64) size; | ||
| 1741 | set_capacity(rbd_dev->disk, size); | ||
| 1742 | } | ||
| 1743 | } | ||
| 1744 | 1749 | ||
| 1745 | /* rbd_dev->header.object_prefix shouldn't change */ | 1750 | /* rbd_dev->header.object_prefix shouldn't change */ |
| 1746 | kfree(rbd_dev->header.snap_sizes); | 1751 | kfree(rbd_dev->header.snap_sizes); |
