All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/23] proc: Introduce /proc/namespaces/ directory to expose namespaces lineary
@ 2020-07-30 11:59 Kirill Tkhai
  2020-07-30 11:59 ` [PATCH 01/23] ns: Add common refcount into ns_common add use it as counter for net_ns Kirill Tkhai
                   ` (24 more replies)
  0 siblings, 25 replies; 81+ messages in thread
From: Kirill Tkhai @ 2020-07-30 11:59 UTC (permalink / raw)
  To: viro, adobriyan, davem, ebiederm, akpm, christian.brauner,
	areber, serge, linux-kernel, linux-fsdevel, ktkhai

Currently, there is no a way to list or iterate all or subset of namespaces
in the system. Some namespaces are exposed in /proc/[pid]/ns/ directories,
but some also may be as open files, which are not attached to a process.
When a namespace open fd is sent over unix socket and then closed, it is
impossible to know whether the namespace exists or not.

Also, even if namespace is exposed as attached to a process or as open file,
iteration over /proc/*/ns/* or /proc/*/fd/* namespaces is not fast, because
this multiplies at tasks and fds number.

This patchset introduces a new /proc/namespaces/ directory, which exposes
subset of permitted namespaces in linear view:

# ls /proc/namespaces/ -l
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'cgroup:[4026531835]' -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'ipc:[4026531839]' -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'mnt:[4026531840]' -> 'mnt:[4026531840]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'mnt:[4026531861]' -> 'mnt:[4026531861]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'mnt:[4026532133]' -> 'mnt:[4026532133]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'mnt:[4026532134]' -> 'mnt:[4026532134]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'mnt:[4026532135]' -> 'mnt:[4026532135]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'mnt:[4026532136]' -> 'mnt:[4026532136]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'net:[4026531993]' -> 'net:[4026531993]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'pid:[4026531836]' -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'time:[4026531834]' -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'user:[4026531837]' -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jul 29 16:50 'uts:[4026531838]' -> 'uts:[4026531838]'

Namespace ns is exposed, in case of its user_ns is permitted from /proc's pid_ns.
I.e., /proc is related to pid_ns, so in /proc/namespace we show only a ns, which is

	in_userns(pid_ns->user_ns, ns->user_ns).

In case of ns is a user_ns:

	in_userns(pid_ns->user_ns, ns).

The patchset follows this steps:

1)A generic counter in ns_common is introduced instead of separate
  counters for every ns type (net::count, uts_namespace::kref,
  user_namespace::count, etc). Patches [1-8];
2)Patch [9] introduces IDR to link and iterate alive namespaces;
3)Patch [10] is refactoring;
4)Patch [11] actually adds /proc/namespace directory and fs methods;
5)Patches [12-23] make every namespace to use the added methods
  and to appear in /proc/namespace directory.

This may be usefull to write effective debug utils (say, fast build
of networks topology) and checkpoint/restore software.
---

Kirill Tkhai (23):
      ns: Add common refcount into ns_common add use it as counter for net_ns
      uts: Use generic ns_common::count
      ipc: Use generic ns_common::count
      pid: Use generic ns_common::count
      user: Use generic ns_common::count
      mnt: Use generic ns_common::count
      cgroup: Use generic ns_common::count
      time: Use generic ns_common::count
      ns: Introduce ns_idr to be able to iterate all allocated namespaces in the system
      fs: Rename fs/proc/namespaces.c into fs/proc/task_namespaces.c
      fs: Add /proc/namespaces/ directory
      user: Free user_ns one RCU grace period after final counter put
      user: Add user namespaces into ns_idr
      net: Add net namespaces into ns_idr
      pid: Eextract child_reaper check from pidns_for_children_get()
      proc_ns_operations: Add can_get method
      pid: Add pid namespaces into ns_idr
      uts: Free uts namespace one RCU grace period after final counter put
      uts: Add uts namespaces into ns_idr
      ipc: Add ipc namespaces into ns_idr
      mnt: Add mount namespaces into ns_idr
      cgroup: Add cgroup namespaces into ns_idr
      time: Add time namespaces into ns_idr


 fs/mount.h                     |    4 
 fs/namespace.c                 |   14 +
 fs/nsfs.c                      |   78 ++++++++
 fs/proc/Makefile               |    1 
 fs/proc/internal.h             |   18 +-
 fs/proc/namespaces.c           |  382 +++++++++++++++++++++++++++-------------
 fs/proc/root.c                 |   17 ++
 fs/proc/task_namespaces.c      |  183 +++++++++++++++++++
 include/linux/cgroup.h         |    6 -
 include/linux/ipc_namespace.h  |    3 
 include/linux/ns_common.h      |   11 +
 include/linux/pid_namespace.h  |    4 
 include/linux/proc_fs.h        |    1 
 include/linux/proc_ns.h        |   12 +
 include/linux/time_namespace.h |   10 +
 include/linux/user_namespace.h |   10 +
 include/linux/utsname.h        |   10 +
 include/net/net_namespace.h    |   11 -
 init/version.c                 |    2 
 ipc/msgutil.c                  |    2 
 ipc/namespace.c                |   17 +-
 ipc/shm.c                      |    1 
 kernel/cgroup/cgroup.c         |    2 
 kernel/cgroup/namespace.c      |   25 ++-
 kernel/pid.c                   |    2 
 kernel/pid_namespace.c         |   46 +++--
 kernel/time/namespace.c        |   20 +-
 kernel/user.c                  |    2 
 kernel/user_namespace.c        |   23 ++
 kernel/utsname.c               |   23 ++
 net/core/net-sysfs.c           |    6 -
 net/core/net_namespace.c       |   18 +-
 net/ipv4/inet_timewait_sock.c  |    4 
 net/ipv4/tcp_metrics.c         |    2 
 34 files changed, 746 insertions(+), 224 deletions(-)
 create mode 100644 fs/proc/task_namespaces.c

--
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>


^ permalink raw reply	[flat|nested] 81+ messages in thread
* Re: [PATCH 11/23] fs: Add /proc/namespaces/ directory
@ 2020-08-05  4:17 kernel test robot
  0 siblings, 0 replies; 81+ messages in thread
From: kernel test robot @ 2020-08-05  4:17 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 14323 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <159611041929.535980.14513096920129728440.stgit@localhost.localdomain>
References: <159611041929.535980.14513096920129728440.stgit@localhost.localdomain>
TO: Kirill Tkhai <ktkhai@virtuozzo.com>
TO: viro(a)zeniv.linux.org.uk
TO: adobriyan(a)gmail.com
TO: davem(a)davemloft.net
TO: ebiederm(a)xmission.com
TO: akpm(a)linux-foundation.org
TO: christian.brauner(a)ubuntu.com
TO: areber(a)redhat.com
TO: serge(a)hallyn.com
TO: linux-kernel(a)vger.kernel.org
TO: linux-fsdevel(a)vger.kernel.org

Hi Kirill,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on next-20200729]
[also build test WARNING on v5.8]
[cannot apply to cgroup/for-next tip/timers/core net-next/master sparc-next/master net/master linus/master v5.8-rc7 v5.8-rc6 v5.8-rc5]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Kirill-Tkhai/proc-Introduce-proc-namespaces-directory-to-expose-namespaces-lineary/20200730-200346
base:    04b4571786305a76ad81757bbec78eb16a5de582
:::::: branch date: 6 days ago
:::::: commit date: 6 days ago
compiler: nds32le-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


cppcheck warnings: (new ones prefixed by >>)

>> fs/proc/task_namespaces.c:61:8: warning: Variable 'error' is reassigned a value before the old one has been used. [redundantAssignment]
    error = ns_get_path(&ns_path, task, ns_ops);
          ^
   fs/proc/task_namespaces.c:49:0: note: Variable 'error' is reassigned a value before the old one has been used.
    int error = -EACCES;
   ^
   fs/proc/task_namespaces.c:61:8: note: Variable 'error' is reassigned a value before the old one has been used.
    error = ns_get_path(&ns_path, task, ns_ops);
          ^
>> fs/proc/task_namespaces.c:172:6: warning: Variable 'res' is reassigned a value before the old one has been used. [redundantAssignment]
    res = proc_ns_instantiate(dentry, task, *entry);
        ^
   fs/proc/task_namespaces.c:157:0: note: Variable 'res' is reassigned a value before the old one has been used.
    struct dentry *res = ERR_PTR(-ENOENT);
   ^
   fs/proc/task_namespaces.c:172:6: note: Variable 'res' is reassigned a value before the old one has been used.
    res = proc_ns_instantiate(dentry, task, *entry);
        ^
>> fs/proc/namespaces.c:24:16: warning: Either the condition '!p' is redundant or there is overflow in pointer subtraction. [nullPointerArithmeticRedundantCheck]
    *type_len = p - name;
                  ^
   fs/proc/namespaces.c:25:6: note: Assuming that condition '!p' is not redundant
    if (!p || p == name)
        ^
   fs/proc/namespaces.c:24:16: note: Null pointer subtraction
    *type_len = p - name;
                  ^
>> fs/proc/namespaces.c:153:7: warning: Variable 'ret' is reassigned a value before the old one has been used. [redundantAssignment]
     ret = __ns_get_path(&path, ns);
         ^
   fs/proc/namespaces.c:148:7: note: Variable 'ret' is reassigned a value before the old one has been used.
     ret = -ENOENT;
         ^
   fs/proc/namespaces.c:153:7: note: Variable 'ret' is reassigned a value before the old one has been used.
     ret = __ns_get_path(&path, ns);
         ^

# https://github.com/0day-ci/linux/commit/5b434887cc768d2f4c4867c792d69faa662b3cc9
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 5b434887cc768d2f4c4867c792d69faa662b3cc9
vim +24 fs/proc/namespaces.c

5b434887cc768d Kirill Tkhai 2020-07-30   15  
5b434887cc768d Kirill Tkhai 2020-07-30   16  static int parse_namespace_dentry_name(const struct dentry *dentry,
5b434887cc768d Kirill Tkhai 2020-07-30   17  		const char **type, unsigned int *type_len, unsigned int *inum)
5b434887cc768d Kirill Tkhai 2020-07-30   18  {
5b434887cc768d Kirill Tkhai 2020-07-30   19  	const char *p, *name;
5b434887cc768d Kirill Tkhai 2020-07-30   20  	int count;
5b434887cc768d Kirill Tkhai 2020-07-30   21  
5b434887cc768d Kirill Tkhai 2020-07-30   22  	*type = name = dentry->d_name.name;
5b434887cc768d Kirill Tkhai 2020-07-30   23  	p = strchr(name, ':');
5b434887cc768d Kirill Tkhai 2020-07-30  @24  	*type_len = p - name;
5b434887cc768d Kirill Tkhai 2020-07-30   25  	if (!p || p == name)
5b434887cc768d Kirill Tkhai 2020-07-30   26  		return -ENOENT;
5b434887cc768d Kirill Tkhai 2020-07-30   27  
5b434887cc768d Kirill Tkhai 2020-07-30   28  	p += 1;
5b434887cc768d Kirill Tkhai 2020-07-30   29  	if (sscanf(p, "[%u]%n", inum, &count) != 1 || *(p + count) != '\0' ||
5b434887cc768d Kirill Tkhai 2020-07-30   30  	    *inum < PROC_NS_MIN_INO)
5b434887cc768d Kirill Tkhai 2020-07-30   31  		return -ENOENT;
5b434887cc768d Kirill Tkhai 2020-07-30   32  
5b434887cc768d Kirill Tkhai 2020-07-30   33  	return 0;
5b434887cc768d Kirill Tkhai 2020-07-30   34  }
5b434887cc768d Kirill Tkhai 2020-07-30   35  
5b434887cc768d Kirill Tkhai 2020-07-30   36  static struct ns_common *get_namespace_by_dentry(struct pid_namespace *pid_ns,
5b434887cc768d Kirill Tkhai 2020-07-30   37  						 const struct dentry *dentry)
5b434887cc768d Kirill Tkhai 2020-07-30   38  {
5b434887cc768d Kirill Tkhai 2020-07-30   39  	unsigned int type_len, inum, p_inum;
5b434887cc768d Kirill Tkhai 2020-07-30   40  	struct user_namespace *user_ns;
5b434887cc768d Kirill Tkhai 2020-07-30   41  	struct ns_common *ns;
5b434887cc768d Kirill Tkhai 2020-07-30   42  	const char *type;
5b434887cc768d Kirill Tkhai 2020-07-30   43  
5b434887cc768d Kirill Tkhai 2020-07-30   44  	if (parse_namespace_dentry_name(dentry, &type, &type_len, &inum) < 0)
5b434887cc768d Kirill Tkhai 2020-07-30   45  		return NULL;
5b434887cc768d Kirill Tkhai 2020-07-30   46  
5b434887cc768d Kirill Tkhai 2020-07-30   47  	p_inum = inum - 1;
5b434887cc768d Kirill Tkhai 2020-07-30   48  	ns = ns_get_next(&p_inum);
5b434887cc768d Kirill Tkhai 2020-07-30   49  	if (!ns)
5b434887cc768d Kirill Tkhai 2020-07-30   50  		return NULL;
5b434887cc768d Kirill Tkhai 2020-07-30   51  
5b434887cc768d Kirill Tkhai 2020-07-30   52  	if (ns->inum != inum || strncmp(type, ns->ops->name, type_len) != 0 ||
5b434887cc768d Kirill Tkhai 2020-07-30   53  	    ns->ops->name[type_len] != '\0') {
5b434887cc768d Kirill Tkhai 2020-07-30   54  		ns->ops->put(ns);
5b434887cc768d Kirill Tkhai 2020-07-30   55  		return NULL;
5b434887cc768d Kirill Tkhai 2020-07-30   56  	}
5b434887cc768d Kirill Tkhai 2020-07-30   57  
5b434887cc768d Kirill Tkhai 2020-07-30   58  	if (ns->ops != &userns_operations)
5b434887cc768d Kirill Tkhai 2020-07-30   59  		user_ns = ns->ops->owner(ns);
5b434887cc768d Kirill Tkhai 2020-07-30   60  	else
5b434887cc768d Kirill Tkhai 2020-07-30   61  		user_ns = container_of(ns, struct user_namespace, ns);
5b434887cc768d Kirill Tkhai 2020-07-30   62  
5b434887cc768d Kirill Tkhai 2020-07-30   63  	if (!in_userns(pid_ns->user_ns, user_ns)) {
5b434887cc768d Kirill Tkhai 2020-07-30   64  		ns->ops->put(ns);
5b434887cc768d Kirill Tkhai 2020-07-30   65  		return NULL;
5b434887cc768d Kirill Tkhai 2020-07-30   66  	}
5b434887cc768d Kirill Tkhai 2020-07-30   67  
5b434887cc768d Kirill Tkhai 2020-07-30   68  	return ns;
5b434887cc768d Kirill Tkhai 2020-07-30   69  }
5b434887cc768d Kirill Tkhai 2020-07-30   70  
5b434887cc768d Kirill Tkhai 2020-07-30   71  static struct dentry *proc_namespace_instantiate(struct dentry *dentry,
5b434887cc768d Kirill Tkhai 2020-07-30   72  		struct task_struct *task, const void *ptr);
5b434887cc768d Kirill Tkhai 2020-07-30   73  
5b434887cc768d Kirill Tkhai 2020-07-30   74  static struct dentry *proc_namespaces_lookup(struct inode *dir, struct dentry *dentry,
5b434887cc768d Kirill Tkhai 2020-07-30   75  					     unsigned int flags)
5b434887cc768d Kirill Tkhai 2020-07-30   76  {
5b434887cc768d Kirill Tkhai 2020-07-30   77  	struct pid_namespace *pid_ns = proc_pid_ns(dir->i_sb);
5b434887cc768d Kirill Tkhai 2020-07-30   78  	struct task_struct *task;
5b434887cc768d Kirill Tkhai 2020-07-30   79  	struct ns_common *ns;
5b434887cc768d Kirill Tkhai 2020-07-30   80  
5b434887cc768d Kirill Tkhai 2020-07-30   81  	ns = get_namespace_by_dentry(pid_ns, dentry);
5b434887cc768d Kirill Tkhai 2020-07-30   82  	if (!ns)
5b434887cc768d Kirill Tkhai 2020-07-30   83  		return ERR_PTR(-ENOENT);
5b434887cc768d Kirill Tkhai 2020-07-30   84  
5b434887cc768d Kirill Tkhai 2020-07-30   85  	read_lock(&tasklist_lock);
5b434887cc768d Kirill Tkhai 2020-07-30   86  	task = get_task_struct(pid_ns->child_reaper);
5b434887cc768d Kirill Tkhai 2020-07-30   87  	read_unlock(&tasklist_lock);
5b434887cc768d Kirill Tkhai 2020-07-30   88  
5b434887cc768d Kirill Tkhai 2020-07-30   89  	dentry = proc_namespace_instantiate(dentry, task, ns);
5b434887cc768d Kirill Tkhai 2020-07-30   90  	put_task_struct(task);
5b434887cc768d Kirill Tkhai 2020-07-30   91  	ns->ops->put(ns);
5b434887cc768d Kirill Tkhai 2020-07-30   92  
5b434887cc768d Kirill Tkhai 2020-07-30   93  	return dentry;
5b434887cc768d Kirill Tkhai 2020-07-30   94  }
5b434887cc768d Kirill Tkhai 2020-07-30   95  
5b434887cc768d Kirill Tkhai 2020-07-30   96  static int proc_namespaces_permission(struct inode *inode, int mask)
5b434887cc768d Kirill Tkhai 2020-07-30   97  {
5b434887cc768d Kirill Tkhai 2020-07-30   98  	if ((mask & MAY_EXEC) && S_ISLNK(inode->i_mode))
5b434887cc768d Kirill Tkhai 2020-07-30   99  		return -EACCES;
5b434887cc768d Kirill Tkhai 2020-07-30  100  
5b434887cc768d Kirill Tkhai 2020-07-30  101  	return 0;
5b434887cc768d Kirill Tkhai 2020-07-30  102  }
5b434887cc768d Kirill Tkhai 2020-07-30  103  
5b434887cc768d Kirill Tkhai 2020-07-30  104  static int proc_namespaces_getattr(const struct path *path, struct kstat *stat,
5b434887cc768d Kirill Tkhai 2020-07-30  105  				   u32 request_mask, unsigned int query_flags)
5b434887cc768d Kirill Tkhai 2020-07-30  106  {
5b434887cc768d Kirill Tkhai 2020-07-30  107  	struct inode *inode = d_inode(path->dentry);
5b434887cc768d Kirill Tkhai 2020-07-30  108  
5b434887cc768d Kirill Tkhai 2020-07-30  109  	generic_fillattr(inode, stat);
5b434887cc768d Kirill Tkhai 2020-07-30  110  	return 0;
5b434887cc768d Kirill Tkhai 2020-07-30  111  }
5b434887cc768d Kirill Tkhai 2020-07-30  112  
5b434887cc768d Kirill Tkhai 2020-07-30  113  static const struct inode_operations proc_namespaces_inode_operations = {
5b434887cc768d Kirill Tkhai 2020-07-30  114  	.lookup		= proc_namespaces_lookup,
5b434887cc768d Kirill Tkhai 2020-07-30  115  	.permission	= proc_namespaces_permission,
5b434887cc768d Kirill Tkhai 2020-07-30  116  	.getattr	= proc_namespaces_getattr,
5b434887cc768d Kirill Tkhai 2020-07-30  117  };
5b434887cc768d Kirill Tkhai 2020-07-30  118  
5b434887cc768d Kirill Tkhai 2020-07-30  119  static int proc_namespaces_readlink(struct dentry *dentry, char __user *buffer, int buflen)
5b434887cc768d Kirill Tkhai 2020-07-30  120  {
5b434887cc768d Kirill Tkhai 2020-07-30  121  	struct inode *dir = dentry->d_parent->d_inode;
5b434887cc768d Kirill Tkhai 2020-07-30  122  	struct pid_namespace *pid_ns = proc_pid_ns(dir->i_sb);
5b434887cc768d Kirill Tkhai 2020-07-30  123  	struct ns_common *ns;
5b434887cc768d Kirill Tkhai 2020-07-30  124  
5b434887cc768d Kirill Tkhai 2020-07-30  125  	ns = get_namespace_by_dentry(pid_ns, dentry);
5b434887cc768d Kirill Tkhai 2020-07-30  126  	if (!ns)
5b434887cc768d Kirill Tkhai 2020-07-30  127  		return -ENOENT;
5b434887cc768d Kirill Tkhai 2020-07-30  128  	ns->ops->put(ns);
5b434887cc768d Kirill Tkhai 2020-07-30  129  
5b434887cc768d Kirill Tkhai 2020-07-30  130  	/* proc_namespaces_readdir() creates dentry names in namespace format */
5b434887cc768d Kirill Tkhai 2020-07-30  131  	return readlink_copy(buffer, buflen, dentry->d_iname);
5b434887cc768d Kirill Tkhai 2020-07-30  132  }
5b434887cc768d Kirill Tkhai 2020-07-30  133  
5b434887cc768d Kirill Tkhai 2020-07-30  134  int __ns_get_path(struct path *path, struct ns_common *ns);
5b434887cc768d Kirill Tkhai 2020-07-30  135  
5b434887cc768d Kirill Tkhai 2020-07-30  136  static const char *proc_namespaces_getlink(struct dentry *dentry,
5b434887cc768d Kirill Tkhai 2020-07-30  137  				struct inode *inode, struct delayed_call *done)
5b434887cc768d Kirill Tkhai 2020-07-30  138  {
5b434887cc768d Kirill Tkhai 2020-07-30  139  	struct pid_namespace *pid_ns = proc_pid_ns(inode->i_sb);
5b434887cc768d Kirill Tkhai 2020-07-30  140  	struct ns_common *ns;
5b434887cc768d Kirill Tkhai 2020-07-30  141  	struct path path;
5b434887cc768d Kirill Tkhai 2020-07-30  142  	int ret;
5b434887cc768d Kirill Tkhai 2020-07-30  143  
5b434887cc768d Kirill Tkhai 2020-07-30  144  	if (!dentry)
5b434887cc768d Kirill Tkhai 2020-07-30  145  		return ERR_PTR(-ECHILD);
5b434887cc768d Kirill Tkhai 2020-07-30  146  
5b434887cc768d Kirill Tkhai 2020-07-30  147  	while (1) {
5b434887cc768d Kirill Tkhai 2020-07-30  148  		ret = -ENOENT;
5b434887cc768d Kirill Tkhai 2020-07-30  149  		ns = get_namespace_by_dentry(pid_ns, dentry);
5b434887cc768d Kirill Tkhai 2020-07-30  150  		if (!ns)
5b434887cc768d Kirill Tkhai 2020-07-30  151  			goto out;
5b434887cc768d Kirill Tkhai 2020-07-30  152  
5b434887cc768d Kirill Tkhai 2020-07-30 @153  		ret = __ns_get_path(&path, ns);
5b434887cc768d Kirill Tkhai 2020-07-30  154  		if (ret == -EAGAIN)
5b434887cc768d Kirill Tkhai 2020-07-30  155  			continue;
5b434887cc768d Kirill Tkhai 2020-07-30  156  		if (ret)
5b434887cc768d Kirill Tkhai 2020-07-30  157  			goto out;
5b434887cc768d Kirill Tkhai 2020-07-30  158  		break;
5b434887cc768d Kirill Tkhai 2020-07-30  159  	}
5b434887cc768d Kirill Tkhai 2020-07-30  160  
5b434887cc768d Kirill Tkhai 2020-07-30  161  	ret = nd_jump_link(&path);
5b434887cc768d Kirill Tkhai 2020-07-30  162  out:
5b434887cc768d Kirill Tkhai 2020-07-30  163  	return ERR_PTR(ret);
5b434887cc768d Kirill Tkhai 2020-07-30  164  }
5b434887cc768d Kirill Tkhai 2020-07-30  165  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 81+ messages in thread

end of thread, other threads:[~2020-08-17 18:57 UTC | newest]

Thread overview: 81+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-30 11:59 [PATCH 00/23] proc: Introduce /proc/namespaces/ directory to expose namespaces lineary Kirill Tkhai
2020-07-30 11:59 ` [PATCH 01/23] ns: Add common refcount into ns_common add use it as counter for net_ns Kirill Tkhai
2020-07-30 13:35   ` Christian Brauner
2020-07-30 14:07     ` Kirill Tkhai
2020-07-30 15:59       ` Christian Brauner
2020-07-30 14:30   ` Christian Brauner
2020-07-30 14:34     ` Kirill Tkhai
2020-07-30 14:39       ` Christian Brauner
2020-07-30 11:59 ` [PATCH 02/23] uts: Use generic ns_common::count Kirill Tkhai
2020-07-30 14:30   ` Christian Brauner
2020-07-30 11:59 ` [PATCH 03/23] ipc: " Kirill Tkhai
2020-07-30 14:32   ` Christian Brauner
2020-07-30 11:59 ` [PATCH 04/23] pid: " Kirill Tkhai
2020-07-30 14:37   ` Christian Brauner
2020-07-30 11:59 ` [PATCH 05/23] user: " Kirill Tkhai
2020-07-30 14:46   ` Christian Brauner
2020-07-30 11:59 ` [PATCH 06/23] mnt: " Kirill Tkhai
2020-07-30 14:49   ` Christian Brauner
2020-07-30 11:59 ` [PATCH 07/23] cgroup: " Kirill Tkhai
2020-07-30 14:50   ` Christian Brauner
2020-07-30 12:00 ` [PATCH 08/23] time: " Kirill Tkhai
2020-07-30 14:52   ` Christian Brauner
2020-07-30 12:00 ` [PATCH 09/23] ns: Introduce ns_idr to be able to iterate all allocated namespaces in the system Kirill Tkhai
2020-07-30 12:23   ` Matthew Wilcox
2020-07-30 13:32     ` Kirill Tkhai
2020-07-30 13:56       ` Matthew Wilcox
2020-07-30 14:12         ` Kirill Tkhai
2020-07-30 14:15           ` Matthew Wilcox
2020-07-30 14:20             ` Kirill Tkhai
2020-07-30 12:00 ` [PATCH 10/23] fs: Rename fs/proc/namespaces.c into fs/proc/task_namespaces.c Kirill Tkhai
2020-07-30 12:00 ` [PATCH 11/23] fs: Add /proc/namespaces/ directory Kirill Tkhai
2020-07-30 12:18   ` Alexey Dobriyan
2020-07-30 13:22     ` Kirill Tkhai
2020-07-30 13:26   ` Christian Brauner
2020-07-30 14:30     ` Kirill Tkhai
2020-07-30 20:47   ` kernel test robot
2020-07-30 20:47     ` kernel test robot
2020-07-30 22:20   ` kernel test robot
2020-07-30 22:20     ` kernel test robot
2020-08-05  8:17   ` kernel test robot
2020-08-05  8:17     ` kernel test robot
2020-08-05  8:17   ` [RFC PATCH] fs: namespaces_dentry_operations can be static kernel test robot
2020-08-05  8:17     ` kernel test robot
2020-07-30 12:00 ` [PATCH 12/23] user: Free user_ns one RCU grace period after final counter put Kirill Tkhai
2020-07-30 12:00 ` [PATCH 13/23] user: Add user namespaces into ns_idr Kirill Tkhai
2020-07-30 12:00 ` [PATCH 14/23] net: Add net " Kirill Tkhai
2020-07-30 12:00 ` [PATCH 15/23] pid: Eextract child_reaper check from pidns_for_children_get() Kirill Tkhai
2020-07-30 12:00 ` [PATCH 16/23] proc_ns_operations: Add can_get method Kirill Tkhai
2020-07-30 12:00 ` [PATCH 17/23] pid: Add pid namespaces into ns_idr Kirill Tkhai
2020-07-30 12:00 ` [PATCH 18/23] uts: Free uts namespace one RCU grace period after final counter put Kirill Tkhai
2020-07-30 12:01 ` [PATCH 19/23] uts: Add uts namespaces into ns_idr Kirill Tkhai
2020-07-30 12:01 ` [PATCH 20/23] ipc: Add ipc " Kirill Tkhai
2020-07-30 12:01 ` [PATCH 21/23] mnt: Add mount " Kirill Tkhai
2020-07-30 12:01 ` [PATCH 22/23] cgroup: Add cgroup " Kirill Tkhai
2020-07-30 12:01 ` [PATCH 23/23] time: Add time " Kirill Tkhai
2020-07-30 13:08 ` [PATCH 00/23] proc: Introduce /proc/namespaces/ directory to expose namespaces lineary Christian Brauner
2020-07-30 13:38   ` Christian Brauner
2020-07-30 14:34 ` Eric W. Biederman
2020-07-30 14:42   ` Christian Brauner
2020-07-30 15:01   ` Kirill Tkhai
2020-07-30 22:13     ` Eric W. Biederman
2020-07-31  8:48       ` Pavel Tikhomirov
2020-08-03 10:03       ` Kirill Tkhai
2020-08-03 10:51         ` Alexey Dobriyan
2020-08-06  8:05         ` Andrei Vagin
2020-08-07  8:47           ` Kirill Tkhai
2020-08-10 17:34             ` Andrei Vagin
2020-08-11 10:23               ` Kirill Tkhai
2020-08-12 17:53                 ` Andrei Vagin
2020-08-13  8:12                   ` Kirill Tkhai
2020-08-14  1:16                     ` Andrei Vagin
2020-08-14 15:11                       ` Kirill Tkhai
2020-08-14 19:21                         ` Andrei Vagin
2020-08-17 14:05                           ` Kirill Tkhai
2020-08-17 15:48                             ` Eric W. Biederman
2020-08-17 17:47                               ` Christian Brauner
2020-08-17 18:53                                 ` Eric W. Biederman
2020-08-04  5:43     ` Andrei Vagin
2020-08-04 12:11       ` Pavel Tikhomirov
2020-08-04 14:47       ` Kirill Tkhai
2020-08-05  4:17 [PATCH 11/23] fs: Add /proc/namespaces/ directory kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.