Project

General

Profile

Actions

Feature #4104

closed

osd_client: support passing page array as data for CALL op

Added by Alex Elder about 11 years ago. Updated about 11 years ago.

Status:
Resolved
Priority:
Normal
Assignee:
Target version:
-
% Done:

0%

Source:
Development
Tags:
Backport:
Reviewed:
Affected Versions:
Pull request ID:

Description

The rbd object "copyup" operation is defined as a class method
operation. Currently when a class method needs to supply data
it is provided using a call to ceph_pagelist_append(), which
copies the data it is supplied into newly-allocated pages which
are attached to the end of a list associated with a message.

This simply won't work for the rbd I/O path, which will need to
use the "copyup" method and supply (typically) 4MB worth of
data for each call.

Because we most likely will want to read the parent data into
a page array, it would best if we could supply a page array
as the source of data to provide with the copyup method.


Related issues 1 (0 open1 closed)

Related to rbd - Feature #2770: krbd: define tasks to add osd_client compound class op supportResolvedAlex Elder02/14/2013

Actions
Actions #1

Updated by Alex Elder about 11 years ago

  • Project changed from Linux kernel client to rbd

I guess this needs to be considered an rbd task if it is
to show up as a subtask for 2770.

Actions #2

Updated by Ian Colle about 11 years ago

  • Tracker changed from Bug to Feature
Actions #3

Updated by Alex Elder about 11 years ago

  • Status changed from New to In Progress

Now that I've got the per-op data out for review I can
start looking at this one.

It is going to be my test case for multiple outbound
data items, so I won't have to wait for full layering
to get some testing done.

Right now the class name, method name, and data for a
CALL op are formatted into a single ceph pagelist and
that pagelist is set as the single outbound data item
for the request message.

What I'm going to do is define the data portion of the
CALL to be a second outbound data item in the same op.
The first will contain only the class and method names.
And the second will indepenently describe the data for
the call, which therefore can be a page array (or a
bio, or whatever else we want it to be).

Doing this will require completion of the multiple
data items in a message task:
http://tracker.ceph.com/issues/3761

Actions #4

Updated by Alex Elder about 11 years ago

I have a patch that resolves this, based on the code just
posted for review for http://tracker.ceph.com/issues/3761.
It works fine in UML, but hangs on a real machine, so it's
not quite ready for review.

Technically, I pass a pagelist rather than a page array,
but in any case it's a data item which is abstract and
can easily handle a page array if we had one. So I'll
consider this done when the patch I have now gets fixed,
reviewed, and committed.

I'll wait to switch over to using an actual page array
until after I know what specific interfaces are going
to work best after implementing the callback from parent
code for a layered write.

Actions #5

Updated by Alex Elder about 11 years ago

  • Status changed from In Progress to Fix Under Review

Found one small problem in this patch and another
one (probably the real cause) in one of the messenger
patches I posted earlier. Both are fixed now, so:

The following patch was posted for review:
[PATCH] libceph: make method call data be a separate data item

Actions #6

Updated by Alex Elder about 11 years ago

  • Status changed from Fix Under Review to Resolved

The following has been committed to the "testing" branch
of the ceph-client git repository:

51122dd libceph: make method call data be a separate data item

Actions

Also available in: Atom PDF