summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-04-05 21:46:01 +0200
committerSage Weil <sage@inktank.com>2013-05-02 06:18:28 +0200
commitc851c49591ebf000c610711e39eea7da5ff05b21 (patch)
tree917451c570fae240e1902085a75d7ff970deb981
parentlibceph: skip message if too big to receive (diff)
downloadlinux-c851c49591ebf000c610711e39eea7da5ff05b21.tar.xz
linux-c851c49591ebf000c610711e39eea7da5ff05b21.zip
libceph: record bio length
The bio is the only data item type that doesn't record its full length. Fix that. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--include/linux/ceph/messenger.h5
-rw-r--r--net/ceph/messenger.c1
2 files changed, 5 insertions, 1 deletions
diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h
index cdeebae03e0d..4fb870a5b5fc 100644
--- a/include/linux/ceph/messenger.h
+++ b/include/linux/ceph/messenger.h
@@ -116,7 +116,10 @@ struct ceph_msg_data {
enum ceph_msg_data_type type;
union {
#ifdef CONFIG_BLOCK
- struct bio *bio;
+ struct {
+ struct bio *bio;
+ size_t bio_length;
+ };
#endif /* CONFIG_BLOCK */
struct {
struct page **pages; /* NOT OWNER. */
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index cb5b4e6733f0..731bb9efa2c6 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -3032,6 +3032,7 @@ void ceph_msg_data_set_bio(struct ceph_msg *msg, struct bio *bio,
data = ceph_msg_data_create(CEPH_MSG_DATA_BIO);
BUG_ON(!data);
data->bio = bio;
+ data->bio_length = length;
msg->data = data;
msg->data_length = length;