@@ -135,6 +135,16 @@ osd_req_op_cls_request_info(struct ceph_osd_request *osd_req,
135
135
}
136
136
EXPORT_SYMBOL (osd_req_op_cls_request_info ); /* ??? */
137
137
138
+ struct ceph_osd_data *
139
+ osd_req_op_cls_request_data (struct ceph_osd_request * osd_req ,
140
+ unsigned int which )
141
+ {
142
+ BUG_ON (which >= osd_req -> r_num_ops );
143
+
144
+ return & osd_req -> r_ops [which ].cls .request_data ;
145
+ }
146
+ EXPORT_SYMBOL (osd_req_op_cls_request_data ); /* ??? */
147
+
138
148
struct ceph_osd_data *
139
149
osd_req_op_cls_response_data (struct ceph_osd_request * osd_req ,
140
150
unsigned int which )
@@ -192,6 +202,17 @@ static void osd_req_op_cls_request_info_pagelist(
192
202
ceph_osd_data_pagelist_init (osd_data , pagelist );
193
203
}
194
204
205
+ void osd_req_op_cls_request_data_pagelist (
206
+ struct ceph_osd_request * osd_req ,
207
+ unsigned int which , struct ceph_pagelist * pagelist )
208
+ {
209
+ struct ceph_osd_data * osd_data ;
210
+
211
+ osd_data = osd_req_op_cls_request_data (osd_req , which );
212
+ ceph_osd_data_pagelist_init (osd_data , pagelist );
213
+ }
214
+ EXPORT_SYMBOL (osd_req_op_cls_request_data_pagelist );
215
+
195
216
void osd_req_op_cls_response_data_pages (struct ceph_osd_request * osd_req ,
196
217
unsigned int which , struct page * * pages , u64 length ,
197
218
u32 alignment , bool pages_from_pool , bool own_pages )
@@ -251,6 +272,7 @@ static void osd_req_op_data_release(struct ceph_osd_request *osd_req,
251
272
break ;
252
273
case CEPH_OSD_OP_CALL :
253
274
ceph_osd_data_release (& op -> cls .request_info );
275
+ ceph_osd_data_release (& op -> cls .request_data );
254
276
ceph_osd_data_release (& op -> cls .response_data );
255
277
break ;
256
278
default :
@@ -492,8 +514,7 @@ void osd_req_op_extent_update(struct ceph_osd_request *osd_req,
492
514
EXPORT_SYMBOL (osd_req_op_extent_update );
493
515
494
516
void osd_req_op_cls_init (struct ceph_osd_request * osd_req , unsigned int which ,
495
- u16 opcode , const char * class , const char * method ,
496
- const void * request_data , size_t request_data_size )
517
+ u16 opcode , const char * class , const char * method )
497
518
{
498
519
struct ceph_osd_req_op * op = osd_req_op_init (osd_req , which , opcode );
499
520
struct ceph_pagelist * pagelist ;
@@ -520,12 +541,6 @@ void osd_req_op_cls_init(struct ceph_osd_request *osd_req, unsigned int which,
520
541
ceph_pagelist_append (pagelist , method , size );
521
542
payload_len += size ;
522
543
523
- op -> cls .request_data = request_data ;
524
- BUG_ON (request_data_size > (size_t ) U32_MAX );
525
- op -> cls .request_data_len = (u32 ) request_data_size ;
526
- ceph_pagelist_append (pagelist , request_data , request_data_size );
527
- payload_len += request_data_size ;
528
-
529
544
osd_req_op_cls_request_info_pagelist (osd_req , which , pagelist );
530
545
531
546
op -> cls .argc = 0 ; /* currently unused */
@@ -576,7 +591,9 @@ static u64 osd_req_encode_op(struct ceph_osd_request *req,
576
591
struct ceph_osd_op * dst , unsigned int which )
577
592
{
578
593
struct ceph_osd_req_op * src ;
594
+ struct ceph_osd_data * osd_data ;
579
595
u64 request_data_len = 0 ;
596
+ u64 data_length ;
580
597
581
598
BUG_ON (which >= req -> r_num_ops );
582
599
src = & req -> r_ops [which ];
@@ -599,22 +616,31 @@ static u64 osd_req_encode_op(struct ceph_osd_request *req,
599
616
cpu_to_le64 (src -> extent .truncate_size );
600
617
dst -> extent .truncate_seq =
601
618
cpu_to_le32 (src -> extent .truncate_seq );
619
+ osd_data = & src -> extent .osd_data ;
602
620
if (src -> op == CEPH_OSD_OP_WRITE )
603
- ceph_osdc_msg_data_add (req -> r_request ,
604
- & src -> extent .osd_data );
621
+ ceph_osdc_msg_data_add (req -> r_request , osd_data );
605
622
else
606
- ceph_osdc_msg_data_add (req -> r_reply ,
607
- & src -> extent .osd_data );
623
+ ceph_osdc_msg_data_add (req -> r_reply , osd_data );
608
624
break ;
609
625
case CEPH_OSD_OP_CALL :
610
626
dst -> cls .class_len = src -> cls .class_len ;
611
627
dst -> cls .method_len = src -> cls .method_len ;
612
- dst -> cls .indata_len = cpu_to_le32 (src -> cls .request_data_len );
613
- ceph_osdc_msg_data_add (req -> r_reply , & src -> cls .response_data );
614
- ceph_osdc_msg_data_add (req -> r_request , & src -> cls .request_info );
615
- BUG_ON (src -> cls .request_info .type !=
616
- CEPH_OSD_DATA_TYPE_PAGELIST );
617
- request_data_len = src -> cls .request_info .pagelist -> length ;
628
+ osd_data = & src -> cls .request_info ;
629
+ ceph_osdc_msg_data_add (req -> r_request , osd_data );
630
+ BUG_ON (osd_data -> type != CEPH_OSD_DATA_TYPE_PAGELIST );
631
+ request_data_len = osd_data -> pagelist -> length ;
632
+
633
+ osd_data = & src -> cls .request_data ;
634
+ data_length = ceph_osd_data_length (osd_data );
635
+ if (data_length ) {
636
+ BUG_ON (osd_data -> type == CEPH_OSD_DATA_TYPE_NONE );
637
+ dst -> cls .indata_len = cpu_to_le32 (data_length );
638
+ ceph_osdc_msg_data_add (req -> r_request , osd_data );
639
+ src -> payload_len += data_length ;
640
+ request_data_len += data_length ;
641
+ }
642
+ osd_data = & src -> cls .response_data ;
643
+ ceph_osdc_msg_data_add (req -> r_reply , osd_data );
618
644
break ;
619
645
case CEPH_OSD_OP_STARTSYNC :
620
646
break ;
0 commit comments