diff mbox series

cifs: release leases for deferred close handles when freezing

Message ID CAH2r5mtcjLkmWqRTZnZaXzvXZWHka_73nN1nSq0a=KQZ4hA4eA@mail.gmail.com (mailing list archive)
State New, archived
Headers show
Series cifs: release leases for deferred close handles when freezing | expand

Commit Message

Steve French May 10, 2023, 10:51 p.m. UTC
We should not be caching closed files when freeze is invoked on an fs
so we can release resources more gracefully).

Fixes xfstests generic/068 generic/390 generic/491

See attached.
diff mbox series

Patch

From d39fc592ef8ae9a89c5e85c8d9f760937a57d5ba Mon Sep 17 00:00:00 2001
From: Steve French <stfrench@microsoft.com>
Date: Wed, 10 May 2023 17:42:21 -0500
Subject: [PATCH] cifs: release leases for deferred close handles when freezing

We should not be caching closed files when freeze is invoked on an fs
(so we can release resources more gracefully).

Fixes xfstests generic/068 generic/390 generic/491

Reviewed-by: David Howells <dhowells@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
---
 fs/cifs/cifsfs.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index 8b6b3b6985f3..43a4d8603db3 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -760,6 +760,20 @@  static void cifs_umount_begin(struct super_block *sb)
 	return;
 }
 
+static int cifs_freeze(struct super_block *sb)
+{
+	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
+	struct cifs_tcon *tcon;
+
+	if (cifs_sb == NULL)
+		return 0;
+
+	tcon = cifs_sb_master_tcon(cifs_sb);
+
+	cifs_close_all_deferred_files(tcon);
+	return 0;
+}
+
 #ifdef CONFIG_CIFS_STATS2
 static int cifs_show_stats(struct seq_file *s, struct dentry *root)
 {
@@ -798,6 +812,7 @@  static const struct super_operations cifs_super_ops = {
 	as opens */
 	.show_options = cifs_show_options,
 	.umount_begin   = cifs_umount_begin,
+	.freeze_fs      = cifs_freeze,
 #ifdef CONFIG_CIFS_STATS2
 	.show_stats = cifs_show_stats,
 #endif
-- 
2.34.1