[PATCH v1 2/2] nvme-multipath: fix path failover for integrity ns

Sagi Grimberg sagi at grimberg.me
Sun Apr 23 07:22:31 PDT 2023


> In case the integrity capabilities of the failed path and the failover
> path don't match, we may run into NULL dereference. Free the integrity
> context during the path failover and let the block layer prepare it
> again if needed during bio_submit.
> 
> Reviewed-by: Israel Rukshin <israelr at nvidia.com>
> Tested-by: Ori Evron <oevron at nvidia.com>
> Signed-off-by: Ori Evron <oevron at nvidia.com>
> Signed-off-by: Max Gurtovoy <mgurtovoy at nvidia.com>
> ---
>   drivers/nvme/host/multipath.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
> index 9171452e2f6d..f439916f4447 100644
> --- a/drivers/nvme/host/multipath.c
> +++ b/drivers/nvme/host/multipath.c
> @@ -6,6 +6,7 @@
>   #include <linux/backing-dev.h>
>   #include <linux/moduleparam.h>
>   #include <linux/vmalloc.h>
> +#include <linux/blk-integrity.h>
>   #include <trace/events/block.h>
>   #include "nvme.h"
>   
> @@ -106,6 +107,14 @@ void nvme_failover_req(struct request *req)
>   			bio->bi_opf &= ~REQ_POLLED;
>   			bio->bi_cookie = BLK_QC_T_NONE;
>   		}
> +		/*
> +		 * If the failover path will not be integrity capable the bio
> +		 * should not have integrity context.
> +		 * If the failover path will be integrity capable the bio will
> +		 * be prepared for integrity again.
> +		 */
> +		if (bio_integrity(bio))
> +			bio_integrity_free(bio);
>   	}
>   	blk_steal_bios(&ns->head->requeue_list, req);
>   	spin_unlock_irqrestore(&ns->head->requeue_lock, flags);

This looks good to me,

Reviewed-by: Sagi Grimberg <sagi at grimberg.me>



More information about the Linux-nvme mailing list