Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a6c306a authored by Mark Zhang's avatar Mark Zhang Committed by Jason Gunthorpe
Browse files

RDMA/restrack: Make is_visible_in_pid_ns() as an API



Remove is_visible_in_pid_ns() from nldev.c and make it as a restrack API,
so that it can be taken advantage by other parts like counter.

Signed-off-by: default avatarMark Zhang <markz@mellanox.com>
Reviewed-by: default avatarMajd Dibbiny <majd@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 699a9c54
Loading
Loading
Loading
Loading
+2 −13
Original line number Diff line number Diff line
@@ -1002,17 +1002,6 @@ static const struct nldev_fill_res_entry fill_entries[RDMA_RESTRACK_MAX] = {
	},
};

static bool is_visible_in_pid_ns(struct rdma_restrack_entry *res)
{
	/*
	 * 1. Kern resources should be visible in init name space only
	 * 2. Present only resources visible in the current namespace
	 */
	if (rdma_is_kernel_res(res))
		return task_active_pid_ns(current) == &init_pid_ns;
	return task_active_pid_ns(current) == task_active_pid_ns(res->task);
}

static int res_get_common_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
			       struct netlink_ext_ack *extack,
			       enum rdma_restrack_type res_type)
@@ -1057,7 +1046,7 @@ static int res_get_common_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
		goto err;
	}

	if (!is_visible_in_pid_ns(res)) {
	if (!rdma_is_visible_in_pid_ns(res)) {
		ret = -ENOENT;
		goto err_get;
	}
@@ -1169,7 +1158,7 @@ static int res_get_common_dumpit(struct sk_buff *skb,
	 * objects.
	 */
	xa_for_each(&rt->xa, id, res) {
		if (!is_visible_in_pid_ns(res))
		if (!rdma_is_visible_in_pid_ns(res))
			continue;

		if (idx < start || !rdma_restrack_get(res))
+13 −0
Original line number Diff line number Diff line
@@ -349,3 +349,16 @@ void rdma_restrack_del(struct rdma_restrack_entry *res)
	}
}
EXPORT_SYMBOL(rdma_restrack_del);

bool rdma_is_visible_in_pid_ns(struct rdma_restrack_entry *res)
{
	/*
	 * 1. Kern resources should be visible in init
	 *    namespace only
	 * 2. Present only resources visible in the current
	 *     namespace
	 */
	if (rdma_is_kernel_res(res))
		return task_active_pid_ns(current) == &init_pid_ns;
	return task_active_pid_ns(current) == task_active_pid_ns(res->task);
}
+1 −0
Original line number Diff line number Diff line
@@ -27,4 +27,5 @@ int rdma_restrack_init(struct ib_device *dev);
void rdma_restrack_clean(struct ib_device *dev);
void rdma_restrack_attach_task(struct rdma_restrack_entry *res,
			       struct task_struct *task);
bool rdma_is_visible_in_pid_ns(struct rdma_restrack_entry *res);
#endif /* _RDMA_CORE_RESTRACK_H_ */