aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-04-30 01:44:32 -0400
committerSage Weil <sage@inktank.com>2013-05-02 00:20:13 -0400
commitb21ebdddeb2aa86677dc7d0e3cf6918cac08f92c (patch)
treea15a0749135fa1543cfdd0b0d0e94e804dbc434e
parentcb75223d2b19161e8d916049673cd297cce43cdd (diff)
rbd: stop tracking header object version
The rbd code takes care to maintain the version of the header object. This was done in hopes of using it to detect a change in the object between reading it and setting up a watch request to be notified of changes. The mechanism was never fully implemented, however. And we now avoid the original problem by setting up the watch request before ever reading the content of the header. The osd doesn't interpret the object version supplied with a WATCH osd op, nor does it use the version supplied with a NOTIFY_ACK op (we can just supply 0 for both). There is therefore no need to maintain the header's object version any more, so stop doing so. We'll be able to simplify some more rbd code in the next few patches as a result of this. This resolves: http://tracker.ceph.com/issues/3952 Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--drivers/block/rbd.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 4be3b2a1be8e..8875bebbacfc 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -110,8 +110,6 @@ struct rbd_image_header {
110 110
111 u64 stripe_unit; 111 u64 stripe_unit;
112 u64 stripe_count; 112 u64 stripe_count;
113
114 u64 obj_version;
115}; 113};
116 114
117/* 115/*
@@ -2554,8 +2552,7 @@ static int rbd_dev_header_watch_sync(struct rbd_device *rbd_dev, int start)
2554 rbd_dev->watch_request->osd_req); 2552 rbd_dev->watch_request->osd_req);
2555 2553
2556 osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_WATCH, 2554 osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_WATCH,
2557 rbd_dev->watch_event->cookie, 2555 rbd_dev->watch_event->cookie, 0, start);
2558 rbd_dev->header.obj_version, start);
2559 rbd_osd_req_format_write(obj_request); 2556 rbd_osd_req_format_write(obj_request);
2560 2557
2561 ret = rbd_obj_request_submit(osdc, obj_request); 2558 ret = rbd_obj_request_submit(osdc, obj_request);
@@ -2987,8 +2984,6 @@ static int rbd_read_header(struct rbd_device *rbd_dev,
2987 if (IS_ERR(ondisk)) 2984 if (IS_ERR(ondisk))
2988 return PTR_ERR(ondisk); 2985 return PTR_ERR(ondisk);
2989 ret = rbd_header_from_disk(header, ondisk); 2986 ret = rbd_header_from_disk(header, ondisk);
2990 if (ret >= 0)
2991 header->obj_version = ver;
2992 kfree(ondisk); 2987 kfree(ondisk);
2993 2988
2994 return ret; 2989 return ret;
@@ -3044,9 +3039,6 @@ static int rbd_dev_v1_refresh(struct rbd_device *rbd_dev, u64 *hver)
3044 /* osd requests may still refer to snapc */ 3039 /* osd requests may still refer to snapc */
3045 ceph_put_snap_context(rbd_dev->header.snapc); 3040 ceph_put_snap_context(rbd_dev->header.snapc);
3046 3041
3047 if (hver)
3048 *hver = h.obj_version;
3049 rbd_dev->header.obj_version = h.obj_version;
3050 rbd_dev->header.image_size = h.image_size; 3042 rbd_dev->header.image_size = h.image_size;
3051 rbd_dev->header.snapc = h.snapc; 3043 rbd_dev->header.snapc = h.snapc;
3052 rbd_dev->header.snap_names = h.snap_names; 3044 rbd_dev->header.snap_names = h.snap_names;
@@ -4656,7 +4648,6 @@ static int rbd_dev_v2_probe(struct rbd_device *rbd_dev)
4656 ret = rbd_dev_v2_snap_context(rbd_dev, &ver); 4648 ret = rbd_dev_v2_snap_context(rbd_dev, &ver);
4657 if (ret) 4649 if (ret)
4658 goto out_err; 4650 goto out_err;
4659 rbd_dev->header.obj_version = ver;
4660 4651
4661 dout("discovered version 2 image, header name is %s\n", 4652 dout("discovered version 2 image, header name is %s\n",
4662 rbd_dev->header_name); 4653 rbd_dev->header_name);