]> git.baikalelectronics.ru Git - kernel.git/commit
nvme-fc: revise TRADDR parsing
authorJames Smart <jsmart2021@gmail.com>
Mon, 17 Jul 2017 20:59:39 +0000 (13:59 -0700)
committerChristoph Hellwig <hch@lst.de>
Tue, 25 Jul 2017 16:05:25 +0000 (18:05 +0200)
commiteaff3eab763a0efe102951a131aba9d84065dd49
tree53ce8b540ad8f55686ef56a42dcc309b14e513d3
parentf33ff814c241db6d0eb6250d544f04f9c9f0141e
nvme-fc: revise TRADDR parsing

The FC-NVME spec hasn't locked down on the format string for TRADDR.
Currently the spec is lobbying for "nn-<16hexdigits>:pn-<16hexdigits>"
where the wwn's are hex values but not prefixed by 0x.

Most implementations so far expect a string format of
"nn-0x<16hexdigits>:pn-0x<16hexdigits>" to be used. The transport
uses the match_u64 parser which requires a leading 0x prefix to set
the base properly. If it's not there, a match will either fail or return
a base 10 value.

The resolution in T11 is pushing out. Therefore, to fix things now and
to cover any eventuality and any implementations already in the field,
this patch adds support for both formats.

The change consists of replacing the token matching routine with a
routine that validates the fixed string format, and then builds
a local copy of the hex name with a 0x prefix before calling
the system parser.

Note: the same parser routine exists in both the initiator and target
transports. Given this is about the only "shared" item, we chose to
replicate rather than create an interdendency on some shared code.

Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/fc.c
drivers/nvme/target/fc.c
include/linux/nvme-fc.h