@@ -2475,6 +2475,22 @@ static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry,
2475
2475
return r ;
2476
2476
}
2477
2477
2478
+ static void encode_timestamp_and_gids (void * * p ,
2479
+ const struct ceph_mds_request * req )
2480
+ {
2481
+ struct ceph_timespec ts ;
2482
+ int i ;
2483
+
2484
+ ceph_encode_timespec64 (& ts , & req -> r_stamp );
2485
+ ceph_encode_copy (p , & ts , sizeof (ts ));
2486
+
2487
+ /* gid_list */
2488
+ ceph_encode_32 (p , req -> r_cred -> group_info -> ngroups );
2489
+ for (i = 0 ; i < req -> r_cred -> group_info -> ngroups ; i ++ )
2490
+ ceph_encode_64 (p , from_kgid (& init_user_ns ,
2491
+ req -> r_cred -> group_info -> gid [i ]));
2492
+ }
2493
+
2478
2494
/*
2479
2495
* called under mdsc->mutex
2480
2496
*/
@@ -2491,7 +2507,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
2491
2507
u64 ino1 = 0 , ino2 = 0 ;
2492
2508
int pathlen1 = 0 , pathlen2 = 0 ;
2493
2509
bool freepath1 = false, freepath2 = false;
2494
- int len , i ;
2510
+ int len ;
2495
2511
u16 releases ;
2496
2512
void * p , * end ;
2497
2513
int ret ;
@@ -2517,17 +2533,10 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
2517
2533
goto out_free1 ;
2518
2534
}
2519
2535
2520
- if (legacy ) {
2521
- /* Old style */
2522
- len = sizeof (* head );
2523
- } else {
2524
- /* New style: add gid_list and any later fields */
2525
- len = sizeof (struct ceph_mds_request_head ) + sizeof (u32 ) +
2526
- (sizeof (u64 ) * req -> r_cred -> group_info -> ngroups );
2527
- }
2528
-
2536
+ len = legacy ? sizeof (* head ) : sizeof (struct ceph_mds_request_head );
2529
2537
len += pathlen1 + pathlen2 + 2 * (1 + sizeof (u32 ) + sizeof (u64 )) +
2530
2538
sizeof (struct ceph_timespec );
2539
+ len += sizeof (u32 ) + (sizeof (u64 ) * req -> r_cred -> group_info -> ngroups );
2531
2540
2532
2541
/* calculate (max) length for cap releases */
2533
2542
len += sizeof (struct ceph_mds_request_release ) *
@@ -2548,7 +2557,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
2548
2557
msg -> hdr .tid = cpu_to_le64 (req -> r_tid );
2549
2558
2550
2559
/*
2551
- * The old ceph_mds_request_header didn't contain a version field, and
2560
+ * The old ceph_mds_request_head didn't contain a version field, and
2552
2561
* one was added when we moved the message version from 3->4.
2553
2562
*/
2554
2563
if (legacy ) {
@@ -2609,20 +2618,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
2609
2618
2610
2619
head -> num_releases = cpu_to_le16 (releases );
2611
2620
2612
- /* time stamp */
2613
- {
2614
- struct ceph_timespec ts ;
2615
- ceph_encode_timespec64 (& ts , & req -> r_stamp );
2616
- ceph_encode_copy (& p , & ts , sizeof (ts ));
2617
- }
2618
-
2619
- /* gid list */
2620
- if (!legacy ) {
2621
- ceph_encode_32 (& p , req -> r_cred -> group_info -> ngroups );
2622
- for (i = 0 ; i < req -> r_cred -> group_info -> ngroups ; i ++ )
2623
- ceph_encode_64 (& p , from_kgid (& init_user_ns ,
2624
- req -> r_cred -> group_info -> gid [i ]));
2625
- }
2621
+ encode_timestamp_and_gids (& p , req );
2626
2622
2627
2623
if (WARN_ON_ONCE (p > end )) {
2628
2624
ceph_msg_put (msg );
@@ -2730,13 +2726,8 @@ static int __prepare_send_request(struct ceph_mds_session *session,
2730
2726
/* remove cap/dentry releases from message */
2731
2727
rhead -> num_releases = 0 ;
2732
2728
2733
- /* time stamp */
2734
2729
p = msg -> front .iov_base + req -> r_request_release_offset ;
2735
- {
2736
- struct ceph_timespec ts ;
2737
- ceph_encode_timespec64 (& ts , & req -> r_stamp );
2738
- ceph_encode_copy (& p , & ts , sizeof (ts ));
2739
- }
2730
+ encode_timestamp_and_gids (& p , req );
2740
2731
2741
2732
msg -> front .iov_len = p - msg -> front .iov_base ;
2742
2733
msg -> hdr .front_len = cpu_to_le32 (msg -> front .iov_len );
0 commit comments