@@ -407,9 +407,10 @@ static int parse_reply_info_trace(void **p, void *end,
407407 * parse readdir results
408408 */
409409static int parse_reply_info_readdir (void * * p , void * end ,
410- struct ceph_mds_reply_info_parsed * info ,
411- u64 features )
410+ struct ceph_mds_request * req ,
411+ u64 features )
412412{
413+ struct ceph_mds_reply_info_parsed * info = & req -> r_reply_info ;
413414 u32 num , i = 0 ;
414415 int err ;
415416
@@ -651,15 +652,16 @@ static int parse_reply_info_getvxattr(void **p, void *end,
651652 * parse extra results
652653 */
653654static int parse_reply_info_extra (void * * p , void * end ,
654- struct ceph_mds_reply_info_parsed * info ,
655+ struct ceph_mds_request * req ,
655656 u64 features , struct ceph_mds_session * s )
656657{
658+ struct ceph_mds_reply_info_parsed * info = & req -> r_reply_info ;
657659 u32 op = le32_to_cpu (info -> head -> op );
658660
659661 if (op == CEPH_MDS_OP_GETFILELOCK )
660662 return parse_reply_info_filelock (p , end , info , features );
661663 else if (op == CEPH_MDS_OP_READDIR || op == CEPH_MDS_OP_LSSNAP )
662- return parse_reply_info_readdir (p , end , info , features );
664+ return parse_reply_info_readdir (p , end , req , features );
663665 else if (op == CEPH_MDS_OP_CREATE )
664666 return parse_reply_info_create (p , end , info , features , s );
665667 else if (op == CEPH_MDS_OP_GETVXATTR )
@@ -672,9 +674,9 @@ static int parse_reply_info_extra(void **p, void *end,
672674 * parse entire mds reply
673675 */
674676static int parse_reply_info (struct ceph_mds_session * s , struct ceph_msg * msg ,
675- struct ceph_mds_reply_info_parsed * info ,
676- u64 features )
677+ struct ceph_mds_request * req , u64 features )
677678{
679+ struct ceph_mds_reply_info_parsed * info = & req -> r_reply_info ;
678680 void * p , * end ;
679681 u32 len ;
680682 int err ;
@@ -696,7 +698,7 @@ static int parse_reply_info(struct ceph_mds_session *s, struct ceph_msg *msg,
696698 ceph_decode_32_safe (& p , end , len , bad );
697699 if (len > 0 ) {
698700 ceph_decode_need (& p , end , len , bad );
699- err = parse_reply_info_extra (& p , p + len , info , features , s );
701+ err = parse_reply_info_extra (& p , p + len , req , features , s );
700702 if (err < 0 )
701703 goto out_bad ;
702704 }
@@ -3598,14 +3600,15 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
35983600 }
35993601
36003602 dout ("handle_reply tid %lld result %d\n" , tid , result );
3601- rinfo = & req -> r_reply_info ;
36023603 if (test_bit (CEPHFS_FEATURE_REPLY_ENCODING , & session -> s_features ))
3603- err = parse_reply_info (session , msg , rinfo , (u64 )- 1 );
3604+ err = parse_reply_info (session , msg , req , (u64 )- 1 );
36043605 else
3605- err = parse_reply_info (session , msg , rinfo , session -> s_con .peer_features );
3606+ err = parse_reply_info (session , msg , req ,
3607+ session -> s_con .peer_features );
36063608 mutex_unlock (& mdsc -> mutex );
36073609
36083610 /* Must find target inode outside of mutexes to avoid deadlocks */
3611+ rinfo = & req -> r_reply_info ;
36093612 if ((err >= 0 ) && rinfo -> head -> is_target ) {
36103613 struct inode * in = xchg (& req -> r_new_inode , NULL );
36113614 struct ceph_vino tvino = {
0 commit comments