@@ -975,10 +975,12 @@ static int send_cap_msg(struct ceph_mds_session *session,
975
975
kuid_t uid , kgid_t gid , umode_t mode ,
976
976
u64 xattr_version ,
977
977
struct ceph_buffer * xattrs_buf ,
978
- u64 follows )
978
+ u64 follows , bool inline_data )
979
979
{
980
980
struct ceph_mds_caps * fc ;
981
981
struct ceph_msg * msg ;
982
+ void * p ;
983
+ size_t extra_len ;
982
984
983
985
dout ("send_cap_msg %s %llx %llx caps %s wanted %s dirty %s"
984
986
" seq %u/%u mseq %u follows %lld size %llu/%llu"
@@ -988,7 +990,10 @@ static int send_cap_msg(struct ceph_mds_session *session,
988
990
seq , issue_seq , mseq , follows , size , max_size ,
989
991
xattr_version , xattrs_buf ? (int )xattrs_buf -> vec .iov_len : 0 );
990
992
991
- msg = ceph_msg_new (CEPH_MSG_CLIENT_CAPS , sizeof (* fc ), GFP_NOFS , false);
993
+ /* flock buffer size + inline version + inline data size */
994
+ extra_len = 4 + 8 + 4 ;
995
+ msg = ceph_msg_new (CEPH_MSG_CLIENT_CAPS , sizeof (* fc ) + extra_len ,
996
+ GFP_NOFS , false);
992
997
if (!msg )
993
998
return - ENOMEM ;
994
999
@@ -1020,6 +1025,14 @@ static int send_cap_msg(struct ceph_mds_session *session,
1020
1025
fc -> gid = cpu_to_le32 (from_kgid (& init_user_ns , gid ));
1021
1026
fc -> mode = cpu_to_le32 (mode );
1022
1027
1028
+ p = fc + 1 ;
1029
+ /* flock buffer size */
1030
+ ceph_encode_32 (& p , 0 );
1031
+ /* inline version */
1032
+ ceph_encode_64 (& p , inline_data ? 0 : CEPH_INLINE_NONE );
1033
+ /* inline data size */
1034
+ ceph_encode_32 (& p , 0 );
1035
+
1023
1036
fc -> xattr_version = cpu_to_le64 (xattr_version );
1024
1037
if (xattrs_buf ) {
1025
1038
msg -> middle = ceph_buffer_get (xattrs_buf );
@@ -1126,6 +1139,7 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
1126
1139
u64 flush_tid = 0 ;
1127
1140
int i ;
1128
1141
int ret ;
1142
+ bool inline_data ;
1129
1143
1130
1144
held = cap -> issued | cap -> implemented ;
1131
1145
revoking = cap -> implemented & ~cap -> issued ;
@@ -1209,13 +1223,15 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
1209
1223
xattr_version = ci -> i_xattrs .version ;
1210
1224
}
1211
1225
1226
+ inline_data = ci -> i_inline_version != CEPH_INLINE_NONE ;
1227
+
1212
1228
spin_unlock (& ci -> i_ceph_lock );
1213
1229
1214
1230
ret = send_cap_msg (session , ceph_vino (inode ).ino , cap_id ,
1215
1231
op , keep , want , flushing , seq , flush_tid , issue_seq , mseq ,
1216
1232
size , max_size , & mtime , & atime , time_warp_seq ,
1217
1233
uid , gid , mode , xattr_version , xattr_blob ,
1218
- follows );
1234
+ follows , inline_data );
1219
1235
if (ret < 0 ) {
1220
1236
dout ("error sending cap msg, must requeue %p\n" , inode );
1221
1237
delayed = 1 ;
@@ -1336,7 +1352,7 @@ void __ceph_flush_snaps(struct ceph_inode_info *ci,
1336
1352
capsnap -> time_warp_seq ,
1337
1353
capsnap -> uid , capsnap -> gid , capsnap -> mode ,
1338
1354
capsnap -> xattr_version , capsnap -> xattr_blob ,
1339
- capsnap -> follows );
1355
+ capsnap -> follows , capsnap -> inline_data );
1340
1356
1341
1357
next_follows = capsnap -> follows + 1 ;
1342
1358
ceph_put_cap_snap (capsnap );
0 commit comments