aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2012-07-19 09:49:18 -0400
committerSage Weil <sage@inktank.com>2012-07-30 21:15:42 -0400
commit78dc447d3ca3701206a1dd813c901556a3fad451 (patch)
tree244df3c3450069bc09a39fea87a634f93e911227 /drivers/block
parent75fe9e19816d6ed3e90f1bd3b741f99bf030e848 (diff)
rbd: preserve snapc->seq in rbd_header_set_snap()
In rbd_header_set_snap(), there is logic to make the snap context's seq field get set to a particular snapshot id, or 0 if there is no snapshot for the rbd image. This seems to be an artifact of how the current snapshot id for an rbd_dev was recorded before the rbd_dev->snap_id field began to be used for that purpose. There's no need to update the value of snapc->seq here any more, so stop doing it. Tidy up a few local variables in that function while we're at it. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/rbd.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 8a4659997e05..ac8a83fc2ad9 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -588,29 +588,25 @@ static int snap_by_name(struct rbd_image_header *header, const char *snap_name,
588 588
589static int rbd_header_set_snap(struct rbd_device *rbd_dev, u64 *size) 589static int rbd_header_set_snap(struct rbd_device *rbd_dev, u64 *size)
590{ 590{
591 struct rbd_image_header *header = &rbd_dev->header; 591 int ret;
592 struct ceph_snap_context *snapc = header->snapc;
593 int ret = -ENOENT;
594 592
595 down_write(&rbd_dev->header_rwsem); 593 down_write(&rbd_dev->header_rwsem);
596 594
597 if (!memcmp(rbd_dev->snap_name, RBD_SNAP_HEAD_NAME, 595 if (!memcmp(rbd_dev->snap_name, RBD_SNAP_HEAD_NAME,
598 sizeof (RBD_SNAP_HEAD_NAME))) { 596 sizeof (RBD_SNAP_HEAD_NAME))) {
599 if (header->total_snaps)
600 snapc->seq = header->snap_seq;
601 else
602 snapc->seq = 0;
603 rbd_dev->snap_id = CEPH_NOSNAP; 597 rbd_dev->snap_id = CEPH_NOSNAP;
604 rbd_dev->snap_exists = false; 598 rbd_dev->snap_exists = false;
605 rbd_dev->read_only = 0; 599 rbd_dev->read_only = 0;
606 if (size) 600 if (size)
607 *size = header->image_size; 601 *size = rbd_dev->header.image_size;
608 } else { 602 } else {
609 ret = snap_by_name(header, rbd_dev->snap_name, 603 u64 snap_id = 0;
610 &snapc->seq, size); 604
605 ret = snap_by_name(&rbd_dev->header, rbd_dev->snap_name,
606 &snap_id, size);
611 if (ret < 0) 607 if (ret < 0)
612 goto done; 608 goto done;
613 rbd_dev->snap_id = snapc->seq; 609 rbd_dev->snap_id = snap_id;
614 rbd_dev->snap_exists = true; 610 rbd_dev->snap_exists = true;
615 rbd_dev->read_only = 1; 611 rbd_dev->read_only = 1;
616 } 612 }