函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:fs\namespace.c Create Date:2022-07-29 10:39:44
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:copy_mnt_ns

函数原型:struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns, struct user_namespace *user_ns, struct fs_struct *new_fs)

返回类型:struct mnt_namespace

参数:

类型参数名称
unsigned longflags
struct mnt_namespace *ns
struct user_namespace *user_ns
struct fs_struct *new_fs
3216  struct vfsmount * rootmnt = NULL, * pwdmnt = NULL
3222  BUG_ON(!ns)
3224  如果此条件成立可能性大(为编译器优化)(!(flags & 在新的namespace启动子进程))则
3225  get_mnt_ns(ns)
3226  返回:ns
3229  old等于root
3231  new_ns等于alloc_mnt_ns(user_ns, false)
3232  如果是错误则返回:new_ns
3235  namespace_lock()
3237  copy_flags等于CL_COPY_UNBINDABLE按位或CL_EXPIRE
3238  如果user_ns不等于user_nscopy_flags或等于CL_SHARED_TO_SLAVE
3240  new等于copy_tree(old, root of the mounted tree , copy_flags)
3241  如果是错误
3242  namespace_unlock()
3243  free_mnt_ns(new_ns)
3244  返回:错误指示
3246  如果user_ns不等于user_ns
3247  lock_mount_hash()
3248  lock_mnt_tree(new)
3249  unlock_mount_hash()
3251  root等于new
3252  添加链表项
3259  p等于old
3260  q等于new
3261 p循环
3262  containing namespace 等于new_ns
3263  # of mounts in the namespace 自加
3264  如果new_fs
3265  如果mnt恒等于mnt
3266  mnt等于mntget( & mnt)
3267  rootmnt等于mnt
3269  如果mnt恒等于mnt
3270  mnt等于mntget( & mnt)
3271  pwdmnt等于mnt
3274  p等于next_mnt(p, old)
3275  q等于next_mnt(q, new)
3276  如果非q退出
3278  root of the mounted tree 不等于 root of the mounted tree 循环
3279  p等于next_mnt(p, old)
3281  namespace_unlock()
3283  如果rootmntmntput(rootmnt)
3285  如果pwdmntmntput(pwdmnt)
3288  返回:new_ns
调用者
名称描述
create_new_namespacesCreate new nsproxy and all of its the associated namespaces.* Return the newly created nsproxy. Do not attach this to the task,* leave it to the caller to do proper locking and attach it to task.