Commit 2647ba38 authored by Alex Elder's avatar Alex Elder

rbd: move call osd op setup into rbd_osd_req_op_create()

Move the initialization of the CEPH_OSD_OP_CALL operation into
rbd_osd_req_op_create().
Signed-off-by: default avatarAlex Elder <elder@inktank.com>
Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
parent 8d23bf29
...@@ -52,10 +52,12 @@ ...@@ -52,10 +52,12 @@
#define SECTOR_SHIFT 9 #define SECTOR_SHIFT 9
#define SECTOR_SIZE (1ULL << SECTOR_SHIFT) #define SECTOR_SIZE (1ULL << SECTOR_SHIFT)
/* It might be useful to have this defined elsewhere too */ /* It might be useful to have these defined elsewhere */
#define U32_MAX ((u32) (~0U)) #define U8_MAX ((u8) (~0U))
#define U64_MAX ((u64) (~0ULL)) #define U16_MAX ((u16) (~0U))
#define U32_MAX ((u32) (~0U))
#define U64_MAX ((u64) (~0ULL))
#define RBD_DRV_NAME "rbd" #define RBD_DRV_NAME "rbd"
#define RBD_DRV_NAME_LONG "rbd (rados block device)" #define RBD_DRV_NAME_LONG "rbd (rados block device)"
...@@ -1047,6 +1049,7 @@ struct ceph_osd_req_op *rbd_osd_req_op_create(u16 opcode, ...) ...@@ -1047,6 +1049,7 @@ struct ceph_osd_req_op *rbd_osd_req_op_create(u16 opcode, ...)
{ {
struct ceph_osd_req_op *op; struct ceph_osd_req_op *op;
va_list args; va_list args;
size_t size;
op = kzalloc(sizeof (*op), GFP_NOIO); op = kzalloc(sizeof (*op), GFP_NOIO);
if (!op) if (!op)
...@@ -1063,6 +1066,27 @@ struct ceph_osd_req_op *rbd_osd_req_op_create(u16 opcode, ...) ...@@ -1063,6 +1066,27 @@ struct ceph_osd_req_op *rbd_osd_req_op_create(u16 opcode, ...)
if (opcode == CEPH_OSD_OP_WRITE) if (opcode == CEPH_OSD_OP_WRITE)
op->payload_len = op->extent.length; op->payload_len = op->extent.length;
break; break;
case CEPH_OSD_OP_CALL:
/* rbd_osd_req_op_create(CALL, class, method, data, datalen) */
op->cls.class_name = va_arg(args, char *);
size = strlen(op->cls.class_name);
rbd_assert(size <= (size_t) U8_MAX);
op->cls.class_len = size;
op->payload_len = size;
op->cls.method_name = va_arg(args, char *);
size = strlen(op->cls.method_name);
rbd_assert(size <= (size_t) U8_MAX);
op->cls.method_len = size;
op->payload_len += size;
op->cls.argc = 0;
op->cls.indata = va_arg(args, void *);
size = va_arg(args, size_t);
rbd_assert(size <= (size_t) U32_MAX);
op->cls.indata_len = (u32) size;
op->payload_len += size;
break;
default: default:
rbd_warn(NULL, "unsupported opcode %hu\n", opcode); rbd_warn(NULL, "unsupported opcode %hu\n", opcode);
kfree(op); kfree(op);
...@@ -1510,9 +1534,6 @@ static int rbd_req_sync_exec(struct rbd_device *rbd_dev, ...@@ -1510,9 +1534,6 @@ static int rbd_req_sync_exec(struct rbd_device *rbd_dev,
u64 *ver) u64 *ver)
{ {
struct ceph_osd_req_op *op; struct ceph_osd_req_op *op;
int class_name_len = strlen(class_name);
int method_name_len = strlen(method_name);
int payload_size;
int ret; int ret;
/* /*
...@@ -1523,25 +1544,16 @@ static int rbd_req_sync_exec(struct rbd_device *rbd_dev, ...@@ -1523,25 +1544,16 @@ static int rbd_req_sync_exec(struct rbd_device *rbd_dev,
* the perspective of the server side) in the OSD request * the perspective of the server side) in the OSD request
* operation. * operation.
*/ */
payload_size = class_name_len + method_name_len + outbound_size; op = rbd_osd_req_op_create(CEPH_OSD_OP_CALL, class_name,
op = rbd_create_rw_op(CEPH_OSD_OP_CALL, 0, 0); method_name, outbound, outbound_size);
if (!op) if (!op)
return -ENOMEM; return -ENOMEM;
op->payload_len = payload_size;
op->cls.class_name = class_name;
op->cls.class_len = (__u8) class_name_len;
op->cls.method_name = method_name;
op->cls.method_len = (__u8) method_name_len;
op->cls.argc = 0;
op->cls.indata = outbound;
op->cls.indata_len = outbound_size;
ret = rbd_req_sync_op(rbd_dev, CEPH_OSD_FLAG_READ, op, ret = rbd_req_sync_op(rbd_dev, CEPH_OSD_FLAG_READ, op,
object_name, 0, inbound_size, inbound, object_name, 0, inbound_size, inbound,
NULL, ver); NULL, ver);
rbd_destroy_op(op); rbd_osd_req_op_destroy(op);
dout("cls_exec returned %d\n", ret); dout("cls_exec returned %d\n", ret);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment