ceph: fix request time stamp encoding
struct timespec uses 'long' to present second and nanosecond. 'long' is 64 bits on 64bits machine. ceph MDS expects time stamp to be encoded as struct ceph_timespec, which uses 'u32' to present second and nanosecond. Signed-off-by: Yan, Zheng <zyan@redhat.com>
This commit is contained in:
		
							parent
							
								
									fcc02d2a03
								
							
						
					
					
						commit
						1f041a89b4
					
				| @ -1939,7 +1939,11 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc, | ||||
| 	head->num_releases = cpu_to_le16(releases); | ||||
| 
 | ||||
| 	/* time stamp */ | ||||
| 	ceph_encode_copy(&p, &req->r_stamp, sizeof(req->r_stamp)); | ||||
| 	{ | ||||
| 		struct ceph_timespec ts; | ||||
| 		ceph_encode_timespec(&ts, &req->r_stamp); | ||||
| 		ceph_encode_copy(&p, &ts, sizeof(ts)); | ||||
| 	} | ||||
| 
 | ||||
| 	BUG_ON(p > end); | ||||
| 	msg->front.iov_len = p - msg->front.iov_base; | ||||
| @ -2028,7 +2032,11 @@ static int __prepare_send_request(struct ceph_mds_client *mdsc, | ||||
| 
 | ||||
| 		/* time stamp */ | ||||
| 		p = msg->front.iov_base + req->r_request_release_offset; | ||||
| 		ceph_encode_copy(&p, &req->r_stamp, sizeof(req->r_stamp)); | ||||
| 		{ | ||||
| 			struct ceph_timespec ts; | ||||
| 			ceph_encode_timespec(&ts, &req->r_stamp); | ||||
| 			ceph_encode_copy(&p, &ts, sizeof(ts)); | ||||
| 		} | ||||
| 
 | ||||
| 		msg->front.iov_len = p - msg->front.iov_base; | ||||
| 		msg->hdr.front_len = cpu_to_le32(msg->front.iov_len); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user