Skip to contentSkip to conversation

nfsd: mark CONFIG_NFSD_FAULT_INJECTION as deprecated

PATCH In review Jeff Layton 3 participants 3 messages Aug 6, 2014 – Aug 12, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 nfsd: mark CONFIG_NFSD_FAULT_INJECTION as deprecated

The fault injection code is shaky at best. If you have a lot of stateful objects, then you can end up overflowing the client's refcount. The code is not widely used and is starting to become a maintenance burden mark it DEPRECATED and document that we'll remove it in v3.19.

---
 fs/nfsd/Kconfig | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
fs/nfsd/Kconfig +4 -1
index f994e750e0d1..aad734c0b48a 100644
@@ -98,11 +98,14 @@ config NFSD_V4_SECURITY_LABEL
 	For now we recommend "Y" only for developers and testers.
 
 config NFSD_FAULT_INJECTION
-	bool "NFS server manual fault injection"
+	bool "NFS server manual fault injection (DEPRECATED)"
 	depends on NFSD_V4 && DEBUG_KERNEL
 	help
 	  This option enables support for manually injecting faults
 	  into the NFS server.  This is intended to be used for
 	  testing error recovery on the NFS client.
 
+	  This feature should not be enabled on production systems
+	  and will be removed in v3.19.
+
 	  If unsure, say N.
Signature · 1 line
1.9.3
#1 lore raw
Quoted 4 lines · Jeff Layton

The fault injection code is shaky at best. If you have a lot of stateful objects, then you can end up overflowing the client's refcount. The code is not widely used and is starting to become a maintenance burden mark it DEPRECATED and document that we'll remove it in v3.19.

I doubt anyone will notice a config text change on upgrade.

If we think a deprecation warning's necessary then it would be more useful to put it in a printk() that fires the first time somebody uses one of these.

--b.

Quoted 29 lines
---
 fs/nfsd/Kconfig | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
fs/nfsd/Kconfig +4 -1
index f994e750e0d1..aad734c0b48a 100644
@@ -98,11 +98,14 @@ config NFSD_V4_SECURITY_LABEL
 	For now we recommend "Y" only for developers and testers.
 
 config NFSD_FAULT_INJECTION
-	bool "NFS server manual fault injection"
+	bool "NFS server manual fault injection (DEPRECATED)"
 	depends on NFSD_V4 && DEBUG_KERNEL
 	help
 	  This option enables support for manually injecting faults
 	  into the NFS server.  This is intended to be used for
 	  testing error recovery on the NFS client.
 
+	  This feature should not be enabled on production systems
+	  and will be removed in v3.19.
+
 	  If unsure, say N.
Signature · 1 line
1.9.3
#2 lore raw
Quoted 36 lines · On Tue, 12 Aug 2014 14:48:49 -0400 "J. Bruce Fields" <[email protected]>…
Quoted 4 lines · Jeff Layton

The fault injection code is shaky at best. If you have a lot of stateful objects, then you can end up overflowing the client's refcount. The code is not widely used and is starting to become a maintenance burden mark it DEPRECATED and document that we'll remove it in v3.19.

I doubt anyone will notice a config text change on upgrade.

If we think a deprecation warning's necessary then it would be more useful to put it in a printk() that fires the first time somebody uses one of these.

--b.

Quoted 22 lines
---
 fs/nfsd/Kconfig | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
fs/nfsd/Kconfig +1 -1
index f994e750e0d1..aad734c0b48a 100644
@@ -98,11 +98,14 @@ config NFSD_V4_SECURITY_LABEL
 	For now we recommend "Y" only for developers and testers.
 
 config NFSD_FAULT_INJECTION
-	bool "NFS server manual fault injection"
+	bool "NFS server manual fault injection (DEPRECATED)"
 	depends on NFSD_V4 && DEBUG_KERNEL
 	help
 	  This option enables support for manually injecting faults
 	  into the NFS server.  This is intended to be used for
 	  testing error recovery on the NFS client.
 
Quoted 7 lines
Quoted 7 lines
fs/nfsd/Kconfig +3 -0
+	  This feature should not be enabled on production systems
+	  and will be removed in v3.19.
+
 	  If unsure, say N.
Signature · 1 line
1.9.3

Good point. Maybe something like this patch then? The printk is a little sparse, but I'm not sure what else we should say there...

-----------------------[snip]--------------------------

[PATCH] nfsd: mark CONFIG_NFSD_FAULT_INJECTION as deprecated

The fault injection code is shaky at best. If you have a lot of stateful objects, then you can end up overflowing the client's refcount. The code is not widely used and is starting to become a maintenance burden. Mark it DEPRECATED and document that we'll remove it in v3.19.

Also add a printk that will fire once whenever someone tries to use this facility.

Cc Anna Schumaker <[email protected]>
---
 fs/nfsd/Kconfig        |  5 ++++-
 fs/nfsd/fault_inject.c | 16 ++++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)
fs/nfsd/Kconfig +4 -1
index f994e750e0d1..aad734c0b48a 100644
@@ -98,11 +98,14 @@ config NFSD_V4_SECURITY_LABEL
 	For now we recommend "Y" only for developers and testers.
 
 config NFSD_FAULT_INJECTION
-	bool "NFS server manual fault injection"
+	bool "NFS server manual fault injection (DEPRECATED)"
 	depends on NFSD_V4 && DEBUG_KERNEL
 	help
 	  This option enables support for manually injecting faults
 	  into the NFS server.  This is intended to be used for
 	  testing error recovery on the NFS client.
 
+	  This feature should not be enabled on production systems
+	  and will be removed in v3.19.
+
 	  If unsure, say N.
fs/nfsd/fault_inject.c +16 -0
index c16bf5af6831..91874de13ae4 100644
@@ -24,6 +24,18 @@ struct nfsd_fault_inject_op {
 
 static struct dentry *debug_dir;
 
+static void
+warn_deprecated(void)
+{
+	static bool warned = false;
+
+	if (!warned) {
+		pr_notice("nfsd: the NFSD fault injection framework is "
+			  "scheduled for removal in v3.19.\n");
+		warned = true;
+	}
+}
+
 static ssize_t fault_inject_read(struct file *file, char __user *buf,
 				 size_t len, loff_t *ppos)
 {
@@ -33,6 +45,8 @@ static ssize_t fault_inject_read(struct file *file, char __user *buf,
 	loff_t pos = *ppos;
 	struct nfsd_fault_inject_op *op = file_inode(file)->i_private;
 
+	warn_deprecated();
+
 	if (!pos)
 		val = op->get();
 	size = scnprintf(read_buf, sizeof(read_buf), "%llu\n", val);
@@ -51,6 +65,8 @@ static ssize_t fault_inject_write(struct file *file, const char __user *buf,
 	u64 val;
 	char *nl;
 
+	warn_deprecated();
+
 	if (copy_from_user(write_buf, buf, size))
 		return -EFAULT;
 	write_buf[size] = '\0';
Signature · 1 line
1.9.3