From 4a617179ad9e486578a7bcc72891a23472576937 Mon Sep 17 00:00:00 2001
From: David Disseldorp <ddiss@suse.de>
Date: Thu, 8 Jun 2017 16:42:40 +0200
Subject: [PATCH 06/11] rbd: do away with obj_request in cmpsetxattr
Patch-mainline: Not yet, clustered LIO/RBD
References: fate#321625
rbd_obj_request machinery is completely unnecessary for xattr
operations - no striping, cloning, etc. is performed.
More importantly, rbd_osd_req_create() grabs pool id from layout and
that is becoming a data pool id.
Signed-off-by: David Disseldorp <ddiss@suse.de>
Acked-by: Luis Henriques <lhenriques@suse.com>
Acked-by: Lee Duncan <lduncan@suse.com>
[ddiss@suse.de: rebase atop 54ea0046b6fe ("libceph, rbd, ceph: WRITE
| ONDISK -> WRITE")]
[luis: rebased atop 26f887e0a3c4 ("libceph, rbd, ceph: move
ceph_osdc_alloc_messages() calls")]
---
drivers/block/rbd.c | 38 +++++++++++++-------------------------
1 file changed, 13 insertions(+), 25 deletions(-)
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -4595,23 +4595,18 @@ int rbd_dev_cmpsetxattr(struct rbd_devic
int oldval_len, void *newval, int newval_len)
{
struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc;
- struct rbd_obj_request *obj_request;
+ struct ceph_osd_request *req;
int ret;
- obj_request = rbd_obj_request_create(rbd_dev->header_name, 0, 0,
- OBJ_REQUEST_NODATA);
- if (!obj_request)
+ req = ceph_osdc_alloc_request(osdc, NULL, 2, false, GFP_KERNEL);
+ if (!req)
return -ENOMEM;
- /* XXX need a new op_type? CMPXATTR is a read operation */
- obj_request->osd_req = rbd_osd_req_create(rbd_dev, OBJ_OP_WRITE, 2,
- obj_request);
- if (!obj_request->osd_req) {
- ret = -ENOMEM;
- goto out;
- }
+ ceph_oid_copy(&req->r_base_oid, &rbd_dev->header_oid);
+ ceph_oloc_copy(&req->r_base_oloc, &rbd_dev->header_oloc);
+ req->r_flags = CEPH_OSD_FLAG_WRITE;
- ret = osd_req_op_xattr_init(obj_request->osd_req, 0,
+ ret = osd_req_op_xattr_init(req, 0,
CEPH_OSD_OP_CMPXATTR,
key, oldval, oldval_len,
CEPH_OSD_CMPXATTR_OP_EQ,
@@ -4619,31 +4614,24 @@ int rbd_dev_cmpsetxattr(struct rbd_devic
if (ret)
goto out;
- ret = osd_req_op_xattr_init(obj_request->osd_req, 1,
+ ret = osd_req_op_xattr_init(req, 1,
CEPH_OSD_OP_SETXATTR,
key, newval, newval_len, 0, 0);
if (ret)
goto out;
- rbd_osd_req_format_write(obj_request);
-
- ret = rbd_obj_request_submit(osdc, obj_request);
- if (ret)
- goto out;
-
- ret = rbd_obj_request_wait(obj_request);
+ ret = ceph_osdc_alloc_messages(req, GFP_KERNEL);
if (ret)
goto out;
- ret = obj_request->result;
- if (ret) {
+ ceph_osdc_start_request(osdc, req, false);
+ ret = ceph_osdc_wait_request(osdc, req);
+ if (ret < 0)
goto out;
- }
ret = 0;
out:
- rbd_obj_request_put(obj_request);
-
+ ceph_osdc_put_request(req);
return ret;
}
EXPORT_SYMBOL(rbd_dev_cmpsetxattr);