dm-writecache: convert swait_queues to wait_queues
Mikulas Patocka
maintainerPATCH 1/3 dm-writecache: convert swait_queues to wait_queues
Convert swait_queues to wait_queues, because there may be multiple processes waiting on the queue and swait_queues are inefficient in that case (and the code incorrectly uses swake_up where it intends to wake all the waiters).
Signed-off-by Mikulas Patocka <[email protected]>
--- drivers/md/dm-writecache.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-)
drivers/md/dm-writecache.c +13 -13
@@ -129,10 +129,10 @@ struct dm_writecache {unsigned long autocommit_jiffies;struct timer_list autocommit_timer; -struct swait_queue_head freelist_wait; +struct wait_queue_head freelist_wait;atomic_t bio_in_progress[2 ]; -struct swait_queue_head bio_in_progress_wait[2 ]; +struct wait_queue_head bio_in_progress_wait[2 ];struct dm_target *ti;struct dm_dev *dev;
@@ -408,7 +408,7 @@ static void write_original_sector_seq_co do { \ if (!cmpxchg(&(wc)->error, 0, err)) \ DMERR(msg, ##arg); \ - swake_up(&(wc)->freelist_wait); \ + wake_up(&(wc)->freelist_wait); \ } while (0) #define writecache_has_error(wc) (unlikely(READ_ONCE((wc)->error)))
@@ -526,7 +526,7 @@ static void writecache_disk_flush(structstatic void writecache_wait_for_ios (struct dm_writecache *wc,int direction) { -swait_event (wc->bio_in_progress_wait[direction], +wait_event (wc->bio_in_progress_wait[direction], !atomic_read (&wc->bio_in_progress[direction])); }
@@ -658,18 +658,18 @@ static void writecache_free_entry(structwritecache_add_to_freelist (wc, e);clear_seq_count (wc, e);writecache_flush_region (wc,memory_entry (wc, e),sizeof (struct wc_memory_entry )); -if (unlikely (swait_active (&wc->freelist_wait))) -swake_up (&wc->freelist_wait); +if (unlikely (waitqueue_active (&wc->freelist_wait))) +wake_up (&wc->freelist_wait); }static void writecache_wait_on_freelist (struct dm_writecache *wc) { -DECLARE_SWAITQUEUE (wait); +DEFINE_WAIT (wait); -prepare_to_swait (&wc->freelist_wait, &wait,TASK_UNINTERRUPTIBLE ); +prepare_to_wait (&wc->freelist_wait, &wait,TASK_UNINTERRUPTIBLE );wc_unlock (wc);io_schedule (); -finish_swait (&wc->freelist_wait, &wait); +finish_wait (&wc->freelist_wait, &wait);wc_lock (wc); }
@@ -1238,8 +1238,8 @@ static int writecache_end_io(struct dm_tif (bio->bi_private !=NULL ) {int dir =bio_data_dir (bio);if (atomic_dec_and_test (&wc->bio_in_progress[dir])) -if (unlikely (swait_active (&wc->bio_in_progress_wait[dir]))) -swake_up (&wc->bio_in_progress_wait[dir]); +if (unlikely (waitqueue_active (&wc->bio_in_progress_wait[dir]))) +wake_up (&wc->bio_in_progress_wait[dir]); }return 0 ; }
@@ -1823,12 +1823,12 @@ static int writecache_ctr(struct dm_targmutex_init (&wc->lock);writecache_poison_lists (wc); -init_swait_queue_head (&wc->freelist_wait); +init_waitqueue_head (&wc->freelist_wait);timer_setup (&wc->autocommit_timer, writecache_autocommit_timer,0 );for (i =0 ; i <2 ; i++) {atomic_set (&wc->bio_in_progress[i],0 ); -init_swait_queue_head (&wc->bio_in_progress_wait[i]); +init_waitqueue_head (&wc->bio_in_progress_wait[i]); } wc->dm_io =dm_io_client_create ();