[PATCH 2/3] nvme: fix the IDs equality check

Kanchan Joshi joshiiitr at gmail.com
Thu Feb 24 06:12:12 PST 2022


On Thu, Feb 24, 2022 at 4:33 PM Christoph Hellwig <hch at lst.de> wrote:
>
> In nvme_subsys_check_duplicate_ids we care if any of the IDs is the
> same, not just if all of them match.  This also requires not comparing
> the CSI, which is rather irrelevant here.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>  drivers/nvme/host/core.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 076a03b801b7e..ac4749f257439 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -1716,13 +1716,6 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns)
>                 blk_queue_max_write_zeroes_sectors(queue, UINT_MAX);
>  }
>
> -static bool nvme_ns_ids_valid(struct nvme_ns_ids *ids)
> -{
> -       return !uuid_is_null(&ids->uuid) ||
> -               memchr_inv(ids->nguid, 0, sizeof(ids->nguid)) ||
> -               memchr_inv(ids->eui64, 0, sizeof(ids->eui64));
> -}
> -
>  static bool nvme_ns_ids_equal(struct nvme_ns_ids *a, struct nvme_ns_ids *b)
>  {
>         return uuid_equal(&a->uuid, &b->uuid) &&
> @@ -3681,7 +3674,14 @@ static int nvme_subsys_check_duplicate_ids(struct nvme_subsystem *subsys,
>         lockdep_assert_held(&subsys->lock);
>
>         list_for_each_entry(h, &subsys->nsheads, entry) {
> -               if (nvme_ns_ids_valid(ids) && nvme_ns_ids_equal(ids, &h->ids))
> +               if (!uuid_is_null(&ids->uuid) &&
> +                   uuid_equal(&ids->uuid, &h->ids.uuid))
> +                       return -EINVAL;
> +               if (memchr_inv(ids->nguid, 0, sizeof(ids->nguid)) &&
> +                   memcmp(&ids->nguid, &h->ids.nguid, sizeof(ids->nguid)) == 0)
> +                       return -EINVAL;
> +               if (memchr_inv(ids->eui64, 0, sizeof(ids->eui64)) &&
> +                   memcmp(&ids->eui64, &h->ids.eui64, sizeof(ids->eui64)) == 0)

All the "ids" only checks can be consolidated out, and the loop can
keep only comparisons involving "h->ids".



More information about the Linux-nvme mailing list