17 Oct, 2007

4 commits

  • Replace some SPIN_LOCK_UNLOCKED with DEFINE_SPINLOCK

    Signed-off-by: Roel Kluin
    Acked-by: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roel Kluin
     
  • provide BDI constructor/destructor hooks

    [akpm@linux-foundation.org: compile fix]
    Signed-off-by: Peter Zijlstra
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • Try to fix the mess created by sysfs braindamage.

    - refactor code internal to fs/namei.c a little to avoid too much
    duplication:
    o __lookup_hash_kern is renamed back to __lookup_hash
    o the old __lookup_hash goes away, permission checks moves to
    the two callers
    o useless inline qualifiers on above functions go away
    - lookup_one_len_kern loses it's last argument and is renamed to
    lookup_one_noperm to make it's useage a little more clear
    - added kerneldoc comments to describe lookup_one_len aswell as
    lookup_one_noperm and make it very clear that no one should use
    the latter ever.

    Signed-off-by: Christoph Hellwig
    Cc: Josef 'Jeff' Sipek
    Cc: Miklos Szeredi
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Implement new aops for some of the simpler filesystems.

    Signed-off-by: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     

13 Oct, 2007

36 commits

  • Sysfs has gone through considerable amount of reimplementation. Add
    copyrights. Any objections? :-)

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

    Tejun Heo
     
  • Sysfs file poll implementation is scattered over sysfs and kobject.
    Event numbering is done in sysfs_dirent but wait itself is done on
    kobject. This not only unecessarily bloats both kobject and
    sysfs_dirent but is also buggy - if a sysfs_dirent is removed while
    there still are pollers, the associaton betwen the kobject and
    sysfs_dirent breaks and kobject may be freed with the pollers still
    sleeping on it.

    This patch moves whole poll implementation into sysfs_open_dirent.
    Each time a sysfs_open_dirent is created, event number restarts from 1
    and pollers sleep on sysfs_open_dirent. As event sequence number is
    meaningless without any open file and pollers should have open file
    and thus sysfs_open_dirent, this ephemeral event counting works and is
    a saner implementation.

    This patch fixes the dnagling sleepers bug and reduces the sizes of
    kobject and sysfs_dirent by one pointer.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Implement sysfs_open_dirent which represents an open file (attribute)
    sysfs_dirent. A file sysfs_dirent with one or more open files have
    one sysfs_dirent and all sysfs_buffers (one for each open instance)
    are linked to it.

    sysfs_open_dirent doesn't actually do anything yet but will be used to
    off-load things which are specific for open file sysfs_dirent from it.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Children list head is only meaninful for directory nodes. Move it
    into s_dir. This doesn't save any space currently but it will with
    further changes.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs_root is different from a regular directory dirent in that it's
    of type SYSFS_ROOT and doesn't have a name. These differences aren't
    used by anybody and only adds to complexity. Make sysfs_root a
    regular directory dirent.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs_attach_dentry() now has only one caller and isn't doing much
    other than obfuscating the code. Open code and kill it.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Make s_elem an anonymous union. Prefixing with s_elem makes things
    needlessly longer without any advantage.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • All bin attr operations require active references of itself and its
    parent. There's no reason to allow open when its parent has been
    deactivated and allowing it is inconsistent with regular sysfs file.
    Use sysfs_get_active_two() in bin attribute open function.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • In sysfs_release(), sysfs_buffer pointed to by filp->private_data is
    guaranteed to exist. Kill the unnecessary NULL check. This also
    makes the code more consistent with the counterpart in fs/sysfs/bin.c.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • There's no reason to get an extra reference to sysfs_dirent for an
    open file. Open file has a reference to the dentry which in turn has
    a reference to sysfs_dirent. This is fairly obvious as otherwise open
    itself won't be able to access the sysfs_dirent. Kill the extra
    sysfs_get() and matching sysfs_put().

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Move s_mode downward such that it's side-by-side with s_iattr which is
    used for the same thing.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs_update_file() depends on inode->i_mtime but sysfs iondes are now
    reclaimable making the reported modification time unreliable. There's
    only one user (pci hotplug) of this notification mechanism and it
    reportedly isn't utilized from userland.

    Kill sysfs_update_file().

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs is about to go through major overhaul making this a pretty good
    opportunity to clean up (out-of-tree changes and pending patches will
    need regeneration anyway). Clean up headers.

    * Kill space between * and symbolname.

    * Move SYSFS_* type constants and flags into fs/sysfs/sysfs.h.
    They're internal to sysfs.

    * Reformat function prototypes and add argument symbol names.

    * Make dummy function definition order match that of function
    prototypes.

    * Add some comments.

    * Reorganize fs/sysfs/sysfs.h according to which file the declared
    variable or feature lives in.

    This patch does not introduce any behavior change.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs_chmod_file() looked and updated only inode of the target file.
    Dentry and inode are reclaimable and the update mode data will go away
    when the inode is reclaimed. This patch makes sysfs_chmod_file()
    update sd->s_mode too such that the change is permanent.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • sysfs_add/remove_one() now link and unlink the target dirent into and
    from the children list. Update comments accordingly.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • We want to let people know when we create a duplicate sysfs file, as
    they need to fix up their code.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This patch rewrites sysfs_move_dir to perform it's checks
    as much as possible on the underlying sysfs_dirents instead
    of the contents of the dcache, making sysfs_move_dir
    more like the rest of the sysfs directory modification
    code.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • This patch rewrites sysfs_rename_dir to perform it's checks
    as much as possible on the underlying sysfs_dirents instead
    of the contents of the dcache. It turns out that this version
    is a little simpler, and a little more like the rest of
    the sysfs directory modification code.

    tj: fixed double locking of sysfs_mutex

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • The only uses of s_dentry left are the code that maintains
    s_dentry and trivial users that don't actually need it.
    So this patch removes the s_dentry maintenance code and
    restructures the trivial uses to use something else.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Now that we know the sysfs tree structure cannot change under us and
    sysfs shadow support is dropped, sysfs_get_dentry() can be simplified
    greatly. It can just look up from the root and there's no need to
    retry on failure.

    Signed-off-by: Tejun Heo
    Cc: Eric W. Biederman
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Looking carefully at the rename code we have a subtle dependency
    that the structure of sysfs not change while we are performing
    a rename. If the parent directory of the object we are renaming
    changes while the rename is being performed nasty things could
    happen when we go to release our locks.

    So introduce a sysfs_rename_mutex to prevent this highly
    unlikely theoretical issue.

    In addition hold sysfs_rename_mutex over all calls to
    sysfs_get_dentry. Allowing sysfs_get_dentry to be simplified
    in the future.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Currently we find the dentry to drop by looking at sd->s_dentry.
    We can just as easily accomplish the same task by looking up the
    sysfs inode and finding all of the dentries from there, with the
    added bonus that we don't need to play with the sysfs_assoc_lock.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • At some point someone wrote sysfs_readdir to insert a cursor
    into the list of sysfs_dirents to ensure that sysfs_readdir would
    restart properly. That works but it is complex code and tends
    to be expensive.

    The same effect can be achieved by keeping the sysfs_dirents in
    inode order and using the inode number as the f_pos. Then
    when we restart we just have to find the first dirent whose inode
    number is equal or greater then the last sysfs_dirent we attempted
    to return.

    Removing the sysfs directory cursor also allows the remove of
    all of the mysterious checks for sysfs_type(sd) != 0. Which
    were nonbovious checks to see if a cursor was in a directory list.

    tj: offset marker for EOF is changed from UINT_MAX to INT_MAX to avoid
    overflow in case offset is 32bit.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • This is a small cleanup patch that makes the code just
    a little bit cleaner.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • This patch modifies the users of sysfs_mount to use sysfs_root
    instead (which is what they are looking for). It then
    makes sysfs_mount static to keep people from using it
    by accident.

    The net result is slightly faster and cleaner code.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Since sysfs no longer stores fs directory information in the dcache
    on a permanent basis kill_litter_super it is inappropriate and actively
    wrong. It will decrement the count on all dentries left in the
    dcache before trying to free them.

    At the moment this is not biting us only because we never unmount sysfs.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Now that sysfs_get_inode is dropping the inode lock
    we no longer have a need from sysfs_instantiate.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Signed-off-by: "Eric W. Biederman"
    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • lookup_one_len_kern() should be called with the parent's i_mutex
    locked. Fix it.

    Spotted by Eric W. Biederman.

    Signed-off-by: Tejun Heo
    Cc: Eric W. Biederman
    Cc: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Signed-off-by: Rolf Eike Beer
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Rolf Eike Beer
     
  • With the previous sysfs_add_one() update, there is only one user of
    the return value of sysfs_addrm_finish() and the user can switch to
    testing @sd easily. Make sysfs_addrm_finish() return void for cleaner
    semantics as suggested by Satyam Sharma.

    This patch doesn't introduce any noticeable behavior change.

    Signed-off-by: Tejun Heo
    Cc: Satyam Sharma
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • Make sysfs_add_one() check for duplicate entry and return -EEXIST if
    such entry exists. This simplifies node addition code a bit.

    This patch doesn't introduce any noticeable behavior change.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • When adding or removing a sysfs_dirent, the user used to be required
    to call link/unlink separately. It was for two reasons - code looked
    like that before sysfs_addrm_cxt conversion and to avoid looping
    through parent_sd->children list twice during removal.

    Performance optimization during removal just isn't worth it. Make
    sysfs_add/remove_one() call sysfs_link/unlink_sibing() implicitly.
    This makes code simpler albeit slightly less efficient. This change
    doesn't introduce any noticeable behavior change.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • With the shadow directories gone, sysfs_rename_dir() can be simplified.

    * parent doesn't need to be grabbed separately. Just access
    old_dentry->d_parent.

    * parent sd can never change. Remove code to move under the new
    parent.

    * Massage comments a bit.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • * remove space between * and symbol name in variable declaration.

    * kill unnecessary new line.

    * kill 'found' and test 'sd' instead.

    Signed-off-by: Tejun Heo
    Acked-by: Cornelia Huck
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     
  • While shadow directories appear to be a good idea, the current scheme
    of controlling their creation and destruction outside of sysfs appears
    to be a locking and maintenance nightmare in the face of sysfs
    directories dynamically coming and going. Which can now occur for
    directories containing network devices when CONFIG_SYSFS_DEPRECATED is
    not set.

    This patch removes everything from the initial shadow directory support
    that allowed the shadow directory creation to be controlled at a higher
    level. So except for a few bits of sysfs_rename_dir everything from
    commit b592fcfe7f06c15ec11774b5be7ce0de3aa86e73 is now gone.

    Signed-off-by: Eric W. Biederman
    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman