mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
nvme-multipath: reset bdev to ns head when failover
When a request finally completes in end_io() after it has failed over, the bdev pointer can be stale and thus the system can crash. Set the bdev back to ns head, so the request is map to an active path when resubmitted. Signed-off-by: Daniel Wagner <dwagner@suse.de> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
d4060d2be1
commit
ce86dad222
@ -70,6 +70,7 @@ void nvme_failover_req(struct request *req)
|
||||
struct nvme_ns *ns = req->q->queuedata;
|
||||
u16 status = nvme_req(req)->status & 0x7ff;
|
||||
unsigned long flags;
|
||||
struct bio *bio;
|
||||
|
||||
nvme_mpath_clear_current_path(ns);
|
||||
|
||||
@ -84,6 +85,8 @@ void nvme_failover_req(struct request *req)
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&ns->head->requeue_lock, flags);
|
||||
for (bio = req->bio; bio; bio = bio->bi_next)
|
||||
bio_set_dev(bio, ns->head->disk->part0);
|
||||
blk_steal_bios(&ns->head->requeue_list, req);
|
||||
spin_unlock_irqrestore(&ns->head->requeue_lock, flags);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user