@@ -978,20 +978,6 @@ int __ceph_caps_revoking_other(struct ceph_inode_info *ci,
978978 return 0 ;
979979}
980980
981- int ceph_caps_revoking (struct ceph_inode_info * ci , int mask )
982- {
983- struct inode * inode = & ci -> netfs .inode ;
984- struct ceph_client * cl = ceph_inode_to_client (inode );
985- int ret ;
986-
987- spin_lock (& ci -> i_ceph_lock );
988- ret = __ceph_caps_revoking_other (ci , NULL , mask );
989- spin_unlock (& ci -> i_ceph_lock );
990- doutc (cl , "%p %llx.%llx %s = %d\n" , inode , ceph_vinop (inode ),
991- ceph_cap_string (mask ), ret );
992- return ret ;
993- }
994-
995981int __ceph_caps_used (struct ceph_inode_info * ci )
996982{
997983 int used = 0 ;
@@ -2813,7 +2799,7 @@ void ceph_take_cap_refs(struct ceph_inode_info *ci, int got,
28132799 * requested from the MDS.
28142800 *
28152801 * Returns 0 if caps were not able to be acquired (yet), 1 if succeed,
2816- * or a negative error code. There are 3 speical error codes:
2802+ * or a negative error code. There are 3 special error codes:
28172803 * -EAGAIN: need to sleep but non-blocking is specified
28182804 * -EFBIG: ask caller to call check_max_size() and try again.
28192805 * -EUCLEAN: ask caller to call ceph_renew_caps() and try again.
@@ -4085,23 +4071,22 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
40854071 struct ceph_cap * cap , * tcap , * new_cap = NULL ;
40864072 struct ceph_inode_info * ci = ceph_inode (inode );
40874073 u64 t_cap_id ;
4088- unsigned mseq = le32_to_cpu (ex -> migrate_seq );
4089- unsigned t_seq , t_mseq ;
4074+ u32 t_issue_seq , t_mseq ;
40904075 int target , issued ;
40914076 int mds = session -> s_mds ;
40924077
40934078 if (ph ) {
40944079 t_cap_id = le64_to_cpu (ph -> cap_id );
4095- t_seq = le32_to_cpu (ph -> seq );
4080+ t_issue_seq = le32_to_cpu (ph -> issue_seq );
40964081 t_mseq = le32_to_cpu (ph -> mseq );
40974082 target = le32_to_cpu (ph -> mds );
40984083 } else {
4099- t_cap_id = t_seq = t_mseq = 0 ;
4084+ t_cap_id = t_issue_seq = t_mseq = 0 ;
41004085 target = -1 ;
41014086 }
41024087
4103- doutc (cl , "%p %llx.%llx ci %p mds %d mseq %d target %d \n" ,
4104- inode , ceph_vinop (inode ), ci , mds , mseq , target );
4088+ doutc (cl , " cap %llx.%llx export to peer %d piseq %u pmseq %u \n" ,
4089+ ceph_vinop (inode ), target , t_issue_seq , t_mseq );
41054090retry :
41064091 down_read (& mdsc -> snap_rwsem );
41074092 spin_lock (& ci -> i_ceph_lock );
@@ -4134,12 +4119,12 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
41344119 if (tcap ) {
41354120 /* already have caps from the target */
41364121 if (tcap -> cap_id == t_cap_id &&
4137- ceph_seq_cmp (tcap -> seq , t_seq ) < 0 ) {
4122+ ceph_seq_cmp (tcap -> seq , t_issue_seq ) < 0 ) {
41384123 doutc (cl , " updating import cap %p mds%d\n" , tcap ,
41394124 target );
41404125 tcap -> cap_id = t_cap_id ;
4141- tcap -> seq = t_seq - 1 ;
4142- tcap -> issue_seq = t_seq - 1 ;
4126+ tcap -> seq = t_issue_seq - 1 ;
4127+ tcap -> issue_seq = t_issue_seq - 1 ;
41434128 tcap -> issued |= issued ;
41444129 tcap -> implemented |= issued ;
41454130 if (cap == ci -> i_auth_cap ) {
@@ -4154,7 +4139,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
41544139 int flag = (cap == ci -> i_auth_cap ) ? CEPH_CAP_FLAG_AUTH : 0 ;
41554140 tcap = new_cap ;
41564141 ceph_add_cap (inode , tsession , t_cap_id , issued , 0 ,
4157- t_seq - 1 , t_mseq , (u64 )- 1 , flag , & new_cap );
4142+ t_issue_seq - 1 , t_mseq , (u64 )- 1 , flag , & new_cap );
41584143
41594144 if (!list_empty (& ci -> i_cap_flush_list ) &&
41604145 ci -> i_auth_cap == tcap ) {
@@ -4228,18 +4213,22 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
42284213 u64 realmino = le64_to_cpu (im -> realm );
42294214 u64 cap_id = le64_to_cpu (im -> cap_id );
42304215 u64 p_cap_id ;
4216+ u32 piseq = 0 ;
4217+ u32 pmseq = 0 ;
42314218 int peer ;
42324219
42334220 if (ph ) {
42344221 p_cap_id = le64_to_cpu (ph -> cap_id );
42354222 peer = le32_to_cpu (ph -> mds );
4223+ piseq = le32_to_cpu (ph -> issue_seq );
4224+ pmseq = le32_to_cpu (ph -> mseq );
42364225 } else {
42374226 p_cap_id = 0 ;
42384227 peer = -1 ;
42394228 }
42404229
4241- doutc (cl , "%p %llx.%llx ci %p mds %d mseq %d peer %d \n" ,
4242- inode , ceph_vinop (inode ), ci , mds , mseq , peer );
4230+ doutc (cl , " cap %llx.%llx import from peer %d piseq %u pmseq %u \n" ,
4231+ ceph_vinop (inode ), peer , piseq , pmseq );
42434232retry :
42444233 cap = __get_cap_for_mds (ci , mds );
42454234 if (!cap ) {
@@ -4268,15 +4257,13 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
42684257 doutc (cl , " remove export cap %p mds%d flags %d\n" ,
42694258 ocap , peer , ph -> flags );
42704259 if ((ph -> flags & CEPH_CAP_FLAG_AUTH ) &&
4271- (ocap -> seq != le32_to_cpu ( ph -> seq ) ||
4272- ocap -> mseq != le32_to_cpu ( ph -> mseq ) )) {
4260+ (ocap -> seq != piseq ||
4261+ ocap -> mseq != pmseq )) {
42734262 pr_err_ratelimited_client (cl , "mismatched seq/mseq: "
42744263 "%p %llx.%llx mds%d seq %d mseq %d"
42754264 " importer mds%d has peer seq %d mseq %d\n" ,
42764265 inode , ceph_vinop (inode ), peer ,
4277- ocap -> seq , ocap -> mseq , mds ,
4278- le32_to_cpu (ph -> seq ),
4279- le32_to_cpu (ph -> mseq ));
4266+ ocap -> seq , ocap -> mseq , mds , piseq , pmseq );
42804267 }
42814268 ceph_remove_cap (mdsc , ocap , (ph -> flags & CEPH_CAP_FLAG_RELEASE ));
42824269 }
@@ -4350,7 +4337,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
43504337 struct ceph_snap_realm * realm = NULL ;
43514338 int op ;
43524339 int msg_version = le16_to_cpu (msg -> hdr .version );
4353- u32 seq , mseq ;
4340+ u32 seq , mseq , issue_seq ;
43544341 struct ceph_vino vino ;
43554342 void * snaptrace ;
43564343 size_t snaptrace_len ;
@@ -4360,8 +4347,6 @@ void ceph_handle_caps(struct ceph_mds_session *session,
43604347 bool close_sessions = false;
43614348 bool do_cap_release = false;
43624349
4363- doutc (cl , "from mds%d\n" , session -> s_mds );
4364-
43654350 if (!ceph_inc_mds_stopping_blocker (mdsc , session ))
43664351 return ;
43674352
@@ -4375,6 +4360,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
43754360 vino .snap = CEPH_NOSNAP ;
43764361 seq = le32_to_cpu (h -> seq );
43774362 mseq = le32_to_cpu (h -> migrate_seq );
4363+ issue_seq = le32_to_cpu (h -> issue_seq );
43784364
43794365 snaptrace = h + 1 ;
43804366 snaptrace_len = le32_to_cpu (h -> snap_trace_len );
@@ -4462,12 +4448,11 @@ void ceph_handle_caps(struct ceph_mds_session *session,
44624448
44634449 /* lookup ino */
44644450 inode = ceph_find_inode (mdsc -> fsc -> sb , vino );
4465- doutc (cl , " op %s ino %llx.%llx inode %p\n" , ceph_cap_op_name (op ),
4466- vino .ino , vino .snap , inode );
4451+ doutc (cl , " caps mds%d op %s ino %llx.%llx inode %p seq %u iseq %u mseq %u\n" ,
4452+ session -> s_mds , ceph_cap_op_name (op ), vino .ino , vino .snap , inode ,
4453+ seq , issue_seq , mseq );
44674454
44684455 mutex_lock (& session -> s_mutex );
4469- doutc (cl , " mds%d seq %lld cap seq %u\n" , session -> s_mds ,
4470- session -> s_seq , (unsigned )seq );
44714456
44724457 if (!inode ) {
44734458 doutc (cl , " i don't have ino %llx\n" , vino .ino );
0 commit comments