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