17 Apr, 2014

1 commit

  • kernfs_iattrs is allocated lazily when operations which require it
    take place; unfortunately, the lazy allocation and returning weren't
    properly synchronized and when there are multiple concurrent
    operations, it might end up returning kernfs_iattrs which hasn't
    finished initialization yet or different copies to different callers.

    Fix it by synchronizing with a mutex. This can be smarter with memory
    barriers but let's go there if it actually turns out to be necessary.

    Signed-off-by: Tejun Heo
    Link: http://lkml.kernel.org/g/533ABA32.9080602@oracle.com
    Reported-by: Sasha Levin
    Cc: stable@vger.kernel.org # 3.14
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     

04 Apr, 2014

1 commit

  • Reclaim will be leaving shadow entries in the page cache radix tree upon
    evicting the real page. As those pages are found from the LRU, an
    iput() can lead to the inode being freed concurrently. At this point,
    reclaim must no longer install shadow pages because the inode freeing
    code needs to ensure the page tree is really empty.

    Add an address_space flag, AS_EXITING, that the inode freeing code sets
    under the tree lock before doing the final truncate. Reclaim will check
    for this flag before installing shadow pages.

    Signed-off-by: Johannes Weiner
    Reviewed-by: Rik van Riel
    Reviewed-by: Minchan Kim
    Cc: Andrea Arcangeli
    Cc: Bob Liu
    Cc: Christoph Hellwig
    Cc: Dave Chinner
    Cc: Greg Thelen
    Cc: Hugh Dickins
    Cc: Jan Kara
    Cc: KOSAKI Motohiro
    Cc: Luigi Semenzato
    Cc: Mel Gorman
    Cc: Metin Doslu
    Cc: Michel Lespinasse
    Cc: Ozgun Erdogan
    Cc: Peter Zijlstra
    Cc: Roman Gushchin
    Cc: Ryan Mallon
    Cc: Tejun Heo
    Cc: Vlastimil Babka
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Johannes Weiner
     

12 Dec, 2013

6 commits

  • kernfs has just been separated out from sysfs and we're already in
    full conflict mode. Nothing can make the situation any worse. Let's
    take the chance to name things properly.

    This patch performs the following renames.

    * s/sysfs_*()/kernfs_*()/ in all internal functions
    * s/sysfs/kernfs/ in internal strings, comments and whatever is remaining
    * Uniformly rename various vfs operations so that they're consistently
    named and distinguishable.

    This patch is strictly rename only and doesn't introduce any
    functional difference.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • kernfs has just been separated out from sysfs and we're already in
    full conflict mode. Nothing can make the situation any worse. Let's
    take the chance to name things properly.

    This patch performs the following renames.

    * s/sysfs_mutex/kernfs_mutex/
    * s/sysfs_dentry_ops/kernfs_dops/
    * s/sysfs_dir_operations/kernfs_dir_fops/
    * s/sysfs_dir_inode_operations/kernfs_dir_iops/
    * s/kernfs_file_operations/kernfs_file_fops/ - renamed for consistency
    * s/sysfs_symlink_inode_operations/kernfs_symlink_iops/
    * s/sysfs_aops/kernfs_aops/
    * s/sysfs_backing_dev_info/kernfs_bdi/
    * s/sysfs_inode_operations/kernfs_iops/
    * s/sysfs_dir_cachep/kernfs_node_cache/
    * s/sysfs_ops/kernfs_sops/

    This patch is strictly rename only and doesn't introduce any
    functional difference.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • kernfs has just been separated out from sysfs and we're already in
    full conflict mode. Nothing can make the situation any worse. Let's
    take the chance to name things properly.

    This patch performs the following renames.

    * s/SYSFS_DIR/KERNFS_DIR/
    * s/SYSFS_KOBJ_ATTR/KERNFS_FILE/
    * s/SYSFS_KOBJ_LINK/KERNFS_LINK/
    * s/SYSFS_{TYPE_FLAGS}/KERNFS_{TYPE_FLAGS}/
    * s/SYSFS_FLAG_{FLAG}/KERNFS_{FLAG}/
    * s/sysfs_type()/kernfs_type()/
    * s/SD_DEACTIVATED_BIAS/KN_DEACTIVATED_BIAS/

    This patch is strictly rename only and doesn't introduce any
    functional difference.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • kernfs has just been separated out from sysfs and we're already in
    full conflict mode. Nothing can make the situation any worse. Let's
    take the chance to name things properly.

    This patch performs the following renames.

    * s/sysfs_open_dirent/kernfs_open_node/
    * s/sysfs_open_file/kernfs_open_file/
    * s/sysfs_inode_attrs/kernfs_iattrs/
    * s/sysfs_addrm_cxt/kernfs_addrm_cxt/
    * s/sysfs_super_info/kernfs_super_info/
    * s/sysfs_info()/kernfs_info()/
    * s/sysfs_open_dirent_lock/kernfs_open_node_lock/
    * s/sysfs_open_file_mutex/kernfs_open_file_mutex/
    * s/sysfs_of()/kernfs_of()/

    This patch is strictly rename only and doesn't introduce any
    functional difference.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • kernfs has just been separated out from sysfs and we're already in
    full conflict mode. Nothing can make the situation any worse. Let's
    take the chance to name things properly.

    s_ prefix for kernfs members is used inconsistently and a misnomer
    now. It's not like kernfs_node is used widely across the kernel
    making the ability to grep for the members particularly useful. Let's
    just drop the prefix.

    This patch is strictly rename only and doesn't introduce any
    functional difference.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • kernfs has just been separated out from sysfs and we're already in
    full conflict mode. Nothing can make the situation any worse. Let's
    take the chance to name things properly.

    This patch performs the following renames.

    * s/sysfs_elem_dir/kernfs_elem_dir/
    * s/sysfs_elem_symlink/kernfs_elem_symlink/
    * s/sysfs_elem_attr/kernfs_elem_file/
    * s/sysfs_dirent/kernfs_node/
    * s/sd/kn/ in kernfs proper
    * s/parent_sd/parent/
    * s/target_sd/target/
    * s/dir_sd/parent/
    * s/to_sysfs_dirent()/rb_to_kn()/
    * misc renames of local vars when they conflict with the above

    Because md, mic and gpio dig into sysfs details, this patch ends up
    modifying them. All are sysfs_dirent renames and trivial. While we
    can avoid these by introducing a dummy wrapping struct sysfs_dirent
    around kernfs_node, given the limited usage outside kernfs and sysfs
    proper, I don't think such workaround is called for.

    This patch is strictly rename only and doesn't introduce any
    functional difference.

    - mic / gpio renames were missing. Spotted by kbuild test robot.

    Signed-off-by: Tejun Heo
    Cc: Neil Brown
    Cc: Linus Walleij
    Cc: Ashutosh Dixit
    Cc: kbuild test robot
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     

04 Dec, 2013

2 commits

  • kernfs inherited "security.*" xattr support from sysfs. This patch
    extends xattr support to "trusted.*" using simple_xattr_*(). As
    trusted xattrs are restricted to CAP_SYS_ADMIN, simple_xattr_*() which
    uses kernel memory for storage shouldn't be problematic.

    Note that the existing "security.*" support doesn't implement
    get/remove/list and the this patch only implements those ops for
    "trusted.*". We probably want to extend those ops to include support
    for "security.*".

    This patch will allow using kernfs from cgroup which requires
    "trusted.*" xattr support.

    Signed-off-by: Tejun Heo
    Cc: David P. Quigley
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs_init_inode_attrs() is a bit clumsy to use requiring the caller
    to check whether @sd->s_iattr is already set or not. Rename it to
    sysfs_inode_attrs(), update it to check whether @sd->s_iattr is
    already initialized before trying to initialize it and return
    @sd->s_iattr. This simplifies the callers.

    While at it,

    * Rename struct sysfs_inode_attrs pointer variables to "attrs". As
    kernfs no longer deals with "struct attribute", this isn't confusing
    and makes it easier to distinguish from struct iattr pointers.

    * A new field will be added to sysfs_inode_attrs. Reindent in
    preparation.

    This patch doesn't introduce any behavior changes.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     

30 Nov, 2013

2 commits

  • We're in the process of separating out core sysfs functionality into
    kernfs which will deal with sysfs_dirents directly. This patch
    rearranges mount path so that the kernfs and sysfs parts are separate.

    * As sysfs_super_info won't be visible outside kernfs proper,
    kernfs_super_ns() is added to allow kernfs users to access a
    super_block's namespace tag.

    * Generic mount operation is separated out into kernfs_mount_ns().
    sysfs_mount() now just performs sysfs-specific permission check,
    acquires namespace tag, and invokes kernfs_mount_ns().

    * Generic superblock release is separated out into kernfs_kill_sb()
    which can be used directly as file_system_type->kill_sb(). As sysfs
    needs to put the namespace tag, sysfs_kill_sb() wraps
    kernfs_kill_sb() with ns tag put.

    * sysfs_dir_cachep init and sysfs_inode_init() are separated out into
    kernfs_init(). kernfs_init() uses only small amount of memory and
    trying to handle and propagate kernfs_init() failure doesn't make
    much sense. Use SLAB_PANIC for sysfs_dir_cachep and make
    sysfs_inode_init() panic on failure.

    After this change, kernfs_init() should be called before
    sysfs_init(), fs/namespace.c::mnt_init() modified accordingly.

    Signed-off-by: Tejun Heo
    Cc: linux-fsdevel@vger.kernel.org
    Cc: Christoph Hellwig
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • There's nothing sysfs-specific in fs/sysfs/inode.c. Move everything
    in it to fs/kernfs/inode.c. The respective declarations in
    fs/sysfs/sysfs.h are moved to fs/kernfs/kernfs-internal.h.

    This is pure relocation.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     

28 Nov, 2013

1 commit

  • Core sysfs implementation will be separated into kernfs so that it can
    be used by other non-kobject users.

    This patch creates fs/kernfs/ directory and makes boilerplate changes.
    kernfs interface will be directly based on sysfs_dirent and its
    forward declaration is moved to include/linux/kernfs.h which is
    included from include/linux/sysfs.h. sysfs core implementation will
    be gradually separated out and moved to kernfs.

    This patch doesn't introduce any functional changes.

    v2: mount.c added.

    Signed-off-by: Tejun Heo
    Cc: linux-fsdevel@vger.kernel.org
    Cc: Christoph Hellwig
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo