[dm-devel] [Patch] dm.c: Use wawitqueue_active()

Joe Thornber thornber at redhat.com
Tue Mar 2 05:37:01 UTC 2004


dm.c: Use waitqueue_active() to save a couple of cycles.

I couldn't think of a reason why event_callback() was using
wake_up_interruptible() rather than plain old wake_up(), so changed
it.
--- diff/drivers/md/dm.c	2004-03-01 15:44:41.000000000 +0000
+++ source/drivers/md/dm.c	2004-03-02 10:31:46.000000000 +0000
@@ -255,13 +255,19 @@ static int queue_io(struct mapped_device
  */
 static inline void dec_pending(struct dm_io *io, int error)
 {
+	wait_queue_head_t *wq;
+
 	if (error)
 		io->error = error;
 
 	if (atomic_dec_and_test(&io->io_count)) {
-		if (atomic_dec_and_test(&io->md->pending))
+		if (atomic_dec_and_test(&io->md->pending)) {
+			wq = &io->md->wait;
+
 			/* nudge anyone waiting on suspend queue */
-			wake_up(&io->md->wait);
+			if (waitqueue_active(wq))
+			    wake_up(wq);
+		}
 
 		bio_endio(io->bio, io->bio->bi_size, io->error);
 		free_io(io->md, io);
@@ -716,7 +722,8 @@ static void event_callback(void *context
 
 	down_write(&md->lock);
 	md->event_nr++;
-	wake_up_interruptible(&md->eventq);
+	if (waitqueue_active(&md->eventq))
+		wake_up(&md->eventq);
 	up_write(&md->lock);
 }
 




More information about the dm-devel mailing list