Blame SOURCES/0038-fs-ntfs3-Init-spi-more-in-init_fs_context-than-fill_.patch

Kmods SIG 63c143
From 27fac77707a1d99deef33fd5f3f5f2ed96bfbf6a Mon Sep 17 00:00:00 2001
Kmods SIG 63c143
From: Kari Argillander <kari.argillander@gmail.com>
Kmods SIG 63c143
Date: Tue, 7 Sep 2021 18:35:53 +0300
Kmods SIG 63c143
Subject: [Backport 27fac77707a1] src: Init spi more in init_fs_context
Kmods SIG 63c143
 than fill_super
Kmods SIG 63c143
Kmods SIG 63c143
init_fs_context() is meant to initialize s_fs_info (spi). Move spi
Kmods SIG 63c143
initializing code there which we can initialize before fill_super().
Kmods SIG 63c143
Kmods SIG 63c143
Signed-off-by: Kari Argillander <kari.argillander@gmail.com>
Kmods SIG 63c143
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Kmods SIG 63c143
---
Kmods SIG 63c143
 src/super.c | 41 ++++++++++++++++++++++-------------------
Kmods SIG 63c143
 1 file changed, 22 insertions(+), 19 deletions(-)
Kmods SIG 63c143
Kmods SIG 63c143
diff --git a/src/super.c b/src/super.c
Kmods SIG 63c143
index befa78d3cb26767e401c84cc87a40006c4603186..420cd140917007d9edb3072e19f77c87139f8f20 100644
Kmods SIG 63c143
--- a/src/super.c
Kmods SIG 63c143
+++ b/src/super.c
Kmods SIG 63c143
@@ -887,7 +887,7 @@ static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc)
Kmods SIG 63c143
 	const struct VOLUME_INFO *info;
Kmods SIG 63c143
 	u32 idx, done, bytes;
Kmods SIG 63c143
 	struct ATTR_DEF_ENTRY *t;
Kmods SIG 63c143
-	u16 *upcase = NULL;
Kmods SIG 63c143
+	u16 *upcase;
Kmods SIG 63c143
 	u16 *shared;
Kmods SIG 63c143
 	bool is_ro;
Kmods SIG 63c143
 	struct MFT_REF ref;
Kmods SIG 63c143
@@ -902,9 +902,6 @@ static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc)
Kmods SIG 63c143
 	sb->s_time_gran = NTFS_TIME_GRAN; // 100 nsec
Kmods SIG 63c143
 	sb->s_xattr = ntfs_xattr_handlers;
Kmods SIG 63c143
 
Kmods SIG 63c143
-	ratelimit_state_init(&sbi->msg_ratelimit, DEFAULT_RATELIMIT_INTERVAL,
Kmods SIG 63c143
-			     DEFAULT_RATELIMIT_BURST);
Kmods SIG 63c143
-
Kmods SIG 63c143
 	sbi->options->nls = ntfs_load_nls(sbi->options->nls_name);
Kmods SIG 63c143
 	if (IS_ERR(sbi->options->nls)) {
Kmods SIG 63c143
 		sbi->options->nls = NULL;
Kmods SIG 63c143
@@ -934,12 +931,6 @@ static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc)
Kmods SIG 63c143
 	sb->s_maxbytes = 0xFFFFFFFFull << sbi->cluster_bits;
Kmods SIG 63c143
 #endif
Kmods SIG 63c143
 
Kmods SIG 63c143
-	mutex_init(&sbi->compress.mtx_lznt);
Kmods SIG 63c143
-#ifdef CONFIG_NTFS3_LZX_XPRESS
Kmods SIG 63c143
-	mutex_init(&sbi->compress.mtx_xpress);
Kmods SIG 63c143
-	mutex_init(&sbi->compress.mtx_lzx);
Kmods SIG 63c143
-#endif
Kmods SIG 63c143
-
Kmods SIG 63c143
 	/*
Kmods SIG 63c143
 	 * Load $Volume. This should be done before $LogFile
Kmods SIG 63c143
 	 * 'cause 'sbi->volume.ni' is used 'ntfs_set_state'.
Kmods SIG 63c143
@@ -1224,11 +1215,7 @@ static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc)
Kmods SIG 63c143
 		goto out;
Kmods SIG 63c143
 	}
Kmods SIG 63c143
 
Kmods SIG 63c143
-	sbi->upcase = upcase = kvmalloc(0x10000 * sizeof(short), GFP_KERNEL);
Kmods SIG 63c143
-	if (!upcase) {
Kmods SIG 63c143
-		err = -ENOMEM;
Kmods SIG 63c143
-		goto out;
Kmods SIG 63c143
-	}
Kmods SIG 63c143
+	upcase = sbi->upcase;
Kmods SIG 63c143
 
Kmods SIG 63c143
 	for (idx = 0; idx < (0x10000 * sizeof(short) >> PAGE_SHIFT); idx++) {
Kmods SIG 63c143
 		const __le16 *src;
Kmods SIG 63c143
@@ -1440,10 +1427,21 @@ static int ntfs_init_fs_context(struct fs_context *fc)
Kmods SIG 63c143
 		goto ok;
Kmods SIG 63c143
 
Kmods SIG 63c143
 	sbi = kzalloc(sizeof(struct ntfs_sb_info), GFP_NOFS);
Kmods SIG 63c143
-	if (!sbi) {
Kmods SIG 63c143
-		kfree(opts);
Kmods SIG 63c143
-		return -ENOMEM;
Kmods SIG 63c143
-	}
Kmods SIG 63c143
+	if (!sbi)
Kmods SIG 63c143
+		goto free_opts;
Kmods SIG 63c143
+
Kmods SIG 63c143
+	sbi->upcase = kvmalloc(0x10000 * sizeof(short), GFP_KERNEL);
Kmods SIG 63c143
+	if (!sbi->upcase)
Kmods SIG 63c143
+		goto free_sbi;
Kmods SIG 63c143
+
Kmods SIG 63c143
+	ratelimit_state_init(&sbi->msg_ratelimit, DEFAULT_RATELIMIT_INTERVAL,
Kmods SIG 63c143
+			     DEFAULT_RATELIMIT_BURST);
Kmods SIG 63c143
+
Kmods SIG 63c143
+	mutex_init(&sbi->compress.mtx_lznt);
Kmods SIG 63c143
+#ifdef CONFIG_NTFS3_LZX_XPRESS
Kmods SIG 63c143
+	mutex_init(&sbi->compress.mtx_xpress);
Kmods SIG 63c143
+	mutex_init(&sbi->compress.mtx_lzx);
Kmods SIG 63c143
+#endif
Kmods SIG 63c143
 
Kmods SIG 63c143
 	sbi->options = opts;
Kmods SIG 63c143
 	fc->s_fs_info = sbi;
Kmods SIG 63c143
@@ -1452,6 +1450,11 @@ static int ntfs_init_fs_context(struct fs_context *fc)
Kmods SIG 63c143
 	fc->ops = &ntfs_context_ops;
Kmods SIG 63c143
 
Kmods SIG 63c143
 	return 0;
Kmods SIG 63c143
+free_opts:
Kmods SIG 63c143
+	kfree(opts);
Kmods SIG 63c143
+free_sbi:
Kmods SIG 63c143
+	kfree(sbi);
Kmods SIG 63c143
+	return -ENOMEM;
Kmods SIG 63c143
 }
Kmods SIG 63c143
 
Kmods SIG 63c143
 // clang-format off
Kmods SIG 63c143
-- 
Kmods SIG 63c143
2.31.1
Kmods SIG 63c143