patch-2.1.71 linux/drivers/block/nbd.c

Next file: linux/drivers/block/opti621.c
Previous file: linux/drivers/block/ide.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.70/linux/drivers/block/nbd.c linux/drivers/block/nbd.c
@@ -78,7 +78,7 @@
 	oldfs = get_fs();
 	set_fs(get_ds());
 	do {
-		int save;
+		sigset_t oldset;
 
 		iov.iov_base = buf;
 		iov.iov_len = size;
@@ -91,13 +91,22 @@
 		msg.msg_namelen = 0;
 		msg.msg_flags = 0;
 
-		save = current->blocked;
-		current->blocked = ~0UL;
+		spin_lock_irq(&current->sigmask_lock);
+		oldset = current->blocked;
+		sigfillset(&current->blocked);
+		recalc_sigpending(current);
+		spin_unlock_irq(&current->sigmask_lock);
+
 		if (send)
 			result = sock_sendmsg(sock, &msg, size);
 		else
 			result = sock_recvmsg(sock, &msg, size, 0);
-		current->blocked = save;
+
+		spin_lock_irq(&current->sigmask_lock);
+		current->blocked = oldset;
+		recalc_sigpending(current);
+		spin_unlock_irq(&current->sigmask_lock);
+
 		if (result <= 0) {
 #ifdef PARANOIA
 			printk(KERN_ERR "NBD: %s - sock=%d at buf=%d, size=%d returned %d.\n",

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov