Skip to content
  • Tejun Heo's avatar
    sysfs, kernfs: implement kernfs_create/destroy_root() · ba7443bc
    Tejun Heo authored
    
    
    There currently is single kernfs hierarchy in the whole system which
    is used for sysfs.  kernfs needs to support multiple hierarchies to
    allow other users.  This patch introduces struct kernfs_root which
    serves as the root of each kernfs hierarchy and implements
    kernfs_create/destroy_root().
    
    * Each kernfs_root is associated with a root sd (sysfs_dentry).  The
      root is freed when the root sd is released and kernfs_destory_root()
      simply invokes kernfs_remove() on the root sd.  sysfs_remove_one()
      is updated to handle release of the root sd.  Note that ps_iattr
      update in sysfs_remove_one() is trivially updated for readability.
    
    * Root sd's are now dynamically allocated using sysfs_new_dirent().
      Update sysfs_alloc_ino() so that it gives out ino from 1 so that the
      root sd still gets ino 1.
    
    * While kernfs currently only points to the root sd, it'll soon grow
      fields which are specific to each hierarchy.  As determining a given
      sd's root will be necessary, sd->s_dir.root is added.  This backlink
      fits better as a separate field in sd; however, sd->s_dir is inside
      union with space to spare, so use it to save space and provide
      kernfs_root() accessor to determine the root sd.
    
    * As hierarchies may be destroyed now, each mount needs to hold onto
      the hierarchy it's attached to.  Update sysfs_fill_super() and
      sysfs_kill_sb() so that they get and put the kernfs_root
      respectively.
    
    * sysfs_root is replaced with kernfs_root which is dynamically created
      by invoking kernfs_create_root() from sysfs_init().
    
    This patch doesn't introduce any visible behavior changes.
    
    v2: kernfs_create_root() forgot to set @sd->priv.  Fixed.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ba7443bc