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:
Mark Zhang 2019-07-02 13:02:33 +03:00 committed by Jason Gunthorpe
parent 699a9c540a
commit 6a6c306a09
3 changed files with 16 additions and 13 deletions

View File

@ -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))

View File

@ -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);
}

View File

@ -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_ */