linux/drivers/nvme/target
Max Gurtovoy bcd9a0797d nvmet: fix freeing unallocated p2pmem
In case p2p device was found but the p2p pool is empty, the nvme target
is still trying to free the sgl from the p2p pool instead of the
regular sgl pool and causing a crash (BUG() is called). Instead, assign
the p2p_dev for the request only if it was allocated from p2p pool.

This is the crash that was caused:

[Sun May 30 19:13:53 2021] ------------[ cut here ]------------
[Sun May 30 19:13:53 2021] kernel BUG at lib/genalloc.c:518!
[Sun May 30 19:13:53 2021] invalid opcode: 0000 [#1] SMP PTI
...
[Sun May 30 19:13:53 2021] kernel BUG at lib/genalloc.c:518!
...
[Sun May 30 19:13:53 2021] RIP: 0010:gen_pool_free_owner+0xa8/0xb0
...
[Sun May 30 19:13:53 2021] Call Trace:
[Sun May 30 19:13:53 2021] ------------[ cut here ]------------
[Sun May 30 19:13:53 2021]  pci_free_p2pmem+0x2b/0x70
[Sun May 30 19:13:53 2021]  pci_p2pmem_free_sgl+0x4f/0x80
[Sun May 30 19:13:53 2021]  nvmet_req_free_sgls+0x1e/0x80 [nvmet]
[Sun May 30 19:13:53 2021] kernel BUG at lib/genalloc.c:518!
[Sun May 30 19:13:53 2021]  nvmet_rdma_release_rsp+0x4e/0x1f0 [nvmet_rdma]
[Sun May 30 19:13:53 2021]  nvmet_rdma_send_done+0x1c/0x60 [nvmet_rdma]

Fixes: c6e3f13398 ("nvmet: add metadata support for block devices")
Reviewed-by: Israel Rukshin <israelr@nvidia.com>
Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
2021-06-02 10:10:38 +03:00
..
admin-cmd.c nvmet: use helper to remove the duplicate code 2021-05-11 18:30:45 +02:00
configfs.c nvmet: fix a spelling mistake "nubmer" -> "number" 2021-04-15 08:12:53 +02:00
core.c nvmet: fix freeing unallocated p2pmem 2021-06-02 10:10:38 +03:00
discovery.c nvmet: demote discovery cmd parse err msg to debug 2021-05-11 18:30:45 +02:00
fabrics-cmd.c nvmet: demote fabrics cmd parse err msg to debug 2021-05-11 18:30:46 +02:00
fc.c nvmet-fc: simplify nvmet_fc_alloc_hostport 2021-04-15 08:12:53 +02:00
fcloop.c nvme: constify static attribute_group structs 2021-02-02 10:26:10 +01:00
io-cmd-bdev.c nvmet: fix inline bio check for bdev-ns 2021-05-11 18:30:45 +02:00
io-cmd-file.c nvmet: seset ns->file when open fails 2021-05-12 19:48:48 +02:00
Kconfig nvmet: fix a spelling mistake "incuding" -> "including" in Kconfig 2020-12-01 20:36:37 +01:00
loop.c nvme-loop: do not warn for deleted controllers during reset 2021-06-02 10:06:53 +03:00
Makefile nvmet: add passthru code to process commands 2020-07-29 07:45:21 +02:00
nvmet.h nvmet: fix false keep-alive timeout when a controller is torn down 2021-05-26 16:18:22 +02:00
passthru.c nvmet: fix inline bio check for passthru 2021-05-11 18:30:45 +02:00
rdma.c nvmet-rdma: Fix NULL deref when SEND is completed with error 2021-05-11 18:30:45 +02:00
tcp.c nvmet-tcp: fix inline data size comparison in nvmet_tcp_queue_response 2021-05-26 16:18:22 +02:00
trace.c nvmet: trace: parse Get LBA Status command in detail 2019-08-29 12:55:01 -07:00
trace.h nvmet: use min of device_path and disk len 2021-02-10 16:38:05 +01:00