@@ -749,8 +749,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
749749
750750 ceph_con_init (& s -> s_con , s , & mds_con_ops , & mdsc -> fsc -> client -> msgr );
751751
752- spin_lock_init (& s -> s_gen_ttl_lock );
753- s -> s_cap_gen = 1 ;
752+ atomic_set (& s -> s_cap_gen , 1 );
754753 s -> s_cap_ttl = jiffies - 1 ;
755754
756755 spin_lock_init (& s -> s_cap_lock );
@@ -1763,7 +1762,7 @@ static int wake_up_session_cb(struct inode *inode, struct ceph_cap *cap,
17631762 ci -> i_requested_max_size = 0 ;
17641763 spin_unlock (& ci -> i_ceph_lock );
17651764 } else if (ev == RENEWCAPS ) {
1766- if (cap -> cap_gen < cap -> session -> s_cap_gen ) {
1765+ if (cap -> cap_gen < atomic_read ( & cap -> session -> s_cap_gen ) ) {
17671766 /* mds did not re-issue stale cap */
17681767 spin_lock (& ci -> i_ceph_lock );
17691768 cap -> issued = cap -> implemented = CEPH_CAP_PIN ;
@@ -3501,10 +3500,8 @@ static void handle_session(struct ceph_mds_session *session,
35013500 case CEPH_SESSION_STALE :
35023501 pr_info ("mds%d caps went stale, renewing\n" ,
35033502 session -> s_mds );
3504- spin_lock (& session -> s_gen_ttl_lock );
3505- session -> s_cap_gen ++ ;
3503+ atomic_inc (& session -> s_cap_gen );
35063504 session -> s_cap_ttl = jiffies - 1 ;
3507- spin_unlock (& session -> s_gen_ttl_lock );
35083505 send_renew_caps (mdsc , session );
35093506 break ;
35103507
@@ -3773,7 +3770,7 @@ static int reconnect_caps_cb(struct inode *inode, struct ceph_cap *cap,
37733770 cap -> seq = 0 ; /* reset cap seq */
37743771 cap -> issue_seq = 0 ; /* and issue_seq */
37753772 cap -> mseq = 0 ; /* and migrate_seq */
3776- cap -> cap_gen = cap -> session -> s_cap_gen ;
3773+ cap -> cap_gen = atomic_read ( & cap -> session -> s_cap_gen ) ;
37773774
37783775 /* These are lost when the session goes away */
37793776 if (S_ISDIR (inode -> i_mode )) {
@@ -4013,9 +4010,7 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
40134010 dout ("session %p state %s\n" , session ,
40144011 ceph_session_state_name (session -> s_state ));
40154012
4016- spin_lock (& session -> s_gen_ttl_lock );
4017- session -> s_cap_gen ++ ;
4018- spin_unlock (& session -> s_gen_ttl_lock );
4013+ atomic_inc (& session -> s_cap_gen );
40194014
40204015 spin_lock (& session -> s_cap_lock );
40214016 /* don't know if session is readonly */
@@ -4346,7 +4341,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
43464341
43474342 case CEPH_MDS_LEASE_RENEW :
43484343 if (di -> lease_session == session &&
4349- di -> lease_gen == session -> s_cap_gen &&
4344+ di -> lease_gen == atomic_read ( & session -> s_cap_gen ) &&
43504345 di -> lease_renew_from &&
43514346 di -> lease_renew_after == 0 ) {
43524347 unsigned long duration =
0 commit comments