[Ocfs2-devel] + sysctl-use-rcu-protected-sysctl-for-ocfs-group-add-helper.patch added to -mm tree

Joel Becker Joel.Becker at oracle.com
Fri Jan 8 16:08:53 PST 2010


On Fri, Jan 08, 2010 at 03:54:20PM -0800, akpm at linux-foundation.org wrote:
> 
> The patch titled
>      sysctl: use RCU protected sysctl for ocfs group add helper
> has been added to the -mm tree.  Its filename is
>      sysctl-use-rcu-protected-sysctl-for-ocfs-group-add-helper.patch

NAK until I can figure out how to make it always succeed.  We can't have
umount "succeed" like this.

Maybe the solution is GFP_ATOMIC.  Maybe the solution is to lock on the
setting end.  But this isn't it.

Joel

[Not eliding the patch so ocfs2-devel can see it]

> Before you just go and hit "reply", please:
>    a) Consider who else should be cc'ed
>    b) Prefer to cc a suitable mailing list as well
>    c) Ideally: find the original patch on the mailing list and do a
>       reply-to-all to that, adding suitable additional cc's
> 
> *** Remember to use Documentation/SubmitChecklist when testing your code ***
> 
> See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find
> out what to do about this
> 
> The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/
> 
> ------------------------------------------------------
> Subject: sysctl: use RCU protected sysctl for ocfs group add helper
> From: Andi Kleen <andi at firstfloor.org>
> 
> This avoids races with unlocked sysctl()
> 
> Also saves ~220 bytes in the data segment.
> 
> Signed-off-by: Andi Kleen <ak at linux.intel.com>
> Cc: "Paul E. McKenney" <paulmck at us.ibm.com>
> Cc: Russell King <rmk+lkml at arm.linux.org.uk>
> Cc: Sam Ravnborg <sam at ravnborg.org>
> Cc: "Eric W. Biederman" <ebiederm at xmission.com>
> Cc: Joel Becker <Joel.Becker at oracle.com>
> Cc: Rusty Russell <rusty at rustcorp.com.au>
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> ---
> 
>  fs/ocfs2/stackglue.c |   17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff -puN fs/ocfs2/stackglue.c~sysctl-use-rcu-protected-sysctl-for-ocfs-group-add-helper fs/ocfs2/stackglue.c
> --- a/fs/ocfs2/stackglue.c~sysctl-use-rcu-protected-sysctl-for-ocfs-group-add-helper
> +++ a/fs/ocfs2/stackglue.c
> @@ -27,6 +27,7 @@
>  #include <linux/kobject.h>
>  #include <linux/sysfs.h>
>  #include <linux/sysctl.h>
> +#include <linux/rcustring.h>
>  
>  #include "ocfs2_fs.h"
>  
> @@ -40,7 +41,7 @@ static struct ocfs2_locking_protocol *lp
>  static DEFINE_SPINLOCK(ocfs2_stack_lock);
>  static LIST_HEAD(ocfs2_stack_list);
>  static char cluster_stack_name[OCFS2_STACK_LABEL_LEN + 1];
> -static char ocfs2_hb_ctl_path[OCFS2_MAX_HB_CTL_PATH] = "/sbin/ocfs2_hb_ctl";
> +static char *ocfs2_hb_ctl_path = "/sbin/ocfs2_hb_ctl";
>  
>  /*
>   * The stack currently in use.  If not null, active_stack->sp_count > 0,
> @@ -395,8 +396,15 @@ static void ocfs2_leave_group(const char
>  {
>  	int ret;
>  	char *argv[5], *envp[3];
> +	char *helper;
>  
> -	argv[0] = ocfs2_hb_ctl_path;
> +	helper = access_rcu_string(&ocfs2_hb_ctl_path, OCFS2_MAX_HB_CTL_PATH, GFP_KERNEL);
> +	if (!helper) {
> +		printk(KERN_ERR "ocfs2_leave_group: no memory\n");
> +		return;
> +	}
> +
> +	argv[0] = helper;
>  	argv[1] = "-K";
>  	argv[2] = "-u";
>  	argv[3] = (char *)group;
> @@ -414,6 +422,7 @@ static void ocfs2_leave_group(const char
>  		       "\"%s %s %s %s\"\n",
>  		       ret, argv[0], argv[1], argv[2], argv[3]);
>  	}
> +	kfree(helper);
>  }
>  
>  /*
> @@ -621,10 +630,10 @@ error:
>  static ctl_table ocfs2_nm_table[] = {
>  	{
>  		.procname	= "hb_ctl_path",
> -		.data		= ocfs2_hb_ctl_path,
> +		.data		= &ocfs2_hb_ctl_path,
>  		.maxlen		= OCFS2_MAX_HB_CTL_PATH,
>  		.mode		= 0644,
> -		.proc_handler	= proc_dostring,
> +		.proc_handler	= proc_rcu_string,
>  	},
>  	{ }
>  };
> _
> 
> Patches currently in -mm which might be from andi at firstfloor.org are
> 
> kernel-signalc-fix-kernel-information-leak-with-print-fatal-signals=1.patch
> proc-revert-procfs-provide-stack-information-for-threads.patch
> kfifo-use-void-pointers-for-user-buffers.patch
> kfifo-sanitize-_user-error-handling.patch
> kfifo-add-kfifo_out_peek.patch
> kfifo-add-kfifo_initialized.patch
> kfifo-document-everywhere-that-size-has-to-be-power-of-two.patch
> hardware-latency-detector-remove-default-m.patch
> kbuild-move-fno-dwarf2-cfi-asm-to-powerpc-only.patch
> mm-introduce-dump_page-and-print-symbolic-flag-names.patch
> coredump-unify-dump_seek-implementations-for-each-binfmt_c.patch
> coredump-move-dump_write-and-dump_seek-into-a-header-file.patch
> elf-coredump-replace-elf_core_extra_-macros-by-functions.patch
> elf-coredump-make-offset-calculation-process-and-writing-process-explicit.patch
> elf-coredump-add-extended-numbering-support.patch
> tracehooks-kill-some-pt_ptraced-checks.patch
> tracehooks-check-pt_ptraced-before-reporting-the-single-step.patch
> ptrace_signal-check-pt_ptraced-before-reporting-a-signal.patch
> export-__ptrace_detach-and-do_notify_parent_cldstop.patch
> reorder-the-code-in-kernel-ptracec.patch
> implement-utrace-ptrace.patch
> utrace-core.patch
> rcu-add-rcustring-adt-for-rcu-protected-strings.patch
> add-a-kernel_address-that-works-for-data-too.patch
> sysctl-add-proc_rcu_string-to-manage-sysctls-using-rcu-strings.patch
> sysctl-use-rcu-strings-for-core_pattern-sysctl.patch
> sysctl-add-call_usermodehelper_cleanup.patch
> sysctl-convert-modprobe_path-to-proc_rcu_string.patch
> sysctl-convert-poweroff_command-to-proc_rcu_string.patch
> sysctl-convert-hotplug-helper-string-to-proc_rcu_string.patch
> sysctl-use-rcu-protected-sysctl-for-ocfs-group-add-helper.patch
> 

-- 

"Born under a bad sign.
 I been down since I began to crawl.
 If it wasn't for bad luck,
 I wouldn't have no luck at all."

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127



More information about the Ocfs2-devel mailing list