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>
This commit is contained in:
parent
14e98c5ca8
commit
d221d2e776
@ -375,7 +375,7 @@ static void start_io_acct(struct dm_io *io)
|
|||||||
dm_disk(md)->part0.in_flight = atomic_inc_return(&md->pending);
|
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 mapped_device *md = io->md;
|
||||||
struct bio *bio = io->bio;
|
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 =
|
dm_disk(md)->part0.in_flight = pending =
|
||||||
atomic_dec_return(&md->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);
|
spin_unlock_irqrestore(&io->md->pushback_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end_io_acct(io))
|
end_io_acct(io);
|
||||||
/* nudge anyone waiting on suspend queue */
|
|
||||||
wake_up(&io->md->wait);
|
|
||||||
|
|
||||||
if (io->error != DM_ENDIO_REQUEUE) {
|
if (io->error != DM_ENDIO_REQUEUE) {
|
||||||
blk_add_trace_bio(io->md->queue, io->bio,
|
blk_add_trace_bio(io->md->queue, io->bio,
|
||||||
|
Loading…
Reference in New Issue
Block a user