summaryrefslogtreecommitdiffstats
path: root/drivers/nvme/target/core.c
diff options
context:
space:
mode:
authorSagi Grimberg2016-08-04 10:18:49 +0200
committerSagi Grimberg2016-08-04 16:45:10 +0200
commit28b89118539da03f4b188763e1b2fd1aec0f580a (patch)
tree2c004bc3fe811df5a1abf39771c82c9ef518c18c /drivers/nvme/target/core.c
parentnvmet-rdma: Don't use the inline buffer in order to avoid allocation for smal... (diff)
downloadkernel-qcow2-linux-28b89118539da03f4b188763e1b2fd1aec0f580a.tar.gz
kernel-qcow2-linux-28b89118539da03f4b188763e1b2fd1aec0f580a.tar.xz
kernel-qcow2-linux-28b89118539da03f4b188763e1b2fd1aec0f580a.zip
nvmet: Fix controller serial number inconsistency
The host is allowed to issue identify as many times as it wants, we need to stay consistent when reporting the serial number for a given controller. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/nvme/target/core.c')
-rw-r--r--drivers/nvme/target/core.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index 8a891ca53367..6559d5afa7bf 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -13,6 +13,7 @@
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
+#include <linux/random.h>
#include "nvmet.h"
static struct nvmet_fabrics_ops *nvmet_transports[NVMF_TRTYPE_MAX];
@@ -728,6 +729,9 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
memcpy(ctrl->subsysnqn, subsysnqn, NVMF_NQN_SIZE);
memcpy(ctrl->hostnqn, hostnqn, NVMF_NQN_SIZE);
+ /* generate a random serial number as our controllers are ephemeral: */
+ get_random_bytes(&ctrl->serial, sizeof(ctrl->serial));
+
kref_init(&ctrl->ref);
ctrl->subsys = subsys;