--- /dev/null
+Index: src/afs/LINUX/osi_machdep.h
+===================================================================
+RCS file: /cvs/openafs/src/afs/LINUX/osi_machdep.h,v
+retrieving revision 1.22.2.17
+diff -u -d -r1.22.2.17 osi_machdep.h
+--- src/afs/LINUX/osi_machdep.h 8 Feb 2007 22:41:20 -0000 1.22.2.17
++++ src/afs/LINUX/osi_machdep.h 18 Apr 2007 23:23:28 -0000
+@@ -55,14 +55,14 @@
+ #endif
+
+ #if defined (STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK)
+-#define SIG_LOCK(X) spin_lock_irq(&X->sigmask_lock)
+-#define SIG_UNLOCK(X) spin_unlock_irq(&X->sigmask_lock)
++#define SIG_LOCK(X,flags) spin_lock_irqsave(&X->sigmask_lock,flags)
++#define SIG_UNLOCK(X),flags spin_unlock_irqrestore(&X->sigmask_lock,flags)
+ #elif defined (STRUCT_TASK_STRUCT_HAS_SIGHAND)
+-#define SIG_LOCK(X) spin_lock_irq(&X->sighand->siglock)
+-#define SIG_UNLOCK(X) spin_unlock_irq(&X->sighand->siglock)
++#define SIG_LOCK(X,flags) spin_lock_irqsave(&X->sighand->siglock,flags)
++#define SIG_UNLOCK(X,flags) spin_unlock_irqrestore(&X->sighand->siglock,flags)
+ #else
+-#define SIG_LOCK(X) spin_lock_irq(&X->sig->siglock)
+-#define SIG_UNLOCK(X) spin_unlock_irq(&X->sig->siglock)
++#define SIG_LOCK(X,flags) spin_lock_irqsave(&X->sig->siglock,flags)
++#define SIG_UNLOCK(X,flags) spin_unlock_irqrestore(&X->sig->siglock,flags)
+ #endif
+
+ #if defined (STRUCT_TASK_STRUCT_HAS_RLIM)
+Index: src/afs/LINUX/osi_misc.c
+===================================================================
+RCS file: /cvs/openafs/src/afs/LINUX/osi_misc.c,v
+retrieving revision 1.34.2.10
+diff -u -d -r1.34.2.10 osi_misc.c
+--- src/afs/LINUX/osi_misc.c 11 Jul 2005 19:29:56 -0000 1.34.2.10
++++ src/afs/LINUX/osi_misc.c 18 Apr 2007 23:23:28 -0000
+@@ -353,10 +353,11 @@
+ void
+ osi_linux_mask(void)
+ {
+- SIG_LOCK(current);
++ unsigned long f;
++ SIG_LOCK(current, f);
+ sigfillset(¤t->blocked);
+ RECALC_SIGPENDING(current);
+- SIG_UNLOCK(current);
++ SIG_UNLOCK(current, f);
+ }
+
+ void
+Index: src/afs/LINUX/osi_sleep.c
+===================================================================
+RCS file: /cvs/openafs/src/afs/LINUX/osi_sleep.c,v
+retrieving revision 1.22.2.10
+diff -u -d -r1.22.2.10 osi_sleep.c
+--- src/afs/LINUX/osi_sleep.c 4 Jan 2007 21:26:34 -0000 1.22.2.10
++++ src/afs/LINUX/osi_sleep.c 18 Apr 2007 23:23:29 -0000
+@@ -240,19 +240,20 @@
+ afs_osi_Sleep(void *event)
+ {
+ sigset_t saved_set;
++ unsigned long f;
+
+- SIG_LOCK(current);
++ SIG_LOCK(current,f);
+ saved_set = current->blocked;
+ sigfillset(¤t->blocked);
+ RECALC_SIGPENDING(current);
+- SIG_UNLOCK(current);
++ SIG_UNLOCK(current,f);
+
+ afs_osi_SleepSig(event);
+
+- SIG_LOCK(current);
++ SIG_LOCK(current,f);
+ current->blocked = saved_set;
+ RECALC_SIGPENDING(current);
+- SIG_UNLOCK(current);
++ SIG_UNLOCK(current,f);
+ }
+
+ /* osi_TimedSleep
+Index: src/afs/LINUX/osi_groups.c
+===================================================================
+RCS file: /cvs/openafs/src/afs/LINUX/osi_groups.c,v
+retrieving revision 1.25.2.8
+diff -u -d -r1.25.2.8 osi_groups.c
+--- src/afs/LINUX/osi_groups.c 15 Jan 2007 15:52:46 -0000 1.25.2.8
++++ src/afs/LINUX/osi_groups.c 18 Apr 2007 23:23:29 -0000
+@@ -230,6 +230,7 @@
+ struct key *old;
+ char desc[20];
+ unsigned long not_in_quota;
++ unsigned long f;
+ int code = -EINVAL;
+
+ if (!__key_type_keyring)
+@@ -265,11 +266,11 @@
+ }
+
+ /* install the keyring */
+- spin_lock_irq(&task->sighand->siglock);
++ SIG_LOCK(task, f);
+ old = task->signal->session_keyring;
+ smp_wmb();
+ task->signal->session_keyring = keyring;
+- spin_unlock_irq(&task->sighand->siglock);
++ SIG_UNLOCK(task);
+
+ if (old)
+ key_put(old);
+Index: src/rx/LINUX/rx_kmutex.c
+===================================================================
+RCS file: /cvs/openafs/src/rx/LINUX/rx_kmutex.c,v
+retrieving revision 1.7.2.7
+diff -u -d -r1.7.2.7 rx_kmutex.c
+--- src/rx/LINUX/rx_kmutex.c 28 Dec 2006 21:32:09 -0000 1.7.2.7
++++ src/rx/LINUX/rx_kmutex.c 18 Apr 2007 23:23:29 -0000
+@@ -104,11 +104,12 @@
+ MUTEX_EXIT(l);
+
+ if (!sigok) {
+- SIG_LOCK(current);
++ unsigned long f;
++ SIG_LOCK(current,f);
+ saved_set = current->blocked;
+ sigfillset(¤t->blocked);
+ RECALC_SIGPENDING(current);
+- SIG_UNLOCK(current);
++ SIG_UNLOCK(current,f);
+ }
+
+ while(seq == cv->seq) {
+@@ -140,10 +141,11 @@
+ set_current_state(TASK_RUNNING);
+
+ if (!sigok) {
+- SIG_LOCK(current);
++ unsigned long f;
++ SIG_LOCK(current, f);
+ current->blocked = saved_set;
+ RECALC_SIGPENDING(current);
+- SIG_UNLOCK(current);
++ SIG_UNLOCK(current, f);
+ }
+
+ if (isAFSGlocked)
#endif
#if defined (STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK)
-#define SIG_LOCK(X) spin_lock_irq(&X->sigmask_lock)
-#define SIG_UNLOCK(X) spin_unlock_irq(&X->sigmask_lock)
+#define SIG_LOCK(X,flags) spin_lock_irqsave(&X->sigmask_lock,flags)
+#define SIG_UNLOCK(X),flags spin_unlock_irqrestore(&X->sigmask_lock,flags)
#elif defined (STRUCT_TASK_STRUCT_HAS_SIGHAND)
-#define SIG_LOCK(X) spin_lock_irq(&X->sighand->siglock)
-#define SIG_UNLOCK(X) spin_unlock_irq(&X->sighand->siglock)
+#define SIG_LOCK(X,flags) spin_lock_irqsave(&X->sighand->siglock,flags)
+#define SIG_UNLOCK(X,flags) spin_unlock_irqrestore(&X->sighand->siglock,flags)
#else
-#define SIG_LOCK(X) spin_lock_irq(&X->sig->siglock)
-#define SIG_UNLOCK(X) spin_unlock_irq(&X->sig->siglock)
+#define SIG_LOCK(X,flags) spin_lock_irqsave(&X->sig->siglock,flags)
+#define SIG_UNLOCK(X,flags) spin_unlock_irqrestore(&X->sig->siglock,flags)
#endif
#if defined (STRUCT_TASK_STRUCT_HAS_RLIM)