ceph: flush cap releases when the session is flushed
authorXiubo Li <xiubli@redhat.com>
Tue, 7 Feb 2023 05:04:52 +0000 (13:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Feb 2023 18:18:03 +0000 (19:18 +0100)
commit e7d84c6a1296d059389f7342d9b4b7defb518d3a upstream.

MDS expects the completed cap release prior to responding to the
session flush for cache drop.

Cc: stable@vger.kernel.org
Link: http://tracker.ceph.com/issues/38009
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ceph/mds_client.c

index 78d052dc17987a0ee1f68c41e47fc8d432016ff2..0dc8871a4b66066d3ef774a5142a4a26c8f7ac0c 100644 (file)
@@ -3543,6 +3543,12 @@ static void handle_session(struct ceph_mds_session *session,
                break;
 
        case CEPH_SESSION_FLUSHMSG:
+               /* flush cap releases */
+               spin_lock(&session->s_cap_lock);
+               if (session->s_num_cap_releases)
+                       ceph_flush_cap_releases(mdsc, session);
+               spin_unlock(&session->s_cap_lock);
+
                send_flushmsg_ack(mdsc, session, seq);
                break;