* [PATCH] rbd: assign watch request more directly
@ 2012-11-20 20:20 Alex Elder
0 siblings, 0 replies; only message in thread
From: Alex Elder @ 2012-11-20 20:20 UTC (permalink / raw)
To: ceph-devel@vger.kernel.org
Both rbd_req_sync_op() and rbd_do_request() have a "linger"
parameter, which is the address of a pointer that should refer to
the osd request structure used to issue a request to an osd.
Only one case ever supplies a non-null "linger" argument: an
CEPH_OSD_OP_WATCH start. And in that one case it is assigned
&rbd_dev->watch_request.
Within rbd_do_request() (where the assignment ultimately gets made)
we know the rbd_dev and therefore its watch_request field. We
also know whether the op being sent is CEPH_OSD_OP_WATCH start.
Stop opaquely passing down the "linger" pointer, and instead just
assign the value directly inside rbd_do_request() when it's needed.
This makes it unnecessary for rbd_req_sync_watch() to make
arrangements to hold a value that's not available until a
bit later. This more clearly separates setting up a watch
request from submitting it.
Signed-off-by: Alex Elder <elder@inktank.com>
---
drivers/block/rbd.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 0647637..acdb4a6 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1158,7 +1158,6 @@ static int rbd_do_request(struct request *rq,
int coll_index,
void (*rbd_cb)(struct ceph_osd_request *,
struct ceph_msg *),
- struct ceph_osd_request **linger_req,
u64 *ver)
{
struct ceph_osd_request *osd_req;
@@ -1212,9 +1211,9 @@ static int rbd_do_request(struct request *rq,
ceph_osdc_build_request(osd_req, ofs, len, 1, op,
snapc, snapid, &mtime);
- if (linger_req) {
+ if (op->op == CEPH_OSD_OP_WATCH && op->watch.flag) {
ceph_osdc_set_request_linger(osdc, osd_req);
- *linger_req = osd_req;
+ rbd_dev->watch_request = osd_req;
}
ret = ceph_osdc_start_request(osdc, osd_req, false);
@@ -1296,7 +1295,6 @@ static int rbd_req_sync_op(struct rbd_device *rbd_dev,
const char *object_name,
u64 ofs, u64 inbound_size,
char *inbound,
- struct ceph_osd_request **linger_req,
u64 *ver)
{
int ret;
@@ -1317,7 +1315,7 @@ static int rbd_req_sync_op(struct rbd_device *rbd_dev,
op,
NULL, 0,
NULL,
- linger_req, ver);
+ ver);
if (ret < 0)
goto done;
@@ -1383,7 +1381,7 @@ static int rbd_do_op(struct request *rq,
flags,
op,
coll, coll_index,
- rbd_req_cb, 0, NULL);
+ rbd_req_cb, NULL);
if (ret < 0)
rbd_coll_end_req_index(rq, coll, coll_index,
(s32) ret, seg_len);
@@ -1410,7 +1408,7 @@ static int rbd_req_sync_read(struct rbd_device
*rbd_dev,
return -ENOMEM;
ret = rbd_req_sync_op(rbd_dev, CEPH_OSD_FLAG_READ,
- op, object_name, ofs, len, buf, NULL, ver);
+ op, object_name, ofs, len, buf, ver);
rbd_osd_req_op_destroy(op);
return ret;
@@ -1436,7 +1434,7 @@ static int rbd_req_sync_notify_ack(struct
rbd_device *rbd_dev,
CEPH_OSD_FLAG_READ,
op,
NULL, 0,
- rbd_simple_req_cb, 0, NULL);
+ rbd_simple_req_cb, NULL);
rbd_osd_req_op_destroy(op);
@@ -1469,7 +1467,6 @@ static void rbd_watch_cb(u64 ver, u64 notify_id,
u8 opcode, void *data)
*/
static int rbd_req_sync_watch(struct rbd_device *rbd_dev, int start)
{
- struct ceph_osd_request **linger_req = NULL;
struct ceph_osd_req_op *op;
int ret = 0;
@@ -1481,7 +1478,6 @@ static int rbd_req_sync_watch(struct rbd_device
*rbd_dev, int start)
&rbd_dev->watch_event);
if (ret < 0)
return ret;
- linger_req = &rbd_dev->watch_request;
} else {
rbd_assert(rbd_dev->watch_request != NULL);
}
@@ -1493,7 +1489,7 @@ static int rbd_req_sync_watch(struct rbd_device
*rbd_dev, int start)
ret = rbd_req_sync_op(rbd_dev,
CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_ONDISK,
op, rbd_dev->header_name,
- 0, 0, NULL, linger_req, NULL);
+ 0, 0, NULL, NULL);
/* Cancel the event if we're tearing down, or on error */
@@ -1537,7 +1533,7 @@ static int rbd_req_sync_exec(struct rbd_device
*rbd_dev,
ret = rbd_req_sync_op(rbd_dev, CEPH_OSD_FLAG_READ, op,
object_name, 0, inbound_size, inbound,
- NULL, ver);
+ ver);
rbd_osd_req_op_destroy(op);
--
1.7.9.5
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2012-11-20 20:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-20 20:20 [PATCH] rbd: assign watch request more directly Alex Elder
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.