Blob Blame History Raw
From 83c85c337c8ca22ec57eec827cd503f2d8065a79 Mon Sep 17 00:00:00 2001
From: David Disseldorp <ddiss@suse.de>
Date: Thu, 8 Jun 2017 15:27:52 +0200
Subject: [PATCH 05/11] rbd: do away with obj_request in setxattr
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 |   35 ++++++++++++-----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -4556,45 +4556,34 @@ int rbd_dev_setxattr(struct rbd_device *
 		     int val_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, 1, false, GFP_KERNEL);
+	if (!req)
 		return -ENOMEM;
 
-	obj_request->osd_req = rbd_osd_req_create(rbd_dev, OBJ_OP_WRITE, 1,
-						  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, CEPH_OSD_OP_SETXATTR,
+	ret = osd_req_op_xattr_init(req, 0, CEPH_OSD_OP_SETXATTR,
 				    key, val, val_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_setxattr);