hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/fs/ceph/mds_client.c
....@@ -3496,6 +3496,12 @@
34963496 break;
34973497
34983498 case CEPH_SESSION_FLUSHMSG:
3499
+ /* flush cap releases */
3500
+ spin_lock(&session->s_cap_lock);
3501
+ if (session->s_num_cap_releases)
3502
+ ceph_flush_cap_releases(mdsc, session);
3503
+ spin_unlock(&session->s_cap_lock);
3504
+
34993505 send_flushmsg_ack(mdsc, session, seq);
35003506 break;
35013507
....@@ -4505,7 +4511,7 @@
45054511
45064512 dout("mdsc delayed_work\n");
45074513
4508
- if (mdsc->stopping)
4514
+ if (mdsc->stopping >= CEPH_MDSC_STOPPING_FLUSHED)
45094515 return;
45104516
45114517 mutex_lock(&mdsc->mutex);
....@@ -4695,7 +4701,7 @@
46954701 void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc)
46964702 {
46974703 dout("pre_umount\n");
4698
- mdsc->stopping = 1;
4704
+ mdsc->stopping = CEPH_MDSC_STOPPING_BEGIN;
46994705
47004706 ceph_mdsc_iterate_sessions(mdsc, send_flush_mdlog, true);
47014707 ceph_mdsc_iterate_sessions(mdsc, lock_unlock_session, false);