diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2008-11-13 23:39:10 +0000 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2008-11-13 23:39:10 +0000 |
commit | d221d2e77696e70e94b13989ea15db2ba5b34f8e (patch) | |
tree | 82afcee59db83104d31848e2304eb51baeee3aa4 /drivers/md | |
parent | 14e98c5ca8bed825f65cbf11cb0ffd2c09dac2f4 (diff) | |
download | op-kernel-dev-d221d2e77696e70e94b13989ea15db2ba5b34f8e.zip op-kernel-dev-d221d2e77696e70e94b13989ea15db2ba5b34f8e.tar.gz |
dm: move pending queue wake_up end_io_acct
This doesn't fix any bug, just moves wake_up immediately after decrementing
md->pending, for better code readability.
It must be clear to anyone manipulating md->pending to wake up
the queue if md->pending reaches zero, so move the wakeup as close to
the decrementing as possible.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/dm.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 6963ad1..dc25d8a 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -375,7 +375,7 @@ static void start_io_acct(struct dm_io *io) dm_disk(md)->part0.in_flight = atomic_inc_return(&md->pending); } -static int end_io_acct(struct dm_io *io) +static void end_io_acct(struct dm_io *io) { struct mapped_device *md = io->md; struct bio *bio = io->bio; @@ -391,7 +391,9 @@ static int end_io_acct(struct dm_io *io) dm_disk(md)->part0.in_flight = pending = atomic_dec_return(&md->pending); - return !pending; + /* nudge anyone waiting on suspend queue */ + if (!pending) + wake_up(&md->wait); } /* @@ -499,9 +501,7 @@ static void dec_pending(struct dm_io *io, int error) spin_unlock_irqrestore(&io->md->pushback_lock, flags); } - if (end_io_acct(io)) - /* nudge anyone waiting on suspend queue */ - wake_up(&io->md->wait); + end_io_acct(io); if (io->error != DM_ENDIO_REQUEUE) { blk_add_trace_bio(io->md->queue, io->bio, |