libceph: make message data be a pointer
Begin the transition from a single message data item to a list of
them by replacing the "data" structure in a message with a pointer
to a ceph_msg_data structure.
A null pointer will indicate the message has no data; replace the
use of ceph_msg_has_data() with a simple check for a null pointer.
Create functions ceph_msg_data_create() and ceph_msg_data_destroy()
to dynamically allocate and free a data item structure of a given type.
When a message has its data item "set," allocate one of these to
hold the data description, and free it when the last reference to
the message is dropped.
This partially resolves:
http://tracker.ceph.com/issues/4429
Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
This commit is contained in:
@@ -64,8 +64,6 @@ struct ceph_messenger {
|
||||
u32 required_features;
|
||||
};
|
||||
|
||||
#define ceph_msg_has_data(m) ((m)->data.type != CEPH_MSG_DATA_NONE)
|
||||
|
||||
enum ceph_msg_data_type {
|
||||
CEPH_MSG_DATA_NONE, /* message contains no data payload */
|
||||
CEPH_MSG_DATA_PAGES, /* data source/destination is a page array */
|
||||
@@ -141,8 +139,7 @@ struct ceph_msg {
|
||||
struct kvec front; /* unaligned blobs of message */
|
||||
struct ceph_buffer *middle;
|
||||
|
||||
/* data payload */
|
||||
struct ceph_msg_data data;
|
||||
struct ceph_msg_data *data; /* data payload */
|
||||
|
||||
struct ceph_connection *con;
|
||||
struct list_head list_head; /* links for connection lists */
|
||||
|
||||
Reference in New Issue
Block a user