diff options
author | Steve French <sfrench@us.ibm.com> | 2005-12-31 10:27:22 -0800 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2005-12-31 10:27:22 -0800 |
commit | eea60caef610c7a6c58c0de9c80ae1e438e01301 (patch) | |
tree | 25e19289bba003fe085e589430d0d981fd6b73a7 /kernel | |
parent | da8543ef125afc7bba4da526b61a1ae07dc25109 (diff) | |
parent | 82c9df820112c6286a8e8fbe482e94b65b49062c (diff) | |
download | op-kernel-dev-eea60caef610c7a6c58c0de9c80ae1e438e01301.zip op-kernel-dev-eea60caef610c7a6c58c0de9c80ae1e438e01301.tar.gz |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/futex.c | 6 | ||||
-rw-r--r-- | kernel/params.c | 2 | ||||
-rw-r--r-- | kernel/sysctl.c | 6 |
3 files changed, 9 insertions, 5 deletions
diff --git a/kernel/futex.c b/kernel/futex.c index 5872e35..5e71a6b 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -270,7 +270,13 @@ static void wake_futex(struct futex_q *q) /* * The waiting task can free the futex_q as soon as this is written, * without taking any locks. This must come last. + * + * A memory barrier is required here to prevent the following store + * to lock_ptr from getting ahead of the wakeup. Clearing the lock + * at the end of wake_up_all() does not prevent this store from + * moving. */ + wmb(); q->lock_ptr = NULL; } diff --git a/kernel/params.c b/kernel/params.c index 47ba695..c76ad25 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -619,7 +619,7 @@ static void __init param_sysfs_builtin(void) /* module-related sysfs stuff */ -#ifdef CONFIG_MODULES +#ifdef CONFIG_SYSFS #define to_module_attr(n) container_of(n, struct module_attribute, attr); #define to_module_kobject(n) container_of(n, struct module_kobject, kobj); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 9990e10..e5102ea 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2201,14 +2201,12 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen, if (get_user(len, oldlenp)) return -EFAULT; if (len) { - l = strlen(table->data); + l = strlen(table->data)+1; if (len > l) len = l; if (len >= table->maxlen) len = table->maxlen; if(copy_to_user(oldval, table->data, len)) return -EFAULT; - if(put_user(0, ((char __user *) oldval) + len)) - return -EFAULT; if(put_user(len, oldlenp)) return -EFAULT; } @@ -2223,7 +2221,7 @@ int sysctl_string(ctl_table *table, int __user *name, int nlen, len--; ((char *) table->data)[len] = 0; } - return 0; + return 1; } /* |