[PATCH 2/6] ceph: refactor osdc requests creation functions

Previous thread: [PATCH 5/6] ceph: refactor mount related functions, add helpers by Yehuda Sadeh on Tuesday, April 13, 2010 - 4:29 pm. (3 messages)

Next thread: [PATCH 1/6] ceph: all allocation functions should get gfp_mask by Yehuda Sadeh on Tuesday, April 13, 2010 - 4:29 pm. (1 message)
From: Yehuda Sadeh
Date: Tuesday, April 13, 2010 - 4:29 pm

The osd requests creation are being decoupled from the
vino parameter, allowing clients using the osd to use
other arbitrary object names that are not necessarily
vino based.

Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
---
 fs/ceph/osd_client.c |  179 +++++++++++++++++++++++++++++++++++---------------
 fs/ceph/osd_client.h |   24 +++++++
 2 files changed, 149 insertions(+), 54 deletions(-)

diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c
index 356e61a..5927bc3 100644
--- a/fs/ceph/osd_client.c
+++ b/fs/ceph/osd_client.c
@@ -22,6 +22,32 @@ static int __kick_requests(struct ceph_osd_client *osdc,
 
 static void kick_requests(struct ceph_osd_client *osdc, struct ceph_osd *osd);
 
+void ceph_calc_raw_layout(struct ceph_osd_client *osdc,
+			struct ceph_file_layout *layout,
+			u64 off, u64 len, u64 *bno,
+			struct ceph_osd_request *req)
+{
+	struct ceph_osd_request_head *reqhead = req->r_request->front.iov_base;
+	struct ceph_osd_op *op = (void *)(reqhead + 1);
+	u64 orig_len = len;
+	u64 objoff, objlen;    /* extent in object */
+
+	/* object extent? */
+	ceph_calc_file_object_mapping(layout, off, &len, bno,
+				      &objoff, &objlen);
+	if (len < orig_len)
+		dout(" skipping last %llu, final file extent %llu~%llu\n",
+		     orig_len - len, off, len);
+
+	op->extent.offset = cpu_to_le64(objoff);
+	op->extent.length = cpu_to_le64(objlen);
+	req->r_num_pages = calc_pages_for(off, len);
+
+	dout("calc_layout bno=%llx %llu~%llu (%d pages)\n",
+	     *bno, objoff, objlen, req->r_num_pages);
+
+}
+
 /*
  * Implement client access to distributed object storage cluster.
  *
@@ -53,29 +79,13 @@ static void calc_layout(struct ceph_osd_client *osdc,
 			struct ceph_osd_request *req)
 {
 	struct ceph_osd_request_head *reqhead = req->r_request->front.iov_base;
-	struct ceph_osd_op *op = (void *)(reqhead + 1);
-	u64 orig_len = *plen;
-	u64 objoff, objlen;    /* extent in object */
 	u64 bno;
 
 	reqhead->snapid = cpu_to_le64(vino.snap);
-
-	/* ...
Previous thread: [PATCH 5/6] ceph: refactor mount related functions, add helpers by Yehuda Sadeh on Tuesday, April 13, 2010 - 4:29 pm. (3 messages)

Next thread: [PATCH 1/6] ceph: all allocation functions should get gfp_mask by Yehuda Sadeh on Tuesday, April 13, 2010 - 4:29 pm. (1 message)