patch-2.3.23 linux/net/sunrpc/sched.c
Next file: linux/CREDITS
Previous file: linux/net/sunrpc/clnt.c
Back to the patch index
Back to the overall index
- Lines: 39
- Date:
Mon Oct 18 11:26:37 1999
- Orig file:
v2.3.22/linux/net/sunrpc/sched.c
- Orig date:
Fri Oct 15 15:25:14 1999
diff -u --recursive --new-file v2.3.22/linux/net/sunrpc/sched.c linux/net/sunrpc/sched.c
@@ -75,6 +75,18 @@
static int swap_buffer_used = 0;
/*
+ * Make allocation of the swap_buffer SMP-safe
+ */
+static __inline__ int rpc_lock_swapbuf(void)
+{
+ return !test_and_set_bit(1, &swap_buffer_used);
+}
+static __inline__ void rpc_unlock_swapbuf(void)
+{
+ clear_bit(1, &swap_buffer_used);
+}
+
+/*
* Spinlock for wait queues. Access to the latter also has to be
* interrupt-safe in order to allow timers to wake up sleeping tasks.
*/
@@ -614,7 +626,8 @@
dprintk("RPC: allocated buffer %p\n", buffer);
return buffer;
}
- if ((flags & RPC_TASK_SWAPPER) && !swap_buffer_used++) {
+ if ((flags & RPC_TASK_SWAPPER) && size <= sizeof(swap_buffer)
+ && rpc_lock_swapbuf()) {
dprintk("RPC: used last-ditch swap buffer\n");
return swap_buffer;
}
@@ -634,7 +647,7 @@
kfree(buffer);
return;
}
- swap_buffer_used = 0;
+ rpc_unlock_swapbuf();
}
/*
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)