]> git.itanic.dy.fi Git - linux-stable/commitdiff
cifs: release leases for deferred close handles when freezing
authorSteve French <stfrench@microsoft.com>
Wed, 10 May 2023 22:42:21 +0000 (17:42 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 09:50:22 +0000 (11:50 +0200)
commit d39fc592ef8ae9a89c5e85c8d9f760937a57d5ba upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/cifs/cifsfs.c

index 26f87437b2dd72a63f20968bcd8f92931acade92..1820f840697809e53becfa5a6fd178094d8243eb 100644 (file)
@@ -730,6 +730,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)
 {
@@ -761,6 +775,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