diff options
author | Sage Weil <sage@newdream.net> | 2009-12-22 10:45:45 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2009-12-23 08:17:20 -0800 |
commit | 350b1c32ea58d29e25d63fc25e92dd48f9339546 (patch) | |
tree | 4b9e8b06de8fd7e07c2292307e9a67c121f1e079 /fs/ceph/osd_client.h | |
parent | ec302645f4a9bd9ec757c30d185557e1c0972c1a (diff) | |
download | lwn-350b1c32ea58d29e25d63fc25e92dd48f9339546.tar.gz lwn-350b1c32ea58d29e25d63fc25e92dd48f9339546.zip |
ceph: control access to page vector for incoming data
When we issue an OSD read, we specify a vector of pages that the data is to
be read into. The request may be sent multiple times, to multiple OSDs, if
the osdmap changes, which means we can get more than one reply.
Only read data into the page vector if the reply is coming from the
OSD we last sent the request to. Keep track of which connection is using
the vector by taking a reference. If another connection was already
using the vector before and a new reply comes in on the right connection,
revoke the pages from the other connection.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/osd_client.h')
-rw-r--r-- | fs/ceph/osd_client.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/ceph/osd_client.h b/fs/ceph/osd_client.h index 2e4cfd1e9f10..8fef71cc4457 100644 --- a/fs/ceph/osd_client.h +++ b/fs/ceph/osd_client.h @@ -43,11 +43,13 @@ struct ceph_osd_request { struct list_head r_osd_item; struct ceph_osd *r_osd; + struct ceph_connection *r_con_filling_pages; + struct ceph_msg *r_request, *r_reply; int r_result; int r_flags; /* any additional flags for the osd */ u32 r_sent; /* >0 if r_request is sending/sent */ - int r_prepared_pages, r_got_reply; + int r_got_reply; int r_num_prealloc_reply; struct ceph_osd_client *r_osdc; |