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: Mark Zhang <markz@mellanox.com> Reviewed-by: Majd Dibbiny <majd@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
699a9c540a
commit
6a6c306a09
|
@ -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,
|
static int res_get_common_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||||
struct netlink_ext_ack *extack,
|
struct netlink_ext_ack *extack,
|
||||||
enum rdma_restrack_type res_type)
|
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;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_visible_in_pid_ns(res)) {
|
if (!rdma_is_visible_in_pid_ns(res)) {
|
||||||
ret = -ENOENT;
|
ret = -ENOENT;
|
||||||
goto err_get;
|
goto err_get;
|
||||||
}
|
}
|
||||||
|
@ -1169,7 +1158,7 @@ static int res_get_common_dumpit(struct sk_buff *skb,
|
||||||
* objects.
|
* objects.
|
||||||
*/
|
*/
|
||||||
xa_for_each(&rt->xa, id, res) {
|
xa_for_each(&rt->xa, id, res) {
|
||||||
if (!is_visible_in_pid_ns(res))
|
if (!rdma_is_visible_in_pid_ns(res))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (idx < start || !rdma_restrack_get(res))
|
if (idx < start || !rdma_restrack_get(res))
|
||||||
|
|
|
@ -349,3 +349,16 @@ out:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rdma_restrack_del);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -27,4 +27,5 @@ int rdma_restrack_init(struct ib_device *dev);
|
||||||
void rdma_restrack_clean(struct ib_device *dev);
|
void rdma_restrack_clean(struct ib_device *dev);
|
||||||
void rdma_restrack_attach_task(struct rdma_restrack_entry *res,
|
void rdma_restrack_attach_task(struct rdma_restrack_entry *res,
|
||||||
struct task_struct *task);
|
struct task_struct *task);
|
||||||
|
bool rdma_is_visible_in_pid_ns(struct rdma_restrack_entry *res);
|
||||||
#endif /* _RDMA_CORE_RESTRACK_H_ */
|
#endif /* _RDMA_CORE_RESTRACK_H_ */
|
||||||
|
|
Loading…
Reference in New Issue