On Wed, Feb 25, 2026 at 03:36:15PM +0000, John Garry wrote:
> Until ALUA is supported, just always say that the path is optimized. In
> addition, just add basic scsi_device state tests for checking on path
> state.
> 
> Signed-off-by: John Garry <[email protected]>
> ---
>  drivers/scsi/scsi_multipath.c | 45 +++++++++++++++++++++++++++++++++++
>  1 file changed, 45 insertions(+)
> 
> diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c
> index 36f13605b44e7..6aeac20a350ff 100644
> --- a/drivers/scsi/scsi_multipath.c
> +++ b/drivers/scsi/scsi_multipath.c
> @@ -340,8 +340,53 @@ static int scsi_mpath_ioctl(struct block_device *bdev,
>       return err;
>  }
>  
> +static bool scsi_mpath_is_disabled(struct mpath_device *mpath_device)
> +{
> +     struct scsi_mpath_device *scsi_mpath_dev =
> +                             to_scsi_mpath_device(mpath_device);
> +     struct scsi_device *sdev = scsi_mpath_dev->sdev;
> +     enum scsi_device_state sdev_state = sdev->sdev_state;
> +
> +     if (sdev_state == SDEV_RUNNING || sdev_state == SDEV_CANCEL)
> +             return false;
> +
> +     return true;
> +}
> +
> +static bool scsi_mpath_is_optimized(struct mpath_device *mpath_device)
> +{
> +     if (scsi_mpath_is_disabled(mpath_device))
> +             return false;
> +     return true;
> +}
> +
> +/* Until we have ALUA support, we're always optimised */
> +static enum mpath_access_state scsi_mpath_get_access_state(
> +                             struct mpath_device *mpath_device)
> +{
> +     if (scsi_mpath_is_disabled(mpath_device))
> +             return MPATH_STATE_INVALID;
> +     return MPATH_STATE_OPTIMIZED;
> +}
> +
> +static bool scsi_mpath_available_path(struct mpath_device *mpath_device, 
> bool *available)
> +{
> +     struct scsi_mpath_device *scsi_mpath_dev =
> +                             to_scsi_mpath_device(mpath_device);
> +     struct scsi_device *sdev = scsi_mpath_dev->sdev;
> +
> +     if (scsi_device_blocked(sdev))
> +             return false;
> +
> +     return scsi_device_online(sdev);
> +}

Here's another vote for redoing the mpath_available_path() interface.
scsi_mpath_available_path() is already ignoring the available pointer,
and treating the return value like it determines whether the path is
available.

-Ben


Reply via email to