]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nvme: revert the cross-controller atomic write size validation
authorChristoph Hellwig <hch@lst.de>
Wed, 9 Jul 2025 09:54:08 +0000 (11:54 +0200)
committerChristoph Hellwig <hch@lst.de>
Tue, 15 Jul 2025 07:49:13 +0000 (09:49 +0200)
This was originally added by commit 8695f060a029 ("nvme: all namespaces
in a subsystem must adhere to a common atomic write size") to check
the all controllers in a subsystem report the same atomic write size,
but the check wasn't quite correct and caused problems for devices
with multiple namespaces that report different LBA sizes.  Commit
f46d273449ba ("nvme: fix atomic write size validation") tried to fix
this, but then caused problems for namespace rediscovery after a
format with an LBA size change that changes the AWUPF value.

This drops the validation and essentially reverts those two commits while
keeping the cleanup that went in between the two.  We'll need to figure
out how to properly check for the mouse trap that nvme left us, but for
now revert the check to keep devices working for users who couldn't care
less about the atomic write feature.

Fixes: 8695f060a029 ("nvme: all namespaces in a subsystem must adhere to a common atomic write size")
Fixes: f46d273449ba ("nvme: fix atomic write size validation")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Alan Adamson <alan.adamson@oracle.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Tested-by: Alan Adamson <alan.adamson@oracle.com>
drivers/nvme/host/core.c

index 1d2240494f3de18b1c6216f8ce971026b305d31e..fdd2334daccadd3702b6990e317f61a2f612fe4c 100644 (file)
@@ -3537,15 +3537,6 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl)
                if (ret)
                        goto out_free;
        }
-
-       if (le16_to_cpu(id->awupf) != ctrl->subsys->awupf) {
-               dev_err_ratelimited(ctrl->device,
-                       "inconsistent AWUPF, controller not added (%u/%u).\n",
-                       le16_to_cpu(id->awupf), ctrl->subsys->awupf);
-               ret = -EINVAL;
-               goto out_free;
-       }
-
        memcpy(ctrl->subsys->firmware_rev, id->fr,
               sizeof(ctrl->subsys->firmware_rev));