mirror of https://gitee.com/openkylin/linux.git
dm: fix false warning in free_rq_clone() for unmapped requests
When stacking request-based dm device on non blk-mq device and device-mapper target could not map the request (error target is used, multipath target with all paths down, etc), the WARN_ON_ONCE() in free_rq_clone() will trigger when it shouldn't. The warning was added by commitaa6df8d
("dm: fix free_rq_clone() NULL pointer when requeueing unmapped request"). But free_rq_clone() with clone->q == NULL is valid usage for the case where dm_kill_unmapped_request() initiates request cleanup. Fix this false warning by just removing the WARN_ON -- it only generated false positives and was never useful in catching the intended case (completing clone request not being mapped e.g. clone->q being NULL). Fixes:aa6df8d
("dm: fix free_rq_clone() NULL pointer when requeueing unmapped request") Reported-by: Bart Van Assche <bart.vanassche@sandisk.com> Reported-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
45714fbed4
commit
e5d8de32cc
|
@ -1082,13 +1082,11 @@ static void rq_completed(struct mapped_device *md, int rw, bool run_queue)
|
||||||
dm_put(md);
|
dm_put(md);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_rq_clone(struct request *clone, bool must_be_mapped)
|
static void free_rq_clone(struct request *clone)
|
||||||
{
|
{
|
||||||
struct dm_rq_target_io *tio = clone->end_io_data;
|
struct dm_rq_target_io *tio = clone->end_io_data;
|
||||||
struct mapped_device *md = tio->md;
|
struct mapped_device *md = tio->md;
|
||||||
|
|
||||||
WARN_ON_ONCE(must_be_mapped && !clone->q);
|
|
||||||
|
|
||||||
blk_rq_unprep_clone(clone);
|
blk_rq_unprep_clone(clone);
|
||||||
|
|
||||||
if (md->type == DM_TYPE_MQ_REQUEST_BASED)
|
if (md->type == DM_TYPE_MQ_REQUEST_BASED)
|
||||||
|
@ -1132,7 +1130,7 @@ static void dm_end_request(struct request *clone, int error)
|
||||||
rq->sense_len = clone->sense_len;
|
rq->sense_len = clone->sense_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_rq_clone(clone, true);
|
free_rq_clone(clone);
|
||||||
if (!rq->q->mq_ops)
|
if (!rq->q->mq_ops)
|
||||||
blk_end_request_all(rq, error);
|
blk_end_request_all(rq, error);
|
||||||
else
|
else
|
||||||
|
@ -1151,7 +1149,7 @@ static void dm_unprep_request(struct request *rq)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clone)
|
if (clone)
|
||||||
free_rq_clone(clone, false);
|
free_rq_clone(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue