diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-09-27 21:58:03 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-09-27 21:58:03 +0300 |
commit | 47db9b9a6eba4c5b0872220c8c8ff787a4b06ab0 (patch) | |
tree | 10f87c30b63fd9d2ce9d7ccc51e7667be8be05e7 /block/blk-flush.c | |
parent | d0e00bc5ada53bda296ce8bfffc2f2be9eb22632 (diff) | |
parent | 8d6996630c03d7ceeabe2611378fea5ca1c3f1b3 (diff) | |
download | linux-47db9b9a6eba4c5b0872220c8c8ff787a4b06ab0.tar.xz |
Merge tag 'for-linus-2019-09-27' of git://git.kernel.dk/linux-block
Pull block fixes from Jens Axboe:
"A few fixes/changes to round off this merge window. This contains:
- Small series making some functional tweaks to blk-iocost (Tejun)
- Elevator switch locking fix (Ming)
- Kill redundant call in blk-wbt (Yufen)
- Fix flush timeout handling (Yufen)"
* tag 'for-linus-2019-09-27' of git://git.kernel.dk/linux-block:
block: fix null pointer dereference in blk_mq_rq_timed_out()
rq-qos: get rid of redundant wbt_update_limits()
iocost: bump up default latency targets for hard disks
iocost: improve nr_lagging handling
iocost: better trace vrate changes
block: don't release queue's sysfs lock during switching elevator
blk-mq: move lockdep_assert_held() into elevator_exit
Diffstat (limited to 'block/blk-flush.c')
-rw-r--r-- | block/blk-flush.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/block/blk-flush.c b/block/blk-flush.c index aedd9320e605..1eec9cbe5a0a 100644 --- a/block/blk-flush.c +++ b/block/blk-flush.c @@ -214,6 +214,16 @@ static void flush_end_io(struct request *flush_rq, blk_status_t error) /* release the tag's ownership to the req cloned from */ spin_lock_irqsave(&fq->mq_flush_lock, flags); + + if (!refcount_dec_and_test(&flush_rq->ref)) { + fq->rq_status = error; + spin_unlock_irqrestore(&fq->mq_flush_lock, flags); + return; + } + + if (fq->rq_status != BLK_STS_OK) + error = fq->rq_status; + hctx = flush_rq->mq_hctx; if (!q->elevator) { blk_mq_tag_set_rq(hctx, flush_rq->tag, fq->orig_rq); |