lkml.org 
[lkml]   [2008]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/17] Unionfs: uninline unionfs_copy_attr_times and unionfs_copy_attr_all
    Date
    This reduces text size by about 6k.

    Cc: Hugh Dickins <hugh@veritas.com>

    Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
    ---
    fs/unionfs/fanout.h | 50 --------------------------------------------------
    fs/unionfs/subr.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
    fs/unionfs/union.h | 2 ++
    3 files changed, 52 insertions(+), 50 deletions(-)

    diff --git a/fs/unionfs/fanout.h b/fs/unionfs/fanout.h
    index 4d9a45f..29d42fb 100644
    --- a/fs/unionfs/fanout.h
    +++ b/fs/unionfs/fanout.h
    @@ -313,54 +313,4 @@ static inline void verify_locked(struct dentry *d)
    BUG_ON(!mutex_is_locked(&UNIONFS_D(d)->lock));
    }

    -/* copy a/m/ctime from the lower branch with the newest times */
    -static inline void unionfs_copy_attr_times(struct inode *upper)
    -{
    - int bindex;
    - struct inode *lower;
    -
    - if (!upper || ibstart(upper) < 0)
    - return;
    - for (bindex = ibstart(upper); bindex <= ibend(upper); bindex++) {
    - lower = unionfs_lower_inode_idx(upper, bindex);
    - if (!lower)
    - continue; /* not all lower dir objects may exist */
    - if (unlikely(timespec_compare(&upper->i_mtime,
    - &lower->i_mtime) < 0))
    - upper->i_mtime = lower->i_mtime;
    - if (unlikely(timespec_compare(&upper->i_ctime,
    - &lower->i_ctime) < 0))
    - upper->i_ctime = lower->i_ctime;
    - if (unlikely(timespec_compare(&upper->i_atime,
    - &lower->i_atime) < 0))
    - upper->i_atime = lower->i_atime;
    - }
    -}
    -
    -/*
    - * A unionfs/fanout version of fsstack_copy_attr_all. Uses a
    - * unionfs_get_nlinks to properly calcluate the number of links to a file.
    - * Also, copies the max() of all a/m/ctimes for all lower inodes (which is
    - * important if the lower inode is a directory type)
    - */
    -static inline void unionfs_copy_attr_all(struct inode *dest,
    - const struct inode *src)
    -{
    - dest->i_mode = src->i_mode;
    - dest->i_uid = src->i_uid;
    - dest->i_gid = src->i_gid;
    - dest->i_rdev = src->i_rdev;
    -
    - unionfs_copy_attr_times(dest);
    -
    - dest->i_blkbits = src->i_blkbits;
    - dest->i_flags = src->i_flags;
    -
    - /*
    - * Update the nlinks AFTER updating the above fields, because the
    - * get_links callback may depend on them.
    - */
    - dest->i_nlink = unionfs_get_nlinks(dest);
    -}
    -
    #endif /* not _FANOUT_H */
    diff --git a/fs/unionfs/subr.c b/fs/unionfs/subr.c
    index 0a0fce9..68a6280 100644
    --- a/fs/unionfs/subr.c
    +++ b/fs/unionfs/subr.c
    @@ -240,3 +240,53 @@ char *alloc_whname(const char *name, int len)

    return buf;
    }
    +
    +/* copy a/m/ctime from the lower branch with the newest times */
    +void unionfs_copy_attr_times(struct inode *upper)
    +{
    + int bindex;
    + struct inode *lower;
    +
    + if (!upper || ibstart(upper) < 0)
    + return;
    + for (bindex = ibstart(upper); bindex <= ibend(upper); bindex++) {
    + lower = unionfs_lower_inode_idx(upper, bindex);
    + if (!lower)
    + continue; /* not all lower dir objects may exist */
    + if (unlikely(timespec_compare(&upper->i_mtime,
    + &lower->i_mtime) < 0))
    + upper->i_mtime = lower->i_mtime;
    + if (unlikely(timespec_compare(&upper->i_ctime,
    + &lower->i_ctime) < 0))
    + upper->i_ctime = lower->i_ctime;
    + if (unlikely(timespec_compare(&upper->i_atime,
    + &lower->i_atime) < 0))
    + upper->i_atime = lower->i_atime;
    + }
    +}
    +
    +/*
    + * A unionfs/fanout version of fsstack_copy_attr_all. Uses a
    + * unionfs_get_nlinks to properly calcluate the number of links to a file.
    + * Also, copies the max() of all a/m/ctimes for all lower inodes (which is
    + * important if the lower inode is a directory type)
    + */
    +void unionfs_copy_attr_all(struct inode *dest,
    + const struct inode *src)
    +{
    + dest->i_mode = src->i_mode;
    + dest->i_uid = src->i_uid;
    + dest->i_gid = src->i_gid;
    + dest->i_rdev = src->i_rdev;
    +
    + unionfs_copy_attr_times(dest);
    +
    + dest->i_blkbits = src->i_blkbits;
    + dest->i_flags = src->i_flags;
    +
    + /*
    + * Update the nlinks AFTER updating the above fields, because the
    + * get_links callback may depend on them.
    + */
    + dest->i_nlink = unionfs_get_nlinks(dest);
    +}
    diff --git a/fs/unionfs/union.h b/fs/unionfs/union.h
    index 786c4be..0e0ccde 100644
    --- a/fs/unionfs/union.h
    +++ b/fs/unionfs/union.h
    @@ -199,6 +199,8 @@ struct unionfs_dir_state {

    /* externs needed for fanout.h or sioq.h */
    extern int unionfs_get_nlinks(const struct inode *inode);
    +extern void unionfs_copy_attr_times(struct inode *upper);
    +extern void unionfs_copy_attr_all(struct inode *dest, const struct inode *src);

    /* include miscellaneous macros */
    #include "fanout.h"
    --
    1.5.2.2


    \
     
     \ /
      Last update: 2008-02-17 04:03    [W:0.049 / U:0.248 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site