mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-11-03 20:47:11 +00:00
rdma: Relax requirement to have PID for HW objects
RDMA has weak connection between PIDs and HW objects, because
the latter tied to file descriptors for their lifetime management.
The outcome of such connection is that for the following scenario,
the returned PID will be 0 (not-valid):
1. Create FD and context
2. Share it with ephemeral child
3. Create any object and exit that child
This flow was revealed in testing environment and of course real users
are not running such scenario, because it makes no sense at all in RDMA
world.
Let's do two changes in the code to support such workflow anyway:
1. Remove need to provide PID/kernel name. Code already supports it,
just need to remove extra validation.
2. Ball-out in case PID is 0.
Link: https://lore.kernel.org/linux-rdma/20191002123245.18153-2-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
This commit is contained in:
parent
9dcd8788fe
commit
f93134841e
@ -120,11 +120,8 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx,
|
||||
char *comm = NULL;
|
||||
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_STATE] ||
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_PS] ||
|
||||
(!nla_line[RDMA_NLDEV_ATTR_RES_PID] &&
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])) {
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_PS])
|
||||
return MNL_CB_ERROR;
|
||||
}
|
||||
|
||||
if (nla_line[RDMA_NLDEV_ATTR_PORT_INDEX])
|
||||
port = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]);
|
||||
|
||||
@ -56,11 +56,8 @@ static int res_cq_line(struct rd *rd, const char *name, int idx,
|
||||
uint32_t cqe;
|
||||
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_CQE] ||
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_USECNT] ||
|
||||
(!nla_line[RDMA_NLDEV_ATTR_RES_PID] &&
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])) {
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_USECNT])
|
||||
return MNL_CB_ERROR;
|
||||
}
|
||||
|
||||
cqe = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_CQE]);
|
||||
|
||||
|
||||
@ -17,11 +17,8 @@ static int res_mr_line(struct rd *rd, const char *name, int idx,
|
||||
uint32_t mrn = 0;
|
||||
uint32_t pid = 0;
|
||||
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_MRLEN] ||
|
||||
(!nla_line[RDMA_NLDEV_ATTR_RES_PID] &&
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])) {
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_MRLEN])
|
||||
return MNL_CB_ERROR;
|
||||
}
|
||||
|
||||
if (nla_line[RDMA_NLDEV_ATTR_RES_RKEY])
|
||||
rkey = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_RKEY]);
|
||||
|
||||
@ -17,11 +17,8 @@ static int res_pd_line(struct rd *rd, const char *name, int idx,
|
||||
uint32_t pdn = 0;
|
||||
uint64_t users;
|
||||
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_USECNT] ||
|
||||
(!nla_line[RDMA_NLDEV_ATTR_RES_PID] &&
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])) {
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_USECNT])
|
||||
return MNL_CB_ERROR;
|
||||
}
|
||||
|
||||
if (nla_line[RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY])
|
||||
local_dma_lkey = mnl_attr_get_u32(
|
||||
|
||||
@ -90,11 +90,8 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
|
||||
if (!nla_line[RDMA_NLDEV_ATTR_RES_LQPN] ||
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN] ||
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_TYPE] ||
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_STATE] ||
|
||||
(!nla_line[RDMA_NLDEV_ATTR_RES_PID] &&
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])) {
|
||||
!nla_line[RDMA_NLDEV_ATTR_RES_STATE])
|
||||
return MNL_CB_ERROR;
|
||||
}
|
||||
|
||||
if (nla_line[RDMA_NLDEV_ATTR_PORT_INDEX])
|
||||
port = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]);
|
||||
|
||||
@ -211,6 +211,9 @@ char *get_task_name(uint32_t pid)
|
||||
char *comm;
|
||||
FILE *f;
|
||||
|
||||
if (!pid)
|
||||
return NULL;
|
||||
|
||||
if (asprintf(&comm, "/proc/%d/comm", pid) < 0)
|
||||
return NULL;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user