]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - block/blk-flush.c
drm/meson: Add AFBCD module driver
[linux.git] / block / blk-flush.c
index aedd9320e605db6f0441d5f5b1d582dd0390b760..1eec9cbe5a0a1b56cc81c949eb1f275b6c6a58de 100644 (file)
@@ -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);