OSDN Git Service

RDMA/nldev: Factor out the PID namespace check
authorLeon Romanovsky <leonro@mellanox.com>
Wed, 30 Jan 2019 10:48:54 +0000 (12:48 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 31 Jan 2019 04:11:45 +0000 (21:11 -0700)
The PID namespace is going to be used in the .doit callback, so generalize
its implementation.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/nldev.c

index 68b2d7a..e54a79d 100644 (file)
@@ -943,6 +943,17 @@ 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_dumpit(struct sk_buff *skb,
                                 struct netlink_callback *cb,
                                 enum rdma_restrack_type res_type)
@@ -1007,16 +1018,7 @@ static int res_get_common_dumpit(struct sk_buff *skb,
                if (idx < start)
                        goto next;
 
-               if ((rdma_is_kernel_res(res) &&
-                    task_active_pid_ns(current) != &init_pid_ns) ||
-                   (!rdma_is_kernel_res(res) && task_active_pid_ns(current) !=
-                    task_active_pid_ns(res->task)))
-                       /*
-                        * 1. Kern resources should be visible in init
-                        *    namspace only
-                        * 2. Present only resources visible in the current
-                        *    namespace
-                        */
+               if (!is_visible_in_pid_ns(res))
                        goto next;
 
                if (!rdma_restrack_get(res))