[dm-devel] [RFC, PATCH] remove signal handling from dm-io.c, sync_io()

Kevin Corry kevcorry at us.ibm.com
Thu Jun 10 17:18:21 UTC 2004


On Thursday 10 June 2004 9:53 pm, Dave Olien wrote:
> This patch removes the signal handling case from the sync_io() routine
> in dm-io.c.  This seems appropriate for several reasons.

Couldn't we also just convert that whole loop to a wait_event() call? The only 
real difference would be that the loop currently uses io_schedule(), whereas 
wait_event() would use regular schedule().  But perhaps that's a distinction 
we need to maintain.

Here's the patch anyways for review.

-- 
Kevin Corry
kevcorry at us.ibm.com
http://evms.sourceforge.net/


--- diff/drivers/md/dm-io.c	2004-06-10 17:12:17.367130368 +0000
+++ source/drivers/md/dm-io.c	2004-06-10 17:12:10.216217472 +0000
@@ -535,6 +535,7 @@
 static int sync_io(unsigned int num_regions, struct io_region *where,
 	    int rw, struct dpages *dp, unsigned long *error_bits)
 {
+	DECLARE_WAIT_QUEUE_HEAD(wq);
 	struct io io;
 
 	BUG_ON(num_regions > 1 && rw != WRITE);
@@ -545,18 +546,7 @@
 
 	dispatch_io(rw, num_regions, where, dp, &io, 1);
 
-	while (1) {
-		set_current_state(TASK_UNINTERRUPTIBLE);
-
-		if (!atomic_read(&io.count) || signal_pending(current))
-			break;
-
-		io_schedule();
-	}
-	set_current_state(TASK_RUNNING);
-
-	if (atomic_read(&io.count))
-		return -EINTR;
+	wait_event(wq, (!atomic_read(&io.count)));
 
 	*error_bits = io.error;
 	return io.error ? -EIO : 0;



More information about the dm-devel mailing list