From: David Howells I've updated the patch to be against 2.6.11-mm2; and removed the extraneous preempt disablement from __key_link(). Signed-Off-By: David Howells Signed-off-by: Andrew Morton --- 25-akpm/security/keys/keyring.c | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) diff -puN security/keys/keyring.c~keys-discard-key-spinlock-and-use-rcu-for-key-payload-try-4 security/keys/keyring.c --- 25/security/keys/keyring.c~keys-discard-key-spinlock-and-use-rcu-for-key-payload-try-4 Thu Mar 10 16:16:00 2005 +++ 25-akpm/security/keys/keyring.c Thu Mar 10 16:16:00 2005 @@ -710,7 +710,6 @@ int __key_link(struct key *keyring, stru if (ret < 0) goto error2; - preempt_disable(); klist = keyring->payload.subscriptions; if (klist && klist->nkeys < klist->maxkeys) { @@ -718,15 +717,13 @@ int __key_link(struct key *keyring, stru atomic_inc(&key->usage); klist->keys[klist->nkeys] = key; - wmb(); + smp_wmb(); klist->nkeys++; - preempt_enable(); + smp_wmb(); ret = 0; } else { - preempt_enable(); - /* grow the key list */ max = 4; if (klist) _