diff options
author | Ilya Dryomov <ilya.dryomov@inktank.com> | 2014-07-23 09:11:21 -0400 |
---|---|---|
committer | Ilya Dryomov <ilya.dryomov@inktank.com> | 2014-07-25 05:15:58 -0400 |
commit | 5ff1108ccc10dbb07bf5875e38fee313844ccef6 (patch) | |
tree | 13c75f95ec0866903736da74dea2c74eba46fbb8 | |
parent | 52bb1f9bed796127e8b446b12e5b834026241cdd (diff) |
rbd: update mapping size only on refresh
There is no sense in trying to update the mapping size before it's even
been set.
Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Alex Elder <elder@linaro.org>
-rw-r--r-- | drivers/block/rbd.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index c4064c53b9c9..92a9ce0a9e85 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -971,12 +971,6 @@ static int rbd_header_from_disk(struct rbd_device *rbd_dev, | |||
971 | header->snap_names = snap_names; | 971 | header->snap_names = snap_names; |
972 | header->snap_sizes = snap_sizes; | 972 | header->snap_sizes = snap_sizes; |
973 | 973 | ||
974 | /* Make sure mapping size is consistent with header info */ | ||
975 | |||
976 | if (rbd_dev->spec->snap_id == CEPH_NOSNAP || first_time) | ||
977 | if (rbd_dev->mapping.size != header->image_size) | ||
978 | rbd_dev->mapping.size = header->image_size; | ||
979 | |||
980 | return 0; | 974 | return 0; |
981 | out_2big: | 975 | out_2big: |
982 | ret = -EIO; | 976 | ret = -EIO; |
@@ -3522,9 +3516,14 @@ static int rbd_dev_refresh(struct rbd_device *rbd_dev) | |||
3522 | if (ret) | 3516 | if (ret) |
3523 | return ret; | 3517 | return ret; |
3524 | 3518 | ||
3525 | /* If it's a mapped snapshot, validate its EXISTS flag */ | 3519 | if (rbd_dev->spec->snap_id == CEPH_NOSNAP) { |
3520 | if (rbd_dev->mapping.size != rbd_dev->header.image_size) | ||
3521 | rbd_dev->mapping.size = rbd_dev->header.image_size; | ||
3522 | } else { | ||
3523 | /* validate mapped snapshot's EXISTS flag */ | ||
3524 | rbd_exists_validate(rbd_dev); | ||
3525 | } | ||
3526 | 3526 | ||
3527 | rbd_exists_validate(rbd_dev); | ||
3528 | up_write(&rbd_dev->header_rwsem); | 3527 | up_write(&rbd_dev->header_rwsem); |
3529 | 3528 | ||
3530 | if (mapping_size != rbd_dev->mapping.size) { | 3529 | if (mapping_size != rbd_dev->mapping.size) { |
@@ -4507,10 +4506,6 @@ static int rbd_dev_v2_header_info(struct rbd_device *rbd_dev) | |||
4507 | "is EXPERIMENTAL!"); | 4506 | "is EXPERIMENTAL!"); |
4508 | } | 4507 | } |
4509 | 4508 | ||
4510 | if (rbd_dev->spec->snap_id == CEPH_NOSNAP) | ||
4511 | if (rbd_dev->mapping.size != rbd_dev->header.image_size) | ||
4512 | rbd_dev->mapping.size = rbd_dev->header.image_size; | ||
4513 | |||
4514 | ret = rbd_dev_v2_snap_context(rbd_dev); | 4509 | ret = rbd_dev_v2_snap_context(rbd_dev); |
4515 | dout("rbd_dev_v2_snap_context returned %d\n", ret); | 4510 | dout("rbd_dev_v2_snap_context returned %d\n", ret); |
4516 | 4511 | ||