Project

General

Profile

Subtask #4127

Feature #2770: krbd: define tasks to add osd_client compound class op support

kernel osd client: clearly separate read and write data buffers

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

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

100%

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

Description

The osd client (and messenger) have generally speaking one
field representing either the data to be sent or the
data to be received for a given osd request.

As a specific example, there is a "pages" field (and a few
other related) that defines an array of pages. For a read
request, those pages contain data to be sent. For a write
request, those pages are where incoming data lands.

As a result, it is not always clear how they are going to
be used, and in a few cases the code is a little sloppy
about that. (Example: pages is passed to the request
message for a READ operation, and will never be used for
that, in ceph_osdc_start_request().)

It also means you can't use pages for both reading and
writing (or maybe you can, but this is not well defined
behavior).

In order to rearrange things to support sending data of
multiple types (pagelist, and bio, for example) in different
orders (pagelist then page array, specifically), this
needs to be sorted out.


Subtasks

Subtask #4263: libceph: clearly abstract message data operationsResolvedAlex Elder

History

#1 Updated by Alex Elder about 11 years ago

I have put together a series of patches that implement
this clear separation. It required work in both the
osd client and in the messenger (sorry, I didn't open
a separate bug for the latter). The changes are fairly
pervasive, and affect some of the file system code as well.

I'm now testing the result, and so far they look good.
I ran suites/dbench.sh successfully on a ceph file
system (at least I think I did) and am now running
xfstests and a variety of other things I normally do
for rbd.

If all continues to go well I'll clean them all up and put
them out for review.

#2 Updated by Alex Elder about 11 years ago

In addition to distinguishing incoming data from outgoing
data, the data for an osd request is either held in a bio
or in pages, but never both. So those can be more clearly
distinguished as well.

#3 Updated by Alex Elder about 11 years ago

  • Status changed from New to Fix Under Review

These patches have been posted for review. (I include
the first because it also is pretty closely connected
to the final separation that occurs in the last patch.)

[PATCH 3/3] libceph: don't assign page info in ceph_osdc_new_request()

[PATCH 0/3] libceph: distinguish osd request read and write data
[PATCH 1/3] libceph: separate osd request data info
[PATCH 2/3] libceph: distinguish page and bio requests
[PATCH 3/3] libceph: separate read and write data

#4 Updated by Alex Elder about 11 years ago

  • Status changed from Fix Under Review to Resolved

These have been committed to the ceph client testing branch:
7f6346a libceph: separate read and write data
b019f5c libceph: distinguish page and bio requests
cb97c64 libceph: separate osd request data info
ab3d8df libceph: don't assign page info in ceph_osdc_new_request()

Also available in: Atom PDF